Microsoft 365 Pagination multi feuilles

Cédric06400

XLDnaute Junior
Bonjour à tous,

Je bloque sur la pagination de mon fichier de travail.

Exposé ;)

J'ai un fichier Excel qui me sert à éditer des rapports.
Ce fichier comporte de nombreuses feuilles.
Mes rapports sont composés de 1 ou plusieurs feuilles.
1700806926946.png

En fonction des missions que l'on me confie le nombre de ces rapports évolue (ce n'est jamais les mêmes rapports que j'édite)
Aujourd'hui j'édite et j'envoie à mes clients un seul fichier PDF composé de x rapport(s).

Pour respecter la pagination individuelle de chaque rapport (feuille ou groupe de feuilles), j'ai crée une automatisation de l'édition des rapports avec le spouleur d'impression (en utilisant (edoc pdf pro) et j'assemble chaque rapport manuellement pour constituer mon seul dossier en PDF.
1700807487949.png

Exemple de pagination individuelle, mon rapport amiante est composé de 2 feuilles et de 7 pages au total
1700807688522.png

Si je sélectionne tous mes rapports en même temps pour la constitution du PDF ma pagination n'est plus correcte.
1700808371380.png


Ma demande :

Ce que j'aimerai faire depuis longtemps est d'automatiser la constitution de mon dossier final sans passer le spouler.

Aujourd'hui je sais créer en vba des PDF individuellement pour chaque rapport.

Mes connaissances limitées en VBA ne permettent pas d'assembler automatiquement chaque rapport en un seul fichier (en respectant la pagination individuelle).

La solution la plus simple serait de supprimer ma pagination individuelle et de sélectionner toutes les feuilles d'un coup pour créer le PDF final.
Cette solution ne convient pas car mes rapport doivent absolument est paginés.
1700808277359.png


Une autre piste que j'ai envisagé mais mes connaissances me limitent encore serait de travailler sur le pied de page (sans faire une usine à gaz).

Merci de votre aide

Cédric
 

Pièces jointes

  • 1700808351714.png
    1700808351714.png
    3.4 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Cedric,
Avez vous jeter un œil dans notre base de données ?
Quelques liens qui pourraient vous intéresser :
 

Eric KERGRESSE

XLDnaute Occasionnel
Bonjour,

Pour faire cela, j'utilise la dll PDFCREATOR_COM (version 2.5 normalement gratuite, sans doute remplacée depuis, cf Pdf architecte ou Pdf forge).

Les fichiers à fusionner sont déversés dans un répertoire et indexés selon l'ordre d'assemblage Modop

Le code utilisé :

VB:
Sub MergePDFViaImpressionPdf()
 
Dim CtrI As Long
Dim oPDF As PdfCreatorObj
Dim Q As PDFCreator_COM.Queue
Dim job As PDFCreator_COM.PrintJob
Dim CheminFichierFusionne As String, NomFichierFusionne As String, RepertoirePdf As String, ChaineATrouver As String
Dim Fso As Object, Fich As Object
 
 
    On Error GoTo Fin
 
    ChaineATrouver = ".pdf"
    CheminFichierFusionne = ActiveWorkbook.Path & "\"  ' A adapter
    NomFichierFusionne = CheminFichierFusionne & "Fusion 01.pdf"
    RepertoirePdf = ActiveWorkbook.Path & "\Répertoire de fusion"
 
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set oPDF = New PdfCreatorObj
 
    With oPDF
         For Each Fich In Fso.getfolder(RepertoirePdf).Files
             If InStr(1, LCase(Fich.Name), ChaineATrouver, vbTextCompare) > 0 Then
                .AddFileToQueue RepertoirePdf & Application.PathSeparator & Fich.Name
             End If
         Next Fich
    End With
 
    Set Q = New PDFCreator_COM.Queue
 
    With Q
         .Initialize
         .WaitForJobs 2, 10
         Debug.Print "q.Count: " & Q.Count
         .MergeAllJobs
    End With
 
    While Q.Count > 0
            Set job = Q.NextJob
            job.SetProfileByGuid ("DefaultGuid")
            job.ConvertTo (NomFichierFusionne) '(OutPath)
    Wend
 
    Q.ReleaseCom
 
    MsgBox "Fin de fusion !", vbInformation
 
    GoTo Fin
 
