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!
 

Adey

XLDnaute Nouveau
Bonjour Lone-wolf, merci.

Voici l'exemple de fichier que j'utilise, j'ai modifié les montants et enlever les informations sensibles.

Merci pour votre aide
 

Pièces jointes

  • Appel de fonds 3TR2018 - Exemple macro.xlsx
    186.7 KB · Affichages: 43

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.
 

Pièces jointes

  • Appels de fonds 2018.zip
    95.3 KB · Affichages: 97
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?
 

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:

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:

Discussions similaires

Statistiques des forums

Discussions
311 712
Messages
2 081 802
Membres
101 819
dernier inscrit
lukumubarth