Exporter en pdf plusieurs feuilles générées via une liste déroulante

Bonsoir,
J’ai créé un fichier excel qui comporte entre autres un onglet ELEVES et un onglet Bulletin
Voici le code que j’utilise pour prévisualiser les bulletins des élèves générés via une liste déroulante en I1 qui reprend le numéro des élèves de sheets ELEVES A3 à A32

Sub Image2_Cliquer()
Dim Liste As String, A As Range
With Sheets(« Bulletin »)
Liste = .Range(« I1 »).Validation.Formula1
Liste = Right(Liste, Len(Liste) - 1)
For Each A In Range(Liste)
.[I1] = A.Value
.PrintPreview
Next A
End With
End Sub
Ce code fonctionne très bien mais j’aimerai également créer un code pour exporter en pdf toutes les feuilles générées
Quelqu’un pourrait-il m’aider car tous mes essais sont restés sans résultat?
Merciiiiiiiiii

Bonjour
Tu peux utiliser ce code qui fonctionne très bien :

chemin = ThisWorkbook.Path & « »
nom = Activesheet.name
Sheets(nom).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & nom) & « .pdf » _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True

Que tu peux insérer ici :

For Each A In Range(Liste)
.[I1] = A.Value
.PrintPreview

chemin = ThisWorkbook.Path & « »
nom = A.Value
Sheets(nom).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & nom) & « .pdf » _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True

Next A

A adapter cette ligne : nom = A.Value pour que la variable nom porte le nom exacte de chaque onglet à exporter en pdf
Je ne connais pas exactement la composition de la liste déroulante « liste »
Petite adaptation donc à faire

Chaque bulletin sera généré en pdf avec enregistrement dans le répertoire du fichier au nom de chaque item de la liste déroulante « liste »

Donnes moi des nouvelles

Petite correction sur cette ligne de code :
au lieu de
chemin = ThisWorkbook.Path & « »
mettre
chemin = ThisWorkbook.Path & «  »
mille excuses

Les copier/coller ne fonctionne pas bien il faut mettre :

chemin = ThisWorkbook.Path & «\»

J’espère que cette fois ci le dernier caractère sera visible (antislash entre les guillemets)

Désolé

Bonjour FFO,
Merci pour ton aide ;o)
Je teste cela aujourd’hui et te tiens au courant.

Bonne journée.

Bonjour FFO,

Désolée pour la réponse tardive mais n’ai pas eu le temps de travailler sur le fichier avant aujourd’hui
Je patauge encore , voici ce que cela donne : ( avec une erreur 'l’objet invoqué s’est déconnecté de ses clients

Sub Image2_Cliquer()

Dim Liste As String, A As Range
With Sheets("Bulletin")
    Liste = .Range("I1").Validation.Formula1
    Liste = Right(Liste, Len(Liste) - 1)
    For Each A In Range(Liste)
        .[I1] = A.Value
        .PrintPreview

chemin = ThisWorkbook.Path & «  »
nom = A.Value & « élèves » ’ liste déroulante en I1 dans sheets « Bulletin » libellée de la manière suivante e1,e2,…e32*

Sheets(« Bulletin »).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
(chemin & nom) & " .pdf " _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
 :=False, OpenAfterPublish:=True ‘ l’objet invoqué s’est déconnecté de ses clients

Next A
End With
End Sub

Merci d’avance pour ton retour

… et j’ai bien mis chemin = ThisWorkbook.Path & «\» car je vois que dans ma réponse cela n’apparaît pas

Bonjour
Si le nom de l’onglet à exporter en pf est récupéré dans cette ligne de code :

nom = A.Value & « élèves » ’

Tu dois mettre les instructions d’export qui suivent comme ceci :

Sheets(nom).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
(chemin & nom) & " .pdf " _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
 :=False, OpenAfterPublish:=True

Sheets(nom) est l’onglet qui porte le nom qui doit être exporté et non pas Sheets(« Bulletin »)

Modifies et réessaies

Bonjour,

Teste comme ceci

Sub Image2_Cliquer()
  Dim Liste As String, A As Range
    With Sheets("Bulletin")
      Liste = .Range("I1").Validation.Formula1
      Liste = Right(Liste, Len(Liste) - 1)
      For Each A In Range(Liste)
        .[I1] = A.Value
        .PrintPreview
        chemin = ThisWorkbook.Path & "\"
        nom = ActiveSheet.Name
        Sheets(nom).ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nom & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=True
      Next A
    End With
End Sub

Oui effectivement c’est une très bonne idée
A tester

CARNET DE COTES 1 démo.xlsm (1,5 Mo)

j’ai toujours un message d’erreur mais j’ai dû la commettre.

Je joins mon fichier en espérant qu’il n’est pas trop lourd

merci pour ton aide ;o)