Fin:
 
    Set Fso = Nothing
    Set job = Nothing
    Set Q = Nothing
    Set oPDF = Nothing
 
End Sub
 

Cédric06400

XLDnaute Junior
Bonjour Cedric,
Avez vous jeter un œil dans notre base de données ?
Quelques liens qui pourraient vous intéresser :
Hello
merci j'ai matière a fouiller

;)
 

Cédric06400

XLDnaute Junior
Bonjour,

Pour faire cela, j'utilise la dll PDFCREATOR_COM (version 2.5 normalement gratuite, sans doute remplacée depuis, cf Pdf architecte ou Pdf forge).

Les fichiers à fusionner sont déversés dans un répertoire et indexés selon l'ordre d'assemblage Modop

Le code utilisé :

VB:
Sub MergePDFViaImpressionPdf()
 
Dim CtrI As Long
Dim oPDF As PdfCreatorObj
Dim Q As PDFCreator_COM.Queue
Dim job As PDFCreator_COM.PrintJob
Dim CheminFichierFusionne As String, NomFichierFusionne As String, RepertoirePdf As String, ChaineATrouver As String
Dim Fso As Object, Fich As Object
 
 
    On Error GoTo Fin
 
    ChaineATrouver = ".pdf"
    CheminFichierFusionne = ActiveWorkbook.Path & "\"  ' A adapter
    NomFichierFusionne = CheminFichierFusionne & "Fusion 01.pdf"
    RepertoirePdf = ActiveWorkbook.Path & "\Répertoire de fusion"
 
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set oPDF = New PdfCreatorObj
 
    With oPDF
         For Each Fich In Fso.getfolder(RepertoirePdf).Files
             If InStr(1, LCase(Fich.Name), ChaineATrouver, vbTextCompare) > 0 Then
                .AddFileToQueue RepertoirePdf & Application.PathSeparator & Fich.Name
             End If
         Next Fich
    End With
 
    Set Q = New PDFCreator_COM.Queue
 
    With Q
         .Initialize
         .WaitForJobs 2, 10
         Debug.Print "q.Count: " & Q.Count
         .MergeAllJobs
    End With
 
    While Q.Count > 0
            Set job = Q.NextJob
            job.SetProfileByGuid ("DefaultGuid")
            job.ConvertTo (NomFichierFusionne) '(OutPath)
    Wend
 
    Q.ReleaseCom
 
    MsgBox "Fin de fusion !", vbInformation
 
    GoTo Fin
 
Fin:
 
    Set Fso = Nothing
    Set job = Nothing
    Set Q = Nothing
    Set oPDF = Nothing
 
End Sub
Hello
Merci je vais étudier votre code
;)
 

Cédric06400

XLDnaute Junior
Hello
Merci je vais étudier votre code
;)
Bonjour,

Pour faire cela, j'utilise la dll PDFCREATOR_COM (version 2.5 normalement gratuite, sans doute remplacée depuis, cf Pdf architecte ou Pdf forge).

Les fichiers à fusionner sont déversés dans un répertoire et indexés selon l'ordre d'assemblage Modop

Le code utilisé :

VB:
Sub MergePDFViaImpressionPdf()
 
