Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 )
le hic se sont les messages à répondre. Il faudrait que cela se fasse sans
avoir
à répondre à des questions ...
J'ai essayé ceci mais cela ne fonctionne pas
Sub PrintPDF()
Application.SendKeys "{enter}"
Application.ActivePrinter = "Adobe PDF sur Ne09:"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,""Adobe PDF sur
Ne09:"",,TRUE,,FALSE)"
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fring
Bonjour !
Il suffit de faire une recherche avec le mot "PDF" sur les sites suivants : http://www.excel-downloads.com/forum/ http://www.developpez.net/forums/forumdisplay.php?ff4 http://www.veriti.net/index.php?lng=fr http://forum.excel-pratique.com/
;)
Fring
"Gregory Hilaire" a écrit dans le message de news: %
Bien le bonjour le groupe!
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela se fasse sans avoir à répondre à des questions ...
J'ai essayé ceci mais cela ne fonctionne pas
Sub PrintPDF() Application.SendKeys "{enter}" Application.ActivePrinter = "Adobe PDF sur Ne09:" ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,""Adobe PDF sur Ne09:"",,TRUE,,FALSE)" End Sub
Toute idée serait la bienvenue!
Merci et bonne journée! Greg
Bonjour !
Il suffit de faire une recherche avec le mot "PDF" sur les sites suivants :
http://www.excel-downloads.com/forum/
http://www.developpez.net/forums/forumdisplay.php?ff4
http://www.veriti.net/index.php?lng=fr
http://forum.excel-pratique.com/
;)
Fring
"Gregory Hilaire" <ghilaire@sympatico.ca> a écrit dans le message de news:
%23Y8HxdpnIHA.5084@TK2MSFTNGP04.phx.gbl...
Bien le bonjour le groupe!
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou
2003 )
le hic se sont les messages à répondre. Il faudrait que cela se fasse
sans avoir
à répondre à des questions ...
J'ai essayé ceci mais cela ne fonctionne pas
Sub PrintPDF()
Application.SendKeys "{enter}"
Application.ActivePrinter = "Adobe PDF sur Ne09:"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,""Adobe PDF sur
Ne09:"",,TRUE,,FALSE)"
End Sub
Il suffit de faire une recherche avec le mot "PDF" sur les sites suivants : http://www.excel-downloads.com/forum/ http://www.developpez.net/forums/forumdisplay.php?ff4 http://www.veriti.net/index.php?lng=fr http://forum.excel-pratique.com/
;)
Fring
"Gregory Hilaire" a écrit dans le message de news: %
Bien le bonjour le groupe!
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela se fasse sans avoir à répondre à des questions ...
J'ai essayé ceci mais cela ne fonctionne pas
Sub PrintPDF() Application.SendKeys "{enter}" Application.ActivePrinter = "Adobe PDF sur Ne09:" ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,""Adobe PDF sur Ne09:"",,TRUE,,FALSE)" End Sub
Toute idée serait la bienvenue!
Merci et bonne journée! Greg
Modeste
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir à répondre à des questions ...
Mais surtout ici : http://www.excel-downloads.com/forum/ http://www.developpez.net/forums/forumdisplay.php?ff4 http://www.veriti.net/index.php?lng=fr http://forum.excel-pratique.com/
;)
A++++
Fring
"Modeste" a écrit dans le message de news:
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir à répondre à des questions ...
Mais surtout ici :
http://www.excel-downloads.com/forum/
http://www.developpez.net/forums/forumdisplay.php?ff4
http://www.veriti.net/index.php?lng=fr
http://forum.excel-pratique.com/
;)
A++++
Fring
"Modeste" <nomail@nomail.net> a écrit dans le message de news:
eCYWNvunIHA.4712@TK2MSFTNGP04.phx.gbl...
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou
2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir
à répondre à des questions ...
Mais surtout ici : http://www.excel-downloads.com/forum/ http://www.developpez.net/forums/forumdisplay.php?ff4 http://www.veriti.net/index.php?lng=fr http://forum.excel-pratique.com/
;)
A++++
Fring
"Modeste" a écrit dans le message de news:
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir à répondre à des questions ...
Un grand merci à Modeste et à Fring pour vos réponses rapides et précises. J'ai exactement ce que je voulais cela fonctionne cependant au moment de la conversion de ps à pdf aléatoirement j'ai le message d'erreur suivant : %%[ Error: undefined; OffendingCommand: $PJL ]%%
Quelqu'un saurait-il d'où cela vient et pourquoi cette erreur ? Je cherche j'essaye plusieurs scénarii mais je ne trouve pas encore pourquoi.
Merci encore de votre aide.
Greg
"Modeste" a écrit dans le message de news:
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir à répondre à des questions ...
Un grand merci à Modeste et à Fring pour vos réponses rapides et précises.
J'ai exactement ce que je voulais cela fonctionne cependant au moment de la
conversion de ps à pdf aléatoirement j'ai le message d'erreur suivant :
%%[ Error: undefined; OffendingCommand: $PJL ]%%
Quelqu'un saurait-il d'où cela vient et pourquoi cette erreur ? Je cherche
j'essaye plusieurs scénarii mais je ne trouve pas encore pourquoi.
Merci encore de votre aide.
Greg
"Modeste" <nomail@nomail.net> a écrit dans le message de news:
eCYWNvunIHA.4712@TK2MSFTNGP04.phx.gbl...
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou
2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir
à répondre à des questions ...
Un grand merci à Modeste et à Fring pour vos réponses rapides et précises. J'ai exactement ce que je voulais cela fonctionne cependant au moment de la conversion de ps à pdf aléatoirement j'ai le message d'erreur suivant : %%[ Error: undefined; OffendingCommand: $PJL ]%%
Quelqu'un saurait-il d'où cela vient et pourquoi cette erreur ? Je cherche j'essaye plusieurs scénarii mais je ne trouve pas encore pourquoi.
Merci encore de votre aide.
Greg
"Modeste" a écrit dans le message de news:
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir à répondre à des questions ...
Je crois avoir identifié le problème pour une raison inconnue de moi des fois il génère un fichier pour HP d'autre fois un fichier pour Distiller. Mais si l'imprimante par défaut est Adobe PDF cela marche à tous les coups.
Je me demande s'il serait possible de définir l'imprimante par défaut le temps de l'exécution du programme et de le remettre comme c'était avant :) en après l'impression ( via VBA?)
Merci encore Bonne Journée!
"Gregory Hilaire" a écrit dans le message de news:
Un grand merci à Modeste et à Fring pour vos réponses rapides et précises. J'ai exactement ce que je voulais cela fonctionne cependant au moment de la conversion de ps à pdf aléatoirement j'ai le message d'erreur suivant : %%[ Error: undefined; OffendingCommand: $PJL ]%%
Quelqu'un saurait-il d'où cela vient et pourquoi cette erreur ? Je cherche j'essaye plusieurs scénarii mais je ne trouve pas encore pourquoi.
Merci encore de votre aide.
Greg
"Modeste" a écrit dans le message de news:
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir à répondre à des questions ...
Je crois avoir identifié le problème pour une raison inconnue de moi des
fois il génère un fichier pour HP
d'autre fois un fichier pour Distiller. Mais si l'imprimante par défaut est
Adobe PDF cela marche à tous les coups.
Je me demande s'il serait possible de définir l'imprimante par défaut le
temps de l'exécution du programme et de
le remettre comme c'était avant :) en après l'impression ( via VBA?)
Merci encore
Bonne Journée!
"Gregory Hilaire" <ghilaire@sympatico.ca> a écrit dans le message de news:
u3q0DZ6nIHA.1240@TK2MSFTNGP02.phx.gbl...
Un grand merci à Modeste et à Fring pour vos réponses rapides et précises.
J'ai exactement ce que je voulais cela fonctionne cependant au moment de
la conversion de ps à pdf aléatoirement j'ai le message d'erreur suivant :
%%[ Error: undefined; OffendingCommand: $PJL ]%%
Quelqu'un saurait-il d'où cela vient et pourquoi cette erreur ? Je cherche
j'essaye plusieurs scénarii mais je ne trouve pas encore pourquoi.
Merci encore de votre aide.
Greg
"Modeste" <nomail@nomail.net> a écrit dans le message de news:
eCYWNvunIHA.4712@TK2MSFTNGP04.phx.gbl...
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou
2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir
à répondre à des questions ...
Je crois avoir identifié le problème pour une raison inconnue de moi des fois il génère un fichier pour HP d'autre fois un fichier pour Distiller. Mais si l'imprimante par défaut est Adobe PDF cela marche à tous les coups.
Je me demande s'il serait possible de définir l'imprimante par défaut le temps de l'exécution du programme et de le remettre comme c'était avant :) en après l'impression ( via VBA?)
Merci encore Bonne Journée!
"Gregory Hilaire" a écrit dans le message de news:
Un grand merci à Modeste et à Fring pour vos réponses rapides et précises. J'ai exactement ce que je voulais cela fonctionne cependant au moment de la conversion de ps à pdf aléatoirement j'ai le message d'erreur suivant : %%[ Error: undefined; OffendingCommand: $PJL ]%%
Quelqu'un saurait-il d'où cela vient et pourquoi cette erreur ? Je cherche j'essaye plusieurs scénarii mais je ne trouve pas encore pourquoi.
Merci encore de votre aide.
Greg
"Modeste" a écrit dans le message de news:
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je voudrais générer un fichier PDF d'un classeur Excel ( Ver 2007 ou 2003 ) le hic se sont les messages à répondre. Il faudrait que cela
se fasse sans avoir à répondre à des questions ...
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je me demande s'il serait possible de définir l'imprimante par défaut le temps de l'exécution du programme et de le remettre comme c'était avant :) en après l'impression ( via VBA?)
procédure à adapter :
Sub Change_printer() printerold = Application.ActivePrinter MsgBox "L'imprimante active actuelle est : " _ & " >>>>> " & printerold
dlganswer = Application.Dialogs(xlDialogPrinterSetup).Show If dlganswer = True Then reponse = MsgBox("L'imprimante active était : " _ & Chr(10) & " ====> " & printerold _ & Chr(10) & " elle sera maintenant : " _ & Chr(10) & " ====> " & Application.ActivePrinter _ & Chr(10) & "Voulez vous confirmer ?", _ vbQuestion + vbYesNo, _ "Changement d'imprimante") If reponse = vbYes Then MsgBox "L'imprimante active actuelle devient : " _ & Chr(10) & " ====> " & Application.ActivePrinter Exit Sub End If Else Application.ActivePrinter = printerold MsgBox "L'imprimante active reste : " _ & Chr(10) & " ====> " & printerold End If End Sub -- -- @+ ;o)))
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je me demande s'il serait possible de définir l'imprimante par défaut
le temps de l'exécution du programme et de
le remettre comme c'était avant :) en après l'impression ( via VBA?)
procédure à adapter :
Sub Change_printer()
printerold = Application.ActivePrinter
MsgBox "L'imprimante active actuelle est : " _
& " >>>>> " & printerold
dlganswer = Application.Dialogs(xlDialogPrinterSetup).Show
If dlganswer = True Then
reponse = MsgBox("L'imprimante active était : " _
& Chr(10) & " ====> " & printerold _
& Chr(10) & " elle sera maintenant : " _
& Chr(10) & " ====> " & Application.ActivePrinter _
& Chr(10) & "Voulez vous confirmer ?", _
vbQuestion + vbYesNo, _
"Changement d'imprimante")
If reponse = vbYes Then
MsgBox "L'imprimante active actuelle devient : " _
& Chr(10) & " ====> " & Application.ActivePrinter
Exit Sub
End If
Else
Application.ActivePrinter = printerold
MsgBox "L'imprimante active reste : " _
& Chr(10) & " ====> " & printerold
End If
End Sub
--
--
@+
;o)))
Bonsour® Gregory Hilaire avec ferveur ;o))) vous nous disiez :
Je me demande s'il serait possible de définir l'imprimante par défaut le temps de l'exécution du programme et de le remettre comme c'était avant :) en après l'impression ( via VBA?)
procédure à adapter :
Sub Change_printer() printerold = Application.ActivePrinter MsgBox "L'imprimante active actuelle est : " _ & " >>>>> " & printerold
dlganswer = Application.Dialogs(xlDialogPrinterSetup).Show If dlganswer = True Then reponse = MsgBox("L'imprimante active était : " _ & Chr(10) & " ====> " & printerold _ & Chr(10) & " elle sera maintenant : " _ & Chr(10) & " ====> " & Application.ActivePrinter _ & Chr(10) & "Voulez vous confirmer ?", _ vbQuestion + vbYesNo, _ "Changement d'imprimante") If reponse = vbYes Then MsgBox "L'imprimante active actuelle devient : " _ & Chr(10) & " ====> " & Application.ActivePrinter Exit Sub End If Else Application.ActivePrinter = printerold MsgBox "L'imprimante active reste : " _ & Chr(10) & " ====> " & printerold End If End Sub -- -- @+ ;o)))
Gregory Hilaire
Nickel ! Nickel! Nickel!
Je n'ai rien d'autre à ajouter. "Modeste you make my day!" :) J'ai effectivement réduit le code à sa plus simple expression
Printerold = Application.ActivePrinter Application.ActivePrinter = "Adobe PDF sur Ne09:"
Avant le traitement et
Application.ActivePrinter = Printerold
Après le traitement.
======================================================== Donc pour ceux que la question pourrait interesser le code entier devient (Je l'ai un petit peu bidoullé pour qu'il utilise le m6eme nom de fichier que le fichier Excel et que cela se fasse sans arrêt. Car ceci est l'impression d'une facture Excel à partir d'Access ...) ENCORE MERCI A MODESTE ET FRING pour l'aide.
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:FormaDataFactures" & 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:FormaDataModeleMesReglages.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:úlse, _ 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
Nickel ! Nickel! Nickel!
Je n'ai rien d'autre à ajouter. "Modeste you make my day!"
:) J'ai effectivement réduit le code à sa plus simple expression
Printerold = Application.ActivePrinter
Application.ActivePrinter = "Adobe PDF sur Ne09:"
Avant le traitement
et
Application.ActivePrinter = Printerold
Après le traitement.
======================================================== Donc pour ceux que la question pourrait interesser le code entier devient
(Je l'ai un petit peu bidoullé pour qu'il utilise le m6eme nom de fichier
que le
fichier Excel et que cela se fasse sans arrêt. Car ceci est l'impression
d'une facture
Excel à partir d'Access ...) ENCORE MERCI A MODESTE ET FRING pour l'aide.
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:FormaDataFactures" & 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:FormaDataModeleMesReglages.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:úlse, _
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
Je n'ai rien d'autre à ajouter. "Modeste you make my day!" :) J'ai effectivement réduit le code à sa plus simple expression
Printerold = Application.ActivePrinter Application.ActivePrinter = "Adobe PDF sur Ne09:"
Avant le traitement et
Application.ActivePrinter = Printerold
Après le traitement.
======================================================== Donc pour ceux que la question pourrait interesser le code entier devient (Je l'ai un petit peu bidoullé pour qu'il utilise le m6eme nom de fichier que le fichier Excel et que cela se fasse sans arrêt. Car ceci est l'impression d'une facture Excel à partir d'Access ...) ENCORE MERCI A MODESTE ET FRING pour l'aide.
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:FormaDataFactures" & 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:FormaDataModeleMesReglages.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:úlse, _ 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