Excel vers Acrobat Distiller

Comment imprimer sur l'imprimante acrobat distiller un fichier excel en gardant le même nom ?

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 :

Mot clef associé à cette page :

Nouveau

1 Nouvelle page ajoutée ce mois-ci dont :

Mises à jour

3 pages modifiées ce mois-ci dont :