XL 2013 [RESOLU] Imprimer chaque feuille dans un fichier différent

troopers87

XLDnaute Occasionnel
Bonjour à tous,

Dans mon fichier Excel, j'ai une feuille Excel par commercial.
Je dois leur envoyer leur propre feuille, sans les autres tous les mois, et au format pdf.
Comme je suis flemmard, je n'ai pas envie d'enregistrer 15 fois le même fichier en masquant les feuilles des autres commerciaux. Je me dis qu'il existe certainement une combine, éventuellement en VBA, pour permettre cela.

Merci d'avance pour votre aide !
 

Yurperqod

XLDnaute Occasionnel
En testant le nom des feuilles
VB:
Sub TestV2()
Dim Chemin As String
Dim Feuille As Worksheet
Chemin = "C:\TEMP\" ' mettre le nom du dossier où enregistrer les PDF
For Each Feuille In Worksheets
If Feuille.Name Like "Commer*" Then
'MsgBox Feuille.Name ' pour tester la boucle
Feuille.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & Feuille.Name & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End If
Next
End Sub
On a bien un fichier par commercial
 

jecherche

XLDnaute Occasionnel
Bonjour,

Oula ! Juste avant d'envoyer mon mail, je me suis rendu compte qu'en fait :
- Excel me créait bien un fichier .pdf par commercial,
- Mais que chaque fichier contenait le contenu de toutes les feuilles sélectionnées !

Gros problème pour ma part ^^

Oh! Désolé de mon erreur; je n'ai pas suffisamment regardé le contenu des tests. 8- //
Depuis, j'ai fait plusieurs recherches ... pour imprimer les onglets sélectionnés (contigus ou non contigus), chacun dans un fichier pdf différent, je ne trouve rien.
Je crois qu'il serait possible de le faire si on passe par un UserForm ... en sachant d'avance le nombre d'onglets pouvant être sélectionnés.


Jecherche
 

jecherche

XLDnaute Occasionnel
Bonjour,

... Je me demande maintenant si on ne pourrait pas imprimer les feuilles sélectionnées, par exemple ? ....
À tester ...
Code:
Sub ImprimerLesFeuillesSelectionnees()
Dim Feuille As Worksheet
Dim Chemin As String
Dim X, Z As Byte
Dim MonDico As Object
Set MonDico = CreateObject("Scripting.Dictionary")

Chemin = "C:\Users\camil\Desktop\Nouveau dossier\" ' mettre le nom du dossier où enregistrer les PDF
For Each Feuille In ActiveWindow.SelectedSheets
   For Key = 1 To Sheets.Count
      If Key = Feuille.Index Then
         If MonDico.exists(Key) Then MonDico.Remove Key
         MonDico.Add Key, Feuille.Name
      Else
         If MonDico.exists(Key) Then
            GoTo Suite
         Else
            MonDico.Add Key, 999
         End If
Suite:
      End If
   Next
Next

Worksheets(1).Select
For X = 1 To Sheets.Count

   If MonDico.Item(X) <> 999 Then
      Worksheets(MonDico.Item(X)).ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & MonDico.Item(X) & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
   End If
Next
Set MonDico = Nothing
End Sub


Jecherche
 
Dernière édition:

troopers87

XLDnaute Occasionnel
Hello et merci pour vos réponses riches et variées !

La dernière proposition de Jecherche me donne soit une partie seulement des feuilles sélectionnées au format pdf, soit un message d'erreur comme quoi le document est déjà ouvert (alors que je le supprime bien à chaque fois du dossier cible)... Peut-être qu'on se complique trop la vie...

Ultime suggestion de ma part :
1. n'imprimer au format pdf que les feuilles affichées
2. masquer en début de macro les feuilles qu'on ne souhaite pas éditer en pdf
3. réafficher les feuilles masquées en fin de macro.

On pourrait partir de l'exemple de mon fichier posté plus haut :
1. on masque la feuille nommée "Instructions",
2. on imprime toutes les feuilles affichées (sans test sur les noms de feuille, car ce seront les noms des commerciaux que je mettrai ici),
3. on réaffiche la feuille "Instructions"

Dans l'attente de vous lire :)
 

jecherche

XLDnaute Occasionnel
Bonjour,

Imprimer que les feuilles visibles peut importe leur nom ...
À tester ...
Code:
Sub Test()
Dim Chemin As String
Dim Feuille As Worksheet
Dim X, Y As Integer
Dim NomFeuil As String

Chemin = "C:\Users\camil\Desktop\Nouveau dossier\" ' mettre le nom du dossier où enregistrer les PDF
Worksheets("Instructions").Visible = False