Dim CtrI As Long
Dim oPDF As PdfCreatorObj
Dim Q As PDFCreator_COM.Queue
Dim job As PDFCreator_COM.PrintJob
Dim CheminFichierFusionne As String, NomFichierFusionne As String, RepertoirePdf As String, ChaineATrouver As String
Dim Fso As Object, Fich As Object
 
 
    On Error GoTo Fin
 
    ChaineATrouver = ".pdf"
    CheminFichierFusionne = ActiveWorkbook.Path & "\"  ' A adapter
    NomFichierFusionne = CheminFichierFusionne & "Fusion 01.pdf"
    RepertoirePdf = ActiveWorkbook.Path & "\Répertoire de fusion"
 
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set oPDF = New PdfCreatorObj
 
    With oPDF
         For Each Fich In Fso.getfolder(RepertoirePdf).Files
             If InStr(1, LCase(Fich.Name), ChaineATrouver, vbTextCompare) > 0 Then
                .AddFileToQueue RepertoirePdf & Application.PathSeparator & Fich.Name
             End If
         Next Fich
    End With
 
    Set Q = New PDFCreator_COM.Queue
 
    With Q
         .Initialize
         .WaitForJobs 2, 10
         Debug.Print "q.Count: " & Q.Count
         .MergeAllJobs
    End With
 
    While Q.Count > 0
            Set job = Q.NextJob
            job.SetProfileByGuid ("DefaultGuid")
            job.ConvertTo (NomFichierFusionne) '(OutPath)
    Wend
 
    Q.ReleaseCom
 
    MsgBox "Fin de fusion !", vbInformation
 
    GoTo Fin
 
Fin:
 
    Set Fso = Nothing
    Set job = Nothing
    Set Q = Nothing
    Set oPDF = Nothing
 
End Sub
Bonjour,
Malheureusement je suis une brele.
Auriez vous un fichier test ?
J'ai bien activé le ref pdfrcreator
J'ai du mal comprendre ou est mon erreur avec les chemins.
Rien ne se lance ...
ChaineATrouver = ".pdf"
CheminFichierFusionne = "D:\Documents\Testfusion\Répertoire de fusion\"
NomFichierFusionne = CheminFichierFusionne & "Fusion 01.pdf"
RepertoirePdf = "D:\Documents\Testfusion\Répertoire résultat\"

1701863079634.png


1701862868552.png

Merci de votre aide ?
Cédric
 

Cédric06400

XLDnaute Junior
Pouvez-vous me donner les répertoires suivants ?

- Le répertoire où sont stockés les fichiers .pdf à sélectionner.
- Le répertoire où seront triés et renommés les fichiers sélectionnés.
- Le répertoire où sera déversé le fichier fusionné ?
fichiers stockés dans
D:\Documents\Testfusion\
Répertoire de trie
D:\Documents\Testfusion\Répertoire de fusion\"
Répertoire ou sera deversé le fichier fusionné
"D:\Documents\Testfusion\Répertoire résultat\"
J'espere avoir répondu à votre attente

merci
 

Eric KERGRESSE

XLDnaute Occasionnel
Je m'aperçois que je ne vous ai pas donné l'étape précédente, mais en supposant que vous avez mis et ordonné vos fichiers dans le répertoire de tri, essayez ce code :

VB:
Sub MergePDFViaImpressionPdf()

Dim CtrI As Long
Dim oPDF As PdfCreatorObj
Dim Q As PDFCreator_COM.Queue
Dim job As PDFCreator_COM.PrintJob
Dim RepertoirePdfResultat As String, NomFichierFusionne As String, RepertoirePdfTries As String, ChaineATrouver As String
Dim Fso As Object, Fich As Object


    On Error GoTo Fin
    
    ChaineATrouver = ".pdf"
    
   'RepertoirePdfTries = "D:\Documents\Testfusion\Répertoire de fusion\"
    RepertoirePdfResultat = "D:\Documents\Testfusion\Répertoire résultat\"
    NomFichierFusionne = RepertoirePdfResultat & "Fusion 01.pdf"
    
 '   With ActiveWorkbook    ' Pour mes essais
 '        RepertoirePdfTries = .Path & "\Répertoire de fusion\"
 '        RepertoirePdfResultat = .Path & "\Testfusion\Répertoire résultat\"
 '        NomFichierFusionne = RepertoirePdfResultat & "Fusion 01.pdf"
 '   End With
    
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set oPDF = New PdfCreatorObj
    
    With oPDF
         For Each Fich In Fso.getfolder(RepertoirePdfTries).Files
             If InStr(1, LCase(Fich.Name), ChaineATrouver, vbTextCompare) > 0 Then
                .AddFileToQueue RepertoirePdfTries & Fich.Name
             End If
         Next Fich
    End With
    
    Set Q = New PDFCreator_COM.Queue
    
    With Q
         .Initialize
         .WaitForJobs 2, 10
         Debug.Print "q.Count: " & Q.Count
         .MergeAllJobs
    End With
    
    While Q.Count > 0
            Set job = Q.NextJob
            job.SetProfileByGuid ("DefaultGuid")
            job.ConvertTo (NomFichierFusionne) '(OutPath)
    Wend
        
    Q.ReleaseCom
    
    MsgBox "Fin de fusion !", vbInformation
    
    GoTo Fin