j’ai testé avec le bouton 3 mais toujours un code d’erreur.
je joins mon fichier car suis loin d’être une pro en vba
CARNET DE COTES 1 démo.xlsm (1,5 Mo)

merci d’avance pour ton retour

Re,
Dis moi dans quel répertoire se trouve ton classeur Carnet de notes
Depuis l’explorateur CTRL C pour récupèrer le chemin
et dans quel emplacement tu veut l’enregistrer
Idem de puis l’explorateur, tu CTRL C pour le chemin

Et tu places les deux chemins dans le post
Je pense que tu as du mal à comprendre le THISWORKBOOK

De fait… pas très clair pour moi

le classeur se trouve sur MA CLEF USB(D:) \ Bulletin
et je voudrais enregistrer sur MA CLEF USB(D:) \ Bulletin \ BULLETIN 1

J’ai essayé cela aussi mais même erreur
liste déroulante en I 1
Sub Image3_Cliquer()

Dim Liste As String, I As Range
With Sheets(« Bulletin »)
Dim NomDossier As String
Dim CheminDossier As String
Liste = .Range(« I1 »).Validation.Formula1
Liste = Right(Liste, Len(Liste) - 1)
For Each I In Range(Liste)
.[I1] = I.Value

On Error GoTo 1

'Nom de dossier
NomDossier = Range(« B32 »)
CheminDossier = « D:\Bulletin\BULLETIN 1 » & NomDossier & «  »

If NomDossier = «  » Then Exit Sub

'Enregistrement au format PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
CheminDossier & "Bulletin " & Range(« G1 »).Value & « .pdf », quality:= _
xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
from:=1, to:=1, openafterpublish:=False

1
Next I
End With
End Sub

Après analyse du comportement de ton fichier avec le traitement export pdf
Tout se passe dans ton onglet « Bulletin » et non dans des onglets spécifiques par élève comme je l’avais compris
Donc effectivement c’est cet onglet mis à jour pour chaque élève qui doit être exporté
Donc l’onglet à cibler pour l’export est bien ce que celui que tu avais mis :

Sheets(« Bulletin »).ExportAsFixedFormat Type:=xlTypePDF,

Seulement il faut dans le nom de l’enregistrement en pdf récupérer les informations nom prénom de chaque élève qui figure dans l’onglet « Bulletin » en cellule C1 et G1
J’ai donc récupéré ces informations dans la variable « nom » que j’inclus dans le nom d’export ici :

Filename:=chemin & nom & « .pdf »

avec pour la variable « nom » cette ligne en amont :

nom = "Bulletin " & Range(« C1 ») & « - » & Range(« G1 »)

Je récupère les valeurs des cellules C1 et G1 précédé de "Bulletin "

Ce qui donne ces enregistrements obtenus après traitement :

image

Attention si aucun nom et prénom dans les cellules C1 et G1 tous les exports pdf sont effectués sur un seul et même fichier intitulé Bulletin 0-.pdf

J’ai supprimé l’aperçu avant impression :

.PrintPreview

cette étape ne sert à rien pour l’export en pdf et est très contraignant car à chaque traitement il faut le fermer pour obtenir le suivant sachant que dans ton fichier transmis il y en a 30 c’est 30 fermetures pour arriver au terme de la procédure galère galère