X = Worksheets.Count

For Y = 1 To X
   NomFeuil = Worksheets(Y).Name
   If Worksheets(NomFeuil).Visible = True Then
      Worksheets(NomFeuil).ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & NomFeuil & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
   End If
Next Y
For Each Feuille In Worksheets
   Feuille.Visible = True
Next

Worksheets("Instructions").Select
End Sub


Jecherche
 

Yurperqod

XLDnaute Occasionnel
Le problème de la proposition du message 16, c'est que dans mon exemple, j'ai nommé les feuilles Commercial1, 2... pour vous guider, mais dans la version finale, ce sont les noms des commerciaux qui seront les noms des feuilles.
Il suffit dans ce cas d'exclure les feuilles dans la boucle
If Not Feuille.Name Like "NomFeuille1Aexclure" Then

On peut aussi créer une copie temporaire du fichier.
Dans cette copie, on supprime les feuilles qui ne sont des noms de commerciaux
puis on lance la macro qui boucle sur toutes les feuilles pour créer un PDF par feuille.
 

troopers87

XLDnaute Occasionnel
Hello Jecherche, Hello Yurperqod,

Je suis désolé, Jecherche, ta solution fonctionne sur mon petit fichier de test (avec 3 commerciaux), mais pas sur mon fichier définitif (qui en comprend 15) : message d'erreur dans la macro suite à l'enregistrement de quelques fichiers...

Je pense qu'on dépasse les capacités d'Excel et qu'il n'est pas possible de faire ce genre de manipulation... Merci quand même pour tout votre intérêt !
 

Yurperqod

XLDnaute Occasionnel
Bonjour le forum

Le VBA d'Excel a les capacités de faire ce que tu souhaites.
On peut aussi créer une copie temporaire du fichier.
Dans cette copie, on supprime les feuilles qui ne sont des noms de commerciaux
puis on lance la macro qui boucle sur toutes les feuilles pour créer un PDF par feuille.
Cas de figure
Ton classeur contient 5 feuilles dont 3 feuilles commerciaux et une Feuil1 et une Feuil2
On copie le classeur avec toutes les feuilles
Dans cette copie, on supprime par macro Feuil1 et Feuil2
puis on lance la macro postée dans le message N°3.

On peut aussi faire comme ça
Il suffit dans ce cas d'exclure les feuilles dans la boucle
If Not Feuille.Name Like "NomFeuille1Aexclure" Then
 

Yurperqod

XLDnaute Occasionnel
Bonjour le forum

Exemple testé ce matin (avec 6 feuilles)
La macro créé bien seulement trois PDF
( ceux des feuilles avec Prénom NOM)
Exemple.jpg

VB:
Sub Test2()
Dim Chemin As String
Dim Feuille As Worksheet
Chemin = "C:\TEMP\" ' mettre le nom du dossier où enregistrer les PDF
For Each Feuille In Worksheets
'Changer avec les noms rééls des feuilles à eclure
If Feuille.Name <> "A EXCLURE 1" And Feuille.Name <> "A EXCLURE 2" And Feuille.Name <> "A EXCLURE 3" Then
Feuille.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & Feuille.Name & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End If
Next
End Sub
 

troopers87

XLDnaute Occasionnel
Hello Yurperqod et merci pour ta proposition !

Toutes mes excuses pour mon délai de réponse, j'ai eu du mal à me dégager du temps pour tester ce code-ci. Malgré tout, c'est super de pouvoir compter sur une communauté aussi riche et créative pour trouver des solutions :)

Le code me renvoi toujours la même erreur, pour une raison que je ne parviens pas à identifier : Erreur d'exécution '5' : Argument ou appel de procédure incorrect" et il me sélectionne le bloc suivant pour m'indiquer où se trouve l'erreur :
Code:
Feuille.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & Feuille.Name & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

Si tu es lassé de passer du temps sur ce sujet, je le comprendrais aisément. Malgré tout, merci encore pour ton aide !
 

Yurperqod

XLDnaute Occasionnel
Bonjour le forum

troopers87
Quelle est la valeur de Chemin dans ton code VBA ?
Combien de caractères au plus dans les noms des onglets commerciaux?

Tu as testé sur une fichier excel test en refaisant l'exemple en copie d'écran dans le message N°28?
Est-ce que tu as aussi une erreur avec ce fichier de test?
 

Discussions similaires

Statistiques des forums

Discussions
312 332
Messages
2 087 364
Membres
103 528
dernier inscrit
maro