Fin:

    Set Fso = Nothing
    Set job = Nothing
    Set Q = Nothing
    Set oPDF = Nothing
    
End Sub
 

Cédric06400

XLDnaute Junior
Je m'aperçois que je ne vous ai pas donné l'étape précédente, mais en supposant que vous avez mis et ordonné vos fichiers dans le répertoire de tri, essayez ce code :

VB:
Sub MergePDFViaImpressionPdf()

Dim CtrI As Long
Dim oPDF As PdfCreatorObj
Dim Q As PDFCreator_COM.Queue
Dim job As PDFCreator_COM.PrintJob
Dim RepertoirePdfResultat As String, NomFichierFusionne As String, RepertoirePdfTries As String, ChaineATrouver As String
Dim Fso As Object, Fich As Object


    On Error GoTo Fin
   
    ChaineATrouver = ".pdf"
   
   'RepertoirePdfTries = "D:\Documents\Testfusion\Répertoire de fusion\"
    RepertoirePdfResultat = "D:\Documents\Testfusion\Répertoire résultat\"
    NomFichierFusionne = RepertoirePdfResultat & "Fusion 01.pdf"
   
 '   With ActiveWorkbook    ' Pour mes essais
 '        RepertoirePdfTries = .Path & "\Répertoire de fusion\"
 '        RepertoirePdfResultat = .Path & "\Testfusion\Répertoire résultat\"
 '        NomFichierFusionne = RepertoirePdfResultat & "Fusion 01.pdf"
 '   End With
   
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set oPDF = New PdfCreatorObj
   
    With oPDF
         For Each Fich In Fso.getfolder(RepertoirePdfTries).Files
             If InStr(1, LCase(Fich.Name), ChaineATrouver, vbTextCompare) > 0 Then
                .AddFileToQueue RepertoirePdfTries & Fich.Name
             End If
         Next Fich
    End With
   
    Set Q = New PDFCreator_COM.Queue
   
    With Q
         .Initialize
         .WaitForJobs 2, 10
         Debug.Print "q.Count: " & Q.Count
         .MergeAllJobs
    End With
   
    While Q.Count > 0
            Set job = Q.NextJob
            job.SetProfileByGuid ("DefaultGuid")
            job.ConvertTo (NomFichierFusionne) '(OutPath)
    Wend
       
    Q.ReleaseCom
   
    MsgBox "Fin de fusion !", vbInformation
   
    GoTo Fin

Fin:

    Set Fso = Nothing
    Set job = Nothing
    Set Q = Nothing
    Set oPDF = Nothing
   
End Sub
Merci encore de votre aide précieuse
Cependant cela ne fonctionne pas
Quand vous supposez que j'ai mis et ordonné les fichiers à fusionner moi j'ai créée 2 fichiers PDF nommés "Séjour" et l'autre "salle à manger" dans le dossier de fusion, ai-je bon ?

