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
Cette appli donne les possibilités de fusion en 1 seul pdf de l'ensemble des feuilles, ou de génération des feuilles sélectionnées de façon séparée, de gestion des doublons via un indice, le tout dans un dossier créé automatiquement et nommé par défaut Dossier PDFs à la racine de l'application. L'ensemble des feuilles ( visibles ou pas ) est listé via le bouton Récap

Office 32 bits est recommandé pour la plupart des utilisateurs
Nous recommandons la version 32 bits d’Office pour la plupart des utilisateurs, car elle offre une plus grande compatibilité avec la plupart des autres applications, en particulier les compléments tiers. C’est la raison pour laquelle la version 32 bits d’Office est installée par défaut, même sur les systèmes d’exploitation Windows 64 bits. Sur ces systèmes, le client Office 32 bits est pris en charge en tant qu’installation Windows-32-on-Windows-64 (WOW64). WOW64 est l’émulateur x86 qui permet l’exécution de façon transparente des applications Windows 32 bits sur les systèmes Windows 64 bits. Cela permet aux utilisateurs de continuer à utiliser les contrôles ActiveX et les compléments COM Microsoft avec la version 32 bits d’Office.
 

Pièces jointes

  • 1.png
    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 :
probleme_ouverture_fichier.JPG

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 :
probleme_bis.JPG


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


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

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

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
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 146
Membres
112 669
dernier inscrit
Guigui2502