Excel vers Acrobat Distiller
Private Sub PrintPDF() ' original code there : http://www.rdpslides.com/psfaq/FAQ00053.htm ' adaptée par Trirème, MPFE, septembre 2007 ' L'impression dans un fichier via l'imprimante Acrobat Distiller ' génère un fichier PostScript. On nomme ce fichier avec l'extension .ps ' (mais ça n'est pas obligatoire). ' Dans un deuxième temps ce fichier .PS est converti en .PDF ' Éventuellement cette conversion peut se dérouler en tâche de fond ' automatiquement pendant que la macro continue son exécution. ' Nécessite le référencement à Acrobat Distiller ' http://www.adobe.com/devnet/acrobat/pdfs/distiller_api_reference.pdf ' Define the postscript and .pdf file names. Dim PSFileName As String Dim PDFFileName As String Dim FacFileName As String Dim myPDF As PdfDistiller FacFileName = "Y:\FormaData\Factures\" & Left(ThisWorkbook.name, Len(ThisWorkbook.name) - 4) PSFileName = FacFileName & ".ps" ' Nom complet avec Extension ps PDFFileName = FacFileName & ".pdf" ' Nom complet transformé en pdf ParametreName = "Y:\FormaData\Modele\MesReglages.jopboptions" ' Nom complet Set myPDF = New PdfDistiller ' Création d'une instance Distiller ' myPDF.bSpoolJobs = 0 ' option =0 : conversion immédiate puis reprise de la macro ' à utiliser si la macro imprime un seul document. ' option =1 : conversion en tâche de fond dans un spool ' à utiliser si la macro imprime plusieurs documents dans une boucle ' on gagne ainsi 2-3 secondes à chaque fois. ' Cependant, avec l'option .bSpoolJobs = 1 il faut s'assurer que l'impression se termine ' avant de fermer l'instance de distiller par : Set myPDF = Nothing ' au risque que l'impression du dernier document n'ait pas le temps d'aboutir. ' Bien qu'il existe des évènements permettant de connaitre la fin d'exécution du Job, ' le plus simple est de prévoir une petite temporisation comme ci-dessous : ' Debut = Timer ' Do While Timer < Debut + 3 ' 3 secondes ' Loop ' Set myPDF = Nothing ' ' '1._ Capturer l'imprimante par défaut Printerold = Application.ActivePrinter '2._ Le mettre à Adobe PDF sur Ne09: Application.ActivePrinter = "Adobe PDF sur Ne09:" MsgBox "L'imprimante active actuelle devient : " _ & Chr(10) & " ==> " & Application.ActivePrinter ' Print the Excel sheet to the postscript file Debut = Timer Dim MySheet As Worksheet Set MySheet = ActiveSheet ' Création du fichier .PS MySheet.Range("Zone_d_impression").PrintOut copies:=1, preview:=False, _ ActivePrinter:="Acrobat Distiller", printtofile:=True, collate:=True, _ prtofilename:=PSFileName ' Convert the postscript file to .PDF myPDF.FileToPDF PSFileName, PDFFileName, ParametreName ' Syntaxe plus complète, si l'on a défini son fichier d'options ' myPDF.FileToPDF PSFileName, PDFFileName, ParametreName Do While Timer < Debut + 5 ' 5 secondes Loop Set myPDF = Nothing ' voir remarque ci-dessus sur myPDF.bSpoolJobs = 1 '3._ Remettre l'imprimante par défaut Application.ActivePrinter = Printerold End Sub
Auteur : Trirème
Mot clef associé à cette page : pdf
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
