Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Impression en PDF Via VBA

7 réponses
Avatar
Gregory Hilaire
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

7 réponses

Avatar
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





Avatar
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 ...


http://excelabo.net/excel/sortirimport.php#pdfacrobat


--
--
@+
;o)))


Avatar
Fring
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 ...


http://excelabo.net/excel/sortirimport.php#pdfacrobat


--
--
@+
;o)))






Avatar
Gregory Hilaire
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 ...


http://excelabo.net/excel/sortirimport.php#pdfacrobat


--
--
@+
;o)))






Avatar
Gregory Hilaire
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 ...


http://excelabo.net/excel/sortirimport.php#pdfacrobat


--
--
@+
;o)))










Avatar
Modeste
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)))

Avatar
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