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
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?f=664
http://www.veriti.net/index.php?lng=fr
http://forum.excel-pratique.com/
;)
Fring
"Gregory Hilaire" <ghil...@sympatico.ca> a écrit dans le message de news:
%23Y8Hxdp...@TK2MSFTNGP04.phx.gbl...
>> 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)))
;)
A++++
Fring
"Modeste" <nom...@nomail.net> a écrit dans le message de news:
eCYWNvun...@TK2MSFTNGP04.phx.gbl...
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" <nom...@nomail.net> a écrit dans le message de news:
eCYWNvun...@TK2MSFTNGP04.phx.gbl...
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" <ghil...@sympatico.ca> a écrit dans le message de news:
u3q0DZ6n...@TK2MSFTNGP02.phx.gbl...
> 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)))
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:\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