Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Export PDF de feuilles sur plusieurs classeurs ouverts

ml121

XLDnaute Nouveau
Bonjour ,

Je suis à la recherche d'un peu d'aide concernant un code, plus précisément une boucle que je n'arrive pas à boucler !

J'ai plusieurs classeurs ouverts. Chacun avec 5 onglets contenant des données. Je cherche à exporter en PDF tous les onglets de chaque classeur sur un fichier contenant le nom du classeur ex :

Classeur 1 / Onglets A-B-C --- PDF C1 avec les pages A-B-C
Classeur 2 / Onglets A-B-C --- PDF C2 avec les pages A-B-C

J'ai réussi à initialiser une boucle qui me crée bien un document par classeur avec le nom du classeur, mais le soucis est qu'il ne change pas de selection de feuille : sur tous les documents (avec un nom différent), je vois les même données.

Je suis débutant en VBA c'est pour cela que je me permet de vous solliciter.

Voici mon code :

Sub export_pdf()

Dim wb As Workbook
Dim rep As String
rep = "C:\....\A SUP\"

Application.ScreenUpdating = False
For Each wb In Application.Workbooks

Sheets(Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
rep & wb.Name, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True

Next wb
Application.ScreenUpdating = True
End Sub
 

ml121

XLDnaute Nouveau
Merci de votre réponse, néanmoins mon problème n'est pas résolu.

Les pages exportées sont maintenant vierges. et plus rien n'apparaît alors que dans le premier code j'avais bien tous les onglets d'un classeur.

Autre question : je dois placer ce code dans un module d'un classeur ou directement dans un thisworkbook des classeurs ouverts ?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Dans un module de code.

Sheets(Array(......)) ne sélection que les feuilles du classeur actif (en l'occurence celui de la macro).
Pour que la macro sélectionne les feuilles du classeur parcourru (wb) mettre:

wb.Sheets(Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi")).Select

J'aurais du le voir plus tôt

Même si c'est possible de mettre la macro dans un module de feuille ou ThisWorkbook, ces derniers sont plutôt utilisés pour gérér des évènements particuliers de classeur ou de feuille.

cordialement
 

ml121

XLDnaute Nouveau
Le code suivant me renvoi l'erreur : la méthode Select de la classe Sheets a echouée...

Sub export_pdf()

Dim wb As Workbook
Dim rep As String
rep = "C:\...\A SUP\"

Application.ScreenUpdating = False
For Each wb In Application.Workbooks
wb.Sheets(Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi")).Select
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
rep & wb.Name, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True

Next wb
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Euh, pas vraiment de moyen de savoir pourquoi?
Peut-être qu'une (ou plus) feuille n'existe pas dans le classeur représenté par wb?!

Bonne fin d'après-midi
 

ml121

XLDnaute Nouveau
Du coup voici le code qui fonctionne :

Note : Je savais que les onglets à exporter étaient toujours les 5 premiers c'est pour cela que j'ai changé la méthode de selection. En passant avec une selection par nom comme initialement prévue (Lundi,Mardi,...), j'avais toujours des feuilles manquantes car les onglets sont nommés une fois en majuscule puis une autre fois en minuscule...bref casse différente à chaque fichier.

Sub t2()

Dim wb As Workbook
Dim rep As String
Dim onglet As Variant


rep = "MASQUE VOLONTAIREMENT" 'Repertoire du fichier PDF
onglet = Array(1, 2, 3, 4, 5)

Application.ScreenUpdating = False
onglet = Array(1, 2, 3, 4, 5)

For Each wb In Application.Workbooks
wb.Activate
Sheets(onglet).Select 'Selection des feuilles à exporter
wb.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
rep & wb.Name, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True

Next wb


Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…