J'ai chercher à trouver ensuite ou le code s'arrête (je n'ai pas de débodage) car il ne se passe rien quand je lance le macro, et il semble que le code s'arrête là (pour ce faire j'ai tester le macro avec un message box que j'ai déplacé au fur et à mesure des tests)
1701874152730.png
 

Cédric06400

XLDnaute Junior
Je m'aperçois que je ne vous ai pas donné l'étape précédente, mais en supposant que vous avez mis et ordonné vos fichiers dans le répertoire de tri, essayez ce code :

VB:
Sub MergePDFViaImpressionPdf()

Dim CtrI As Long
Dim oPDF As PdfCreatorObj
Dim Q As PDFCreator_COM.Queue
Dim job As PDFCreator_COM.PrintJob
Dim RepertoirePdfResultat As String, NomFichierFusionne As String, RepertoirePdfTries As String, ChaineATrouver As String
Dim Fso As Object, Fich As Object


    On Error GoTo Fin
   
    ChaineATrouver = ".pdf"
   
   'RepertoirePdfTries = "D:\Documents\Testfusion\Répertoire de fusion\"
    RepertoirePdfResultat = "D:\Documents\Testfusion\Répertoire résultat\"
    NomFichierFusionne = RepertoirePdfResultat & "Fusion 01.pdf"
   
 '   With ActiveWorkbook    ' Pour mes essais
 '        RepertoirePdfTries = .Path & "\Répertoire de fusion\"
 '        RepertoirePdfResultat = .Path & "\Testfusion\Répertoire résultat\"
 '        NomFichierFusionne = RepertoirePdfResultat & "Fusion 01.pdf"
 '   End With
   
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set oPDF = New PdfCreatorObj
   
    With oPDF
         For Each Fich In Fso.getfolder(RepertoirePdfTries).Files
             If InStr(1, LCase(Fich.Name), ChaineATrouver, vbTextCompare) > 0 Then
                .AddFileToQueue RepertoirePdfTries & Fich.Name
             End If
         Next Fich
    End With
   
    Set Q = New PDFCreator_COM.Queue
   
    With Q
         .Initialize
         .WaitForJobs 2, 10
         Debug.Print "q.Count: " & Q.Count
         .MergeAllJobs
    End With
   
    While Q.Count > 0
            Set job = Q.NextJob
            job.SetProfileByGuid ("DefaultGuid")
            job.ConvertTo (NomFichierFusionne) '(OutPath)
    Wend
       
    Q.ReleaseCom
   
    MsgBox "Fin de fusion !", vbInformation
   
    GoTo Fin

Fin:

    Set Fso = Nothing
    Set job = Nothing
    Set Q = Nothing
    Set oPDF = Nothing
   
End Sub
Peut-être un problème avec pdf créator ?
Ai-je autre chose à faire qu'activer cette référence ?
1701874859747.png
 

Cédric06400

XLDnaute Junior
Regardez les propriétés dans PDFCreator.com. Modifiez peut-être le temps d'attente dans WaitForJobs.

Pour cela :
Affichez l'explorateur d'objets en 1, sélectionnez Pdfcreaotor puis Queue.
Regardez tout en bas pour voir les paramètres.
4 pour fermer la fenêtre.
Regarde la pièce jointe 1185559
Bonjour,
Désolé je n'ai pas répondu rapidement, juste apres nos échanges j'ai eu un accident de moto, bras droit cassé.
Du coup, je vais me remettre dessus pendant les vacances.
Pour répondre à votre question :
1703229742825.png



Autre chose j'ai remarqué plus tard lors de la création d'un autre pdf avec pdfcreator que les fichiers étaient en attente.
Ce qui explique peut-etre pourquoi le macro s'arrête. Il faut noté également que je suis obligé de redémarrer l'ordi pour de nouveau pouvoir accéder à PDF creator


Capture.JPG
 

Discussions similaires

Statistiques des forums

Discussions
314 708
Messages
2 112 090
Membres
111 416
dernier inscrit
philipperoy83