Export feuilles excel séparées au format pdf

Résolu
Bonjour à tous !

Je souhaiterais avoir une petite commande macro pour exporter des feuilles excel en pdf.
Deux contraintes néanmoins: sur toutes les feuilles, je souhaiterais que seules celles dont les onglets sont sélectionnés (ctrl clic sur chacune) soit exportés et que chaque onglet produise un pdf séparément.

Pour le moment, j'ai pondu cela:

Sub Test()

Dim Fe As Worksheet

For Each Fe In ActiveWindow.SelectedSheets

Fe.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\mesdocuments\" & Fe.Name & ".pdf"

Next Fe

End Sub


Mais dans ce cas il m'exporte certes que les onglets sélectionnés et me produit un pdf par onglet, mais réunit tous les onglets dans chaque pdf...
Le top aussi serait que les pdf soient générés dans un dossier "PDF" dans le même répertoire que le fichier excel.

D'avance merci pour le coup de main, bien à vous.
Bapt.

1 réponse

  1. Contributeur
    Bonjour,

    comme ceci:

    Option Explicit
    Dim nom, chemin  As String
    Dim sh As Worksheet
    Private Sub CommandButton1_Click()
    For Each sh In Workbooks("Save_pdf.xls").Windows(1).SelectedSheets 'adapter nom classeur
     nom = sh.Name
        Save_pdf
     Next
    End Sub
    Private Sub Save_pdf()
    chemin = "C:\Users\LePivert\Documents\" 'chemin du dossier destination à adapter
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            chemin & "\" & nom & ".pdf", Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
            False
            MsgBox "Enregistrer" 'on peut supprimer
    End Sub
    

    pour le même chemin que le classeur:

     chemin = ActiveWorkbook.Path & "\"


    1
    1. Bonsoir,
      Et merci beaucoup pour ta réactivité.
      Néanmoins je bloque sur la façon d'utiliser la macro. S'agissant d'une private sub, elle n’apparaît pas dans la liste des macro et se déclenche automatiquement c'est ça ? Mais à quelle condition svp ? N'est-il pas possible de générer l'action via un bouton ?

      J'ai testé ce code et lancé depuis la fenêtre VBA dans l'onglet développeur (petit triangle vert), il m’apparaît l' Erreur d'exécution '1004': Erreur définie par l’application ou par l’objet. Je lis qu'il s'agit souvent d'un problème d'appel de cellule, pourtant il n'y a pas d'erreur de ce côté là si ?

      Option Explicit
      Dim nom, chemin As String
      Dim sh As Worksheet
      Private Sub Command_Click()
      For Each sh In Workbooks("Test.xlsm").Windows(1).SelectedSheets 'adapter nom classeur
      nom = sh.Name
      Save_pdf
      Next
      End Sub
      Private Sub Save_pdf()
      chemin = ActiveWorkbook.Path & "\PDF\"
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
      chemin & "\" & nom & ".pdf", Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
      False
      MsgBox "Enregistrer" 'on peut supprimer
      End Sub


      D'avance merci, bien à toi.
      Bapt.
      0
    2. Contributeur
      Je t'ai fait un exemple, tu n'auras qu'a changer le chemin de destination dans le code:

      https://www.cjoint.com/c/HEphgSW1aPQ

      Si tu veux te servir du code, il faut le mettre dans un module comme ceci:

      Option Explicit
      Dim nom, chemin  As String
      Dim sh As Worksheet
       Sub Save_onglet()
      For Each sh In Workbooks("Test.xlsm").Windows(1).SelectedSheets 'adapter nom classeur
       nom = sh.Name
        Sheets(nom).Select
          Save_pdf
       Next
      End Sub
      Private Sub Save_pdf()
      chemin = ActiveWorkbook.Path & "\PDF\" 'chemin du dossier destination à adapter
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
              chemin & "\" & nom & ".pdf", Quality:=xlQualityStandard, _
              IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
              False
              MsgBox "Enregistrer" 'on peut supprimer
      End Sub
      
      


      ensuite pour le lancer tu lui attribues (Save_onglet) un raccourci clavier comme ceci:

      http://www.info-3000.com/vbvba/raccourciclavier.php

      @+ Le Pivert
      0
    3. Bonjour,
      L'exemple marche à la perfection, l'interface est une super idée pour ne pas avoir à copier le bouton sur chaque feuille !
      Néanmoins, lorsque je copie le code dans un fichier vierge et colle le code suivant, ça ne marche pas:

      Option Explicit
      Dim nom, chemin As String
      Dim sh As Worksheet
      Sub Save_onglet()
      For Each sh In Workbooks("Classeur2.xlsm").Windows(1).SelectedSheets 'adapter nom classeur
      nom = sh.Name
      Sheets(nom).Select
      Save_pdf
      Next
      End Sub
      Private Sub Save_pdf()
      chemin = ActiveWorkbook.Path & "\PDF\" 'chemin du dossier destination à adapter
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
      chemin & "\PDF\" & nom & ".pdf", Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
      False
      MsgBox "Enregistrer" 'on peut supprimer
      End Sub


      Sinon je peux copier la boite de dialogue et le code rattaché + le bouton et la macro liste déroulante dans mon fichier et ça devrait fonctionner ?
      Encore merci pour l'aide !
      Bapt.
      0
    4. Contributeur
      Tu as fait une erreur sur le chemin en recopiant le code:

      2 fois
      "\PDF\"
      dans le chemin et dans le code d'enregistrement du PDF

      mettre comme ceci:

      Private Sub Save_pdf()
      chemin = ActiveWorkbook.Path & "\PDF\" 'chemin du dossier destination à adapter
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
      chemin  & nom & ".pdf", Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
      False
      MsgBox "Enregistrer" 'on peut supprimer
      End Sub


      @+ Le Pivert
      0