XL 2013 Macro enregistrer les onglets en .pdf avec nom des onglets + suffixe dans un dossier choisi

Adey

XLDnaute Nouveau
Bonjour la communauté,

J'ai utilisé la recherche mais je n'ai pas trouvé exactement ce que je voulais et je ne sais pas du tout comment faire la macro moi-même.

J'ai un fichier excel avec plusieurs onglets.
Ma base de données se trouve sur un onglet et me sert à calculer des appels de fonds que j'envoie ensuite aux entreprises. Les onglets qui suivent correspondent à des ND (factures) qui sont personnalisées pour chacune des entreprises.

J'aimerais pouvoir enregistrer un fichier .pdf sur une seule page (important que ça tienne sur une seule page) pour chacun des onglets, reprenant le nom de l'onglet et pouvant y ajouter le trimestre auquel il correspond.

Ex : "Nom de l'onglet"+"Appel de fonds IRUS 3TR2018" (Un espace entre le Nom de l'onglet et le texte que je veux ajouter à la fin)

Pensez-vous pouvoir m'aider sur le sujet?

De plus, y aurait-il la possibilité d'ajouter un bouton pour lancer la macro ou tout simplement m'indiquer la procédure à suivre pour l’exécuter.

Merci beaucoup pour votre retour!

NB : Si quelqu'un peut me donner la solution aujourd'hui c'est top, sinon je ferai tout à la main et prendrai votre message en compte pour le prochain trimestre.

Bonne journée!
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir Adey et bienvenue sur XLD :)

@Adey: sans voir la structure d'au moins une feuille et sans données confidentielles, ce n'est pas possible. Pour cela, crée un nouveau classeur, éfface les données sensibles et met le en pièce jointe.
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Adey

La feuille Recap n'a pas été inclue, et vu que le classeur s'appelle aussi "Appel de fonds IRUS 3TR2018", j'ai fais comme ceci

Nom du fichier Pdf = nom de l'onglet & " " & nom du classeur.

Fait un double-clique sur la feuille Recap pour lancer la macro. Attend que le message s'affiche et clique sur OK. La macro est dans un module standard. Va dans le projet VBA , clic-droit sur le Module > Exporter un fichier et enregistre-le sur le bureau. Ensuite copie le code ci-dessous et colle-le dans le module de la feuille Recap. Pour ce, clic-droit sur la feuille > Visualiser le code.

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Call Save_Pdf
End Sub
Laisse le dossier tel quel, sinon il faudra modifier le chemin dans la macro.
 

Fichiers joints

Dernière édition:

Adey

XLDnaute Nouveau
Merci beaucoup Lone-wolf,

Je viens de l'adapter sur mon fichier source et ça marche très bien!
C'est ce que je voulais, tu as parfaitement répondu à ma demande, encore merci.

Une petite question subsiste sur les onglets que je ne voudrais pas sauvegarder en PDF, au niveau du code suivant :

For x = 2 To 92

Ai-je la possibilité de dire que je voudrais de 1 à 5 et 8 à 22 et 13 à 45 etc...
Si oui, comment le traduire?
 

Adey

XLDnaute Nouveau
Ok dans ce cas je vais tout simplement supprimer les fichiers PDF en trop ou déplacer les onglets que je ne veux pas afin qu'ils soient en dehors du champ d'application.

Merci
 

Lone-wolf

XLDnaute Barbatruc
Re

@Adey

Ne change pas la disposition des onglets, tu risque de faire bloquer le fichier. Sinon une autre façon de s'y prendre; dans une feuille vierge il faut lister les feuilles que tu veux imprimer, mais en as-tu envie si il y en a une 30aine ou plus (vu que j'en vois déjà 94)? :rolleyes:
 

Lone-wolf

XLDnaute Barbatruc
Re

Voici la macro adaptée d'après mon dernier message(feuille à lister pour commencer), à copier dans le module.
"Liste Feuilles" est le nom de l'onglet.

liste.gif

VB:
Option Explicit

