Convertir plusieurs feuilles d'Excel en PDF par macro

Bonjour ! J’ai besoin d’une macro pour convertir plusieurs feuilles d’Excel en un seul document PDF. J’ai trouvé sur internet le code VBA suivant (voir pièce jointe). Mais l’exécution signale une erreur de compilation. Quelq’un pourrait réparer l’erreur pour moi et m’expliquer un peu ? Merci d’avance !
ConvertirPlusieursFeuillesEn1PDF.xlsm (17,3 Ko)

Sub ConvertirFeuillesEnPDF()
     Dim wb    As Workbook
     Dim ws    As Worksheet
     Dim nomPDF As String

     Set wb = ActiveWorkbook                 'Le classeur actif
     nomPDF = wb.Path & "\TEST"              '& wb.Name '& ".pdf" 'Le nom du fichier PDF

     Application.ScreenUpdating = False      'Désactiver le rafraîchissement de l'écran

     Sheets(Array("feuil1", "feuil2")).Select
     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nomPDF & "_2_des_3_Feuilles"     ', Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False ', Append:=True 'Exporter la feuille en PDF et l'ajouter au fichier existant
     wb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nomPDF & "_complet"     ', Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False ', Append:=True 'Exporter la feuille en PDF et l'ajouter au fichier existant
     Sheets(1).Select
     Application.ScreenUpdating = True       'Réactiver le rafraîchissement de l'écran

     MsgBox "Conversion terminée. Le fichier PDF se trouve dans le même dossier que le classeur.", vbInformation, "Succès"     'Afficher un message de confirmation
End Sub

Merci Cow18 pour ta proposition. Mais est-ce qu’il n’y a pas moyen d’éviter la méthode ARRAY et d’opter une autre compte tenu de la possibilité d’un grand nombre de feuilles à convenir ?

Avec VBA, on peut temporairement cacher les feuilles qu’on ne veut pas convertir, puis créer le PDF complet (donc ce wb.ExportAsFixed…) et puis montrer de nouveau toutes les feuilles.
Ou est-ce que vous avez une méthode pour savoir lesquelles ??? Ces feuilles, elles commencent toutes avec le même préfix ou contiennent certains mots ou … . Si vous savez m’expliquer …

Moins convivial, c’est les créer et puis les joindre avec internet, exemple : Fusionner PDF - rapide, en ligne, gratuit - PDF24 Tools

Bonjour Cow18 merci pour ta réaction !
En fait ce que j’appelle feuilles ce sont les onglets d’Excel à les noms tels que Feuil1, Feuil1, Feuil3, etc. dans la version française. Mon fichier annexé au sujet explicite mieux. Bonne journée dominicale !

les feuilles « FeuilX » dont le dernier charactère est impair seront utilisé pour le pdf

Option Compare Text                          'majuscules=miniscule!!! , >>>> oligatoire = 1ere ligne du module

Sub ConvertirFeuillesEnPDF()

     For Each sh In ThisWorkbook.Worksheets 'boucler les feuilles
          If sh.Name Like "Feuil*" Then 'nom des feuilles commence avec "Feuil"
               If Right(sh.Name, 1) Mod 2 = 1 Then s = s & vbLf & sh.Name 'dernier charactère est impair = ajouter nom de la feuille au string
          End If
     Next

     If Len(s) > 0 Then 'string n'est pas vide
          arr = Split(Mid(s, 2), vbLf) 'séparer sur le vblf
          Sheets(arr).Select 'sélectionner les feuilles "Feuil" & impaires
          ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\Mes_Feuilles_impaires", openAfterPublish:=True 'exporter vers un PDF
          MsgBox "Conversion terminée. Le fichier PDF se trouve dans le même dossier que le classeur.", vbInformation, "Succès"     'Afficher un message de confirmation
          Sheets(arr(0)).Select
     Else
          MsgBox "aucune feuille"
     End If
End Sub

Bonjour Cow18 ! Merci pour cette autre suggestion de solution. Je vais l’essayer et te faire un feedback.

Salut Cow18 ! J’ai essayé le code. Il marche très bien pour les 2 premières feuilles de calcul Excel, mais malheureusement ne prend pas compte la 3è. Or mon souhait est qu’il puisse intégrer toutes feuilles du classeur. Comment évoluer vers cette solution ?

et si vous supprimez la permière partie (texte barré) de cette ligne jusqu’au « Then »
image

Et si cela ne fonctionne pas encore, donnez une bonne description pour sélectionner les feuilles.

PS. Les feuilles s’appèlent toutes « Feuil… » ou vous avez aussi des « feuil… » (majuscules vs miniscules) ?

Bonsoir Cow18 !
Les feuilles peuvent prendre n’importe quel nom. Voici j’envoie un fichier dont les feuilles portent les noms des mois de l’année et autres ! Mon souci, c’est de trouver un code pouvant convertir les différents fichiers en un document pdf continu.

ConvertirPlusieursFeuillesEn1PDF_02.xlsm (54,0 Ko)

toutes les feuilles (visibles!) d’un fichier

Sub ConvertirFeuillesEnPDF()
     Dim NomPDF: NomPDF = ThisWorkbook.Path & "\All_InOne"
     ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomPDF, OpenAfterPublish:=True
End Sub

mais vous demandez toutes les feuilles de plusieurs fichiers ???
Ca, c’est autre chose, soit créer un fichier avec toutes les feuilles de tous les fichiers et puis exporter vers PDF, soit créer un PDF pour chaque fichier et puis les joindre avec certains sites sur Internet ou certains programs.

C’est quoi que vous voulez.
ConvertirPlusieursFeuillesEn1PDF_02.xlsm (69,5 Ko)

1 « J'aime »

Bonjour ! J’ai l’impression que je n’arrive pas à vous faire cerner mon problème. Pourtant il est simple: j’ai plusieurs données dans différentes feuilles (voir l’annexe). Avoir un bouton lié à un code qui me permet convertir les données des feuilles Excel, les unes à la suite des autres formant un document PDF !

Et moi, j’ai la pensée inverse !
Le code de hier crée un pdf nommé « All_InOne.pdf » qui se situe dans le même chemin que le fichier excel. Dans ce pdf, toutes les feuilles (non-vide et visible) sont présent.
Donc le problème, c’est la macro ou le bouton ?

Bonjour Cow18 !
C’est exactement le type de macro dont j’ai besoin. Je n’avais pas vu votre dernière solution. Elle me convient et merci infiniment !

1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.