creer un pdf unique à partir de l'impression d'onglets de classeurs differents

mister red

XLDnaute Nouveau
Bonjour, grâce à l'aide du forum et de vous autres (et mille merci) , j'ai créé une fonction qui permet de générer un pdf par onglet avec pdfcreator.

Ensuite je fusionne les pdfs provenant de différents classeurs pour construire un pdf unique en utilisant un outil externe qui permet de fusionner des pdfs. J et je souhaite pouvoir complètement automatiser la création du pdf fusionné

Y-a-t-il moyen, à votre connaissance, de générer le pdf fusionné directement à partir d'excel et en une seule fois , sachant que tous les classeurs dont j'ai besoin sont ouverts ?

Ci-dessous le code utilisé pour la génération 1 onglet -> 1 pdf. Juste pour comprendre les paramètres de la fonction, il s'agit de créer un rapport de performance de projets informatiques à partir d'onglets provenant de plusieurs excels. J'ai besoin du nom du projet mesuré, du nom de l'onglet à imprimer, et du nom de pdf généré.

Super merci pour votre aide.

Sub GenererUnPDF(UnNomProjet As Range, Nomfichier As String, Onglet As String)
' sous VBA Menu Outils | Références Cocher PDFCreator


Dim jobPDF As Object
Dim sNomPDF As String
Dim sCheminPDF As String

On Error GoTo MyEnd

Sheets(Onglet).Activate

sNomPDF = Nomfichier & " " & UnNomProjet.Value & ".pdf"
sCheminPDF = ActiveWorkbook.Path & Application.PathSeparator & "PDF" & Application.PathSeparator

If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub

Set jobPDF = CreateObject("PDFCreator.clsPDFCreator")

With jobPDF
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Initialisation de PDFCreator impossible", vbCritical + vbOKOnly, "PDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sCheminPDF
.cOption("AutosaveFilename") = sNomPDF

'0=PDF, 1=Png, 2=jpg, 3=bmp, 4=pcx, 5=tif, 6=ps, 7=eps, 8=txt
.cOption("AutosaveFormat") = 0
.cClearCache
End With

ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"

'Fichier dans la file d'attente
Do Until jobPDF.cCountOfPrintjobs = 1
DoEvents
Loop
jobPDF.cPrinterStop = False

'Attendre que la file d'attente soit vide
Do Until jobPDF.cCountOfPrintjobs = 0
DoEvents
Loop
jobPDF.cClose
Set jobPDF = Nothing
Exit Sub
MyEnd:
MsgBox "Problème lors de la génération de PDF"

End Sub
 

Jam

XLDnaute Accro
Re : creer un pdf unique à partir de l'impression d'onglets de classeurs differents

Salut,

Comme ça je ne crois pas que ce soit possible. Une seule solution à mon sens, copier tous les onglets dont tu as besoin dans un classeur unique, puis sélectionner tous les onglets et lancer l'impression. Dans ce cas là XL (?) ou le drivers d'impression ne considère qu'une seule impression donc un pdf concaténé.

Bon courage
 

mister red

XLDnaute Nouveau
Re : creer un pdf unique à partir de l'impression d'onglets de classeurs differents

Salut Jam. Merci pour ta réponse. J'en suis arrivé à cette conclusion aussi mais comme je créée déjà une palanquée de classeurs et d'onglets, je voulais éviter cela. Mais je vais m'y résoudre quand même. Encore merci.
 

ODVJ

XLDnaute Impliqué
Re : creer un pdf unique à partir de l'impression d'onglets de classeurs differents

Bonsoir,

tu devrais pouvoir faire un SHELL() de ton programme externe de fusion avec les paramètres kivonbien (les noms de fichiers issus de ta routine principalement et le fichier résultat espéré).
Si ton programme de fusion fonctionne sous DOS, tu peux aussi créer un fichier .bat et lancer le .bat.

exemple : Shell ("c:\pdftk c:\in1.pdf c:\in2.pdf cat output d:\out1.pdf")

cordialement
 

mister red

XLDnaute Nouveau
Re : creer un pdf unique à partir de l'impression d'onglets de classeurs differents

Encore merci. Ci dessous la procédure qui fait le boulot. Il suffit d'ajouter autant de fichiers à fusionner qu'on le veut à la fin des paramètres de la procédure.

Exemple d'appel :

Call GenererCommandeFusion(Range("RepertoireLogicielFusion").Value, "pdftk.exe", CheminPDF, "", "Rapport de Performance du Projet" & SuffixeNomPDF, _
Fich0, Fich1, Fich2, Fich6, Fich7, Fich9, Fich10)

Procedure :

Private Sub GenererCommandeFusion(CheminLogiciel, ExeLogiciel, CheminFichiers, SuffixeFichier, NomFichierSortie, ParamArray ListeFichiersEntree1())

commande = CheminLogiciel & Application.PathSeparator & ExeLogiciel & " "
For i = LBound(ListeFichiersEntree1) To UBound(ListeFichiersEntree1)
commande = commande & """" & CheminFichiers & Application.PathSeparator & ListeFichiersEntree1(i) & SuffixeFichier & """" & " "
Next i
commande = commande & "cat output " & """" & CheminFichiers & Application.PathSeparator & NomFichierSortie & SuffixeNomPDF & """"
Debug.Print commande
lPid = Shell(commande, vbNormalFocus)
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG