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

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...

mapomme

XLDnaute Barbatruc
Supporter XLD
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:

kiki29

XLDnaute Barbatruc
Salut, à voir ici

 

Pièces jointes

  • 1.png
    342.9 KB · Affichages: 36
Dernière édition:

July35

XLDnaute Nouveau
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.
 

cp4

XLDnaute Barbatruc
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+
 

July35

XLDnaute Nouveau
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

XLDnaute Barbatruc
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.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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
 

July35

XLDnaute Nouveau
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

  • JF_Fiche_Regards_EU_test.xlsm
    155.5 KB · Affichages: 18

cp4

XLDnaute Barbatruc
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.
 

July35

XLDnaute Nouveau
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.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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

Discussions similaires

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