J’ai aussi supprimé l’ouverture du pdf qui si lui n’a aucune action sur la macro (aucune interruption) ouvre autant de pdf que d’item dans la liste à traiter soit dans ton fichier 30 pdf qu’il faut aussi refermer
Cela concerne cette partie d’instruction :

OpenAfterPublish:=False (était comme ceci OpenAfterPublish:=True)

Attention au chemin que tu as modifié ainsi :

chemin = ThisWorkbook.Path & « D:\Bulletin\Bulletin 1 »

il manque un caractère en bout «  » antishlas indispensable pour un enregistrement des fichiers dans le répertoire cité « Bulletin\Bulletin 1 »
Donc mettre comme ceci :
chemin = ThisWorkbook.Path & « D:\Bulletin\Bulletin 1 »

Le code intégral ainsi modifié :

Sub Image3_Cliquer()
Dim Liste As String, A As Range
With Sheets(« Bulletin »)
Liste = .Range(« I1 »).Validation.Formula1
Liste = Right(Liste, Len(Liste) - 1)
For Each A In Range(Liste)
.[I1] = A.Value
'.PrintPreview
chemin = ThisWorkbook.Path & « D:\Bulletin\Bulletin 1 »
nom = "Bulletin " & Range(« C1 ») & « - » & Range(« G1 »)
Sheets(« Bulletin »).ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nom & « .pdf », _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Next A
End With
End Sub

Cela fonction très bien chez moi
Fais des essais
Ton fichier ci-joint ainsi modifié

CARNET DE COTES 1 démo.xlsm (1,5 Mo)

ANTISHLAS rechigne à être retranscrit n’oublies pas de le mettre en bout ici :

chemin = ThisWorkbook.Path & « D:\Bulletin\Bulletin 1\»
Une copie d’écran :

Désolé pas d’autre choix

Je te renvoie ton fichier ci-joint le précédent risque de ne pas avoir toutes les corrections
Prends donc en lieu et place celui_ci
CARNET DE COTES 1 démo.xlsm (1,5 Mo)

Merci beaucoup pour tout le mal que tu te donnes pour m’aider mais chez moi, j’ai systématiquement le même message d’erreur… question idiote : cela peut-il être lié à la version d’excel utilisée ? à savoir excel 2016

J’ai essayé cela aussi et même erreur…

J’ai essayé cela aussi mais même erreur
liste déroulante en I 1
Sub Image3_Cliquer()

Dim Liste As String, I As Range
With Sheets(« Bulletin »)
Dim NomDossier As String
Dim CheminDossier As String
Liste = .Range(« I1 »).Validation.Formula1
Liste = Right(Liste, Len(Liste) - 1)
For Each I In Range(Liste)
.[I1] = I.Value

On Error GoTo 1

'Nom de dossier
NomDossier = Range(« B32 »)
CheminDossier = « D:\Bulletin\BULLETIN 1 » & NomDossier & « »

If NomDossier = « » Then Exit Sub

'Enregistrement au format PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
CheminDossier & "Bulletin " & Range(« G1 »).Value & « .pdf », quality:= _
xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
from:=1, to:=1, openafterpublish:=False

1
Next I
End With
End Sub

Cette ligne que je n’ai pas utilisé car n’ayant pas la même arborescence chez moi :

chemin = ThisWorkbook.Path & « D:\Bulletin\Bulletin 1\»

N’est pas correcte

essaies d’abord comme ceci :

chemin = ThisWorkbook.Path & «\»

exécutes le traitement et si aucun bug vérifies la présence des fichiers dans le répertoire de l’outil

Puis vas dans le répertoire souhaité :

« D:\Bulletin\Bulletin 1 »

si tu as un fichier à l’intérieur (si tu n’en as pas tu en crées un)

Clique droit dessus et propriété

Récupère le chemin dans la souris et recopies le ici :

chemin = "ton chemin à recopier puis "

Et refais des essais
Si aucun bug vérifies la présence des fichiers dans le répertoire souhaité

Donnes moi des nouvelles

merci FFO mais ça aussi, cela ne fonctionne pas.

Je désespère