Sub Save_Pdf()
Dim ws As Worksheet, nom$, chemin$
Dim derL&, i&, temp$, t

    Application.ScreenUpdating = False

    derL = Sheets("Liste Feuilles").Cells(Rows.Count, 1).End(xlUp).Row
    temp = Split(ThisWorkbook.Name, ".xlsm")(0)

    For i = 2 To derL
        nom = Sheets("Liste Feuilles").Cells(i, 1).Value
        For Each ws In Worksheets
            If ws.Name = nom Then
                ws.Activate
                chemin = ThisWorkbook.Path & "\PDF\"
                ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nom & " " & temp & ".pdf", _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                From:=1, To:=1, OpenAfterPublish:=False
            End If
        Next ws
            t = Timer + 0.5: Do Until Timer > t: DoEvents: Loop
    Next i
            Sheets("Recap CL").Activate
End Sub
 
Dernière édition:

Adey

XLDnaute Nouveau
Bonjour Lone-wolf,

merci à toi encore pour ce service, tu m'avais déjà été d'une grande aide, c'est tout à ton honneur :)

Dois-je ajouter ce code ou remplacer l'ancien par celui-ci?
J'ai préparé mon nouvel onglet "Liste Feuilles" qui reprend le nom de mes 71 onglets à enregistrer en PDF.
Cet onglet doit-il être placé à une place en particulier? Début? Fin?

En attendant ta réponse, je vais faire le test.

Merci :)

Edit: C'est parfait ça fonctionne très bien, au top!
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonjour Adey, le Forum :)

@Adey: tu supprime l'autre macro et tu la remplace celle-ci. Dans la liste, met seulement le nom des feuilles que tu veux enregistrer en PDF. Leurs positions n'a aucune importance.
 

steeve844

XLDnaute Nouveau
Bonjour Adey,

J ai testé ta macro, mais j ai toujours un bug à ce niveau :

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nom & " " & temp & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False

J ai suivi pas à pas ton explication mais je ne comprends pas. Un probleme de version d Excel ?


A te lire
 

Staple1600

XLDnaute Barbatruc
Bonjour

La coutume/habitude c'est de créer sa propre discussion pour poser sa question plutôt que de déterrer un fil initié l'année dernière. ;)

Donc tu auras peut-être plus de réponses en créant ta propre discussion.

Sinon si j'étais moi, eh bien, j'écrirai cette petite macro et je la testerai pour me dépanner
VB:
Sub MontreMoiLeChemin()
Dim chemin$
chemin = ThisWorkbook.Path & "\PDF\"
MsgBox "Est-ce que ce dossier existe: " & chemin & " ?" & Chr(13) _
& "La réponse est: " & vbTab & IIf(FolderExists(chemin), "OUI", "NON")
End Sub
Private Function FolderExists(strFolderPath As String) As Boolean
    On Error Resume Next
    FolderExists = ((GetAttr(strFolderPath) And vbDirectory) = vbDirectory)
    On Error GoTo 0
End Function
Mais cela, c'est si j'étais moi (ce que je suis rarement les week-end pluvieux) ;)
 
Dernière édition:

steeve844

XLDnaute Nouveau
Bonjour stable

Super . Merci pour ta reponse je vais tester ca lundi du coup.

Week end pluvieux week end heureux...
 

steeve844

XLDnaute Nouveau
Re

steeve844
Aie! Problème de lunette
Moi c'est Staple et non pas Stable ;)
Désolé staple. Il y avait de le buée sur mes lunettes avec cette pluie..
Bonjour Staple,

J ai crée le dossier et en effet tout va mieux... Merci

Une dernière question. Les fichiers PDF ne sortent qu une page et pas la totalité du tableau excel initial.
Comment modifier la macro pour une meilleure mise en page?
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil,

Utilises l'enregistreur de macros en testant différents paramétrage lors de l'export en PDF
Voir deux exemples tout droit sorti du four ;)
VB:
Sub Macro1()
    ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, Filename:="C:\Users\STAPLE\Documents\Classeur1.pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=False, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False
End Sub
Sub Macro2()
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users\STAPLE\Documents\Classeur2.pdf", Quality:=xlQualityMinimum, _
    IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub
Je remets ce petit conseil que tu sembles avoir zappé ;)
La coutume/habitude c'est de créer sa propre discussion pour poser sa question plutôt que de déterrer un fil initié l'année dernière. ;)
 

Haut Bas