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

Microsoft 365 Exporter en pdf les onglets sélectionnés avec le nom de la feuille par fichier

  • Initiateur de la discussion Initiateur de la discussion July35
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

July35

XLDnaute Nouveau
Bonjour, bonjour !

Me revoilà avec un petit problème.
Comme indiqué dans le titre, je souhaiterai tout simplement, effectuer un export pdf de mes onglets sélectionnés avec le nom de la feuille par fichier. Je précise qu'il s'agit de faire un pdf par onglet et non plusieurs onglet dans le même pdf.
Je ne sais pas s'il existe une manip simple en faisant un export manuel du fichier.
Sinon, j'ai commencé mon code macro qui se compose :
"Sub Export_PDF()
For x = 1 To Worksheets.Count
NO = Worksheets(x).Name
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:="E:\XX\AFFAIRES\MANCHE\XX\Technique\Phase_1_Prediag\Fiches_Regards\PDF_Fiches_EP\" & NO & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Next x
End Sub"

Mais ça exporte encore toutes feuilles.
Quelqu'un pourrait m'aider, s'il vous plait ?

Merci d'avance pour vos réponses !
 
Solution
Re,

Essayez ce code qui fonctionne chez moi.
Attention : Il faut remplacer C:\toto\ par votre propre chemin de dossier.

VB:
Sub Export_PDF()
Dim x, s, NO, t
   Application.ScreenUpdating = False
   For Each x In ActiveWindow.SelectedSheets: s = s & "\" & x.Name: Next
   s = Mid(s, 2): s = Split(s, "\"): Sheets(1).Select
   For Each x In s
      NO = Sheets(x).Name
      Sheets(x).Select Replace:=True
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\toto\" & NO & ".pdf", _
      Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
      OpenAfterPublish:=False
   Next x
   For Each x In s: Sheets(x).Select False: Next
   MsgBox "Les feuilles suivantes ont été exportées en PDF...
Bonjour @July35,

Allez voir du côté de la propriété : SelectedSheets qui est une propriété d'un objet de type Window.

Un exemple :
VB:
Sub Test()
Dim sh
   For Each sh In ActiveWindow.SelectedSheets
      MsgBox sh.Name
   Next sh
End Sub

ou
Code:
Sub Test_2()
Dim  i As Long
   For i = 1 To ActiveWindow.SelectedSheets.Count
      MsgBox ActiveWindow.SelectedSheets(i).Name
   Next i
End Sub
 
Dernière édition:
Salut, à voir ici

 

Pièces jointes

  • 1.png
    342.9 KB · Affichages: 41
Dernière édition:
Bonjour, merci pour vos réponses !

mapomme, je n'arrive pas à faire fonctionnait tes codes, il faut juste que je l'ai ajoute aux miens ? comme j'ai besoin d'un chemin d'export.

kiki29, je n'arrive pas à ouvrir la macro, cela me met ça :

J'ai un peu près compris son fonctionnement et j'ai peur qu'elle soit trop complexe pour pouvoir l'ajouter à ma macro ?
Je suis très novice dans le domaine de la VBA.
 
July35🙂, mapomme 😉, kiki29😉,

à tester, code à mettre en début de module (source ici)
VB:
#If Win64 Then
    Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
        (ByVal hwnd As Long, ByVal pszPath As String, ByVal lngsec As Long) As Long
#Else
    Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
        (ByVal hwnd As Long, ByVal pszPath As String, ByVal lngsec As Long) As Long
#End If

A+
 
cp4, ça ne marche pas, mais je doit mal m'y prendre, c'est un niveau au dessus du mien.
mapomme, ok !
Bon j'ai adapté votre deuxième code au mien ... j'ai un début de quelque chose mais ce n'est pas encore ça ...
J'ai fait :
"
Sub Export_PDF()
For x = 1 To ActiveWindow.SelectedSheets.Count
NO = Worksheets(x).Name
Worksheets(NO).ExportAsFixedFormat Type:=xlTypePDF, Filename:="E:\XX\AFFAIRES\MANCHE\XX\Technique\Phase_1_Prediag\Fiches_Regards\PDF_Fiches_EU\" & NO & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Next x
End Sub"

C'est à dire que sur mes 200 fiches, si j'en sélectionne en milieu de liste des onglet, il prend bien en compte le nombre d'onglet sélectionnées mais fait à chaque fois sur les premiers et non les sélectionnés ...

Par exemple, si je le lance ma macro (voir image ci dessous) il va m'exporter "base donne", modele, EU86, EU201 et EU212 et non ceux sélectionnées :


Quelqu'un peut m'aider à savoir comment corriger ce soucis ? je sens que j'y suis presque !
 
cp4, ça ne marche pas, mais je doit mal m'y prendre, c'est un niveau au dessus du mien.
Quelqu'un peut m'aider à savoir comment corriger ce soucis ? je sens que j'y suis presque !
Bonjour July35,
je t'ai proposé une solution qui n'est pas de moi. Mais que j'avais testé. Moi aussi, je ne suis pas une lumière en codage (encore et toujours en découverte et apprentissage). J'ai cru comprendre que ton souci était lié aux déclarations de variables pour du 64bits, d'où ma proposition.

Je pense que ton problème aurait été résolu, si tu avais joint un fichier sans données confidentielles.

Mapomme 😉, t'as proposé 2 codes à adapter à ton cas.
 
Re 🙂,
Bonjour @cp4 😉

Vous voulez boucler sur les feuilles sélectionnées. Donc il faut boucler sur la collection ActiveWindow.SelectedSheets. Donc l'indice x est relatif à ActiveWindow.SelectedSheets et non pas à la collection de toutes les feuilles WorkSheets.

Essayez de remplacer :
Code:
NO = Worksheets(x).Name

par
VB:
NO = ActiveWindow.SelectedSheets(x).Name



nota : on peut se passer de cette ligne et écrire directement :
VB:
For x = 1 To ActiveWindow.SelectedSheets.Count
ActiveWindow.SelectedSheets(x).ExportAsFixedFormat Type:=xlTypePDF, Filename:="E:\XX\AFFAIRES\MANCHE\XX\Technique\Phase_1_Prediag\Fiches_Regards\PDF_Fiches_EU\" & NO & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Next x
 
cp4, ah d'accord je ne comprenais pas d'où venais le problème ! (oui je suis vraiment très nulle ..)
T'as a raison je joins un excel exemple mais comme il y a des liens de photos (que j'ai quand même supprimer), l'excel est pas terrible ...

ma pomme, ok l'export se fait bien avec les feuilles sélectionnés mais ces derniers sont identiques ! (voir images jointes) il reste sur la même feuille "EU79" et fait 3 exports avec juste la modification des noms de fichiers alors que je veux bien l'export de l'onglet EU 80 et EU90.


Je joins ma macro exemple et désolé d'avance mais je n'ai pas réussie à supprimer la totalité de mes liens photos et ça apparaît une fenêtre à chaque clique sur un onglet ...
Chaque fiche à bien son identifiant et nom d'onglet qui diffère, je souhaiterai "simplement" exporter mes feuilles selectionnées en pdf.
 

Pièces jointes

Re july35,

J'ai créé les différents dossiers pour respecter le chemin de ta macro. Il y avait 5 onglets sélectionnés et j'ai eu 5 fichiers pdf créés. Donc la macro fonctionne parfaitement.
Je ne vois pas où réside ton problème car il ne se reproduit pas chez-moi (windows 7 64 bits et excel 2010 32 bits).

Bonne journée.
 
Non la macro ne marche pas bien, comme indiqué plus haut dans mon précédent message : si tu ouvres les 5 pdf exportés tu verras qu'ils sont tous identiques. Par exemple, si tu ouvres le EU 210 tu verras qui correspond à un autre identifiant que EU210. Mes fiches sur excel sont bien différentes par les données , identifiants renseignés. Je ne sais pas si je suis compréhensible ?

Dans l'image ci dessous, on voit bien que les fiches sont identiques alors qu'elles devraient être différentes avec leur bon identifiant.
 
Re,

Essayez ce code qui fonctionne chez moi.
Attention : Il faut remplacer C:\toto\ par votre propre chemin de dossier.

VB:
Sub Export_PDF()
Dim x, s, NO, t
   Application.ScreenUpdating = False
   For Each x In ActiveWindow.SelectedSheets: s = s & "\" & x.Name: Next
   s = Mid(s, 2): s = Split(s, "\"): Sheets(1).Select
   For Each x In s
      NO = Sheets(x).Name
      Sheets(x).Select Replace:=True
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\toto\" & NO & ".pdf", _
      Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
      OpenAfterPublish:=False
   Next x
   For Each x In s: Sheets(x).Select False: Next
   MsgBox "Les feuilles suivantes ont été exportées en PDF :" & vbLf & Join(s, vbLf)
End Sub
 
Réactions: cp4
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

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