Impression avec PDFcreator
Bonjour à tous,
j'ai créé un programme pour mon entreprise afin de créer des bons de livraison sous excel.
J'ai, dans ce programme, créé une macro pour imprimer avec pdf creator.
cette macro marchait très bien jusqu'à la dernière mise à jour de pdf creator.
Je ne trouve plus la référence PDF creator dans visual basic editor.
pour info je travail sur microsoft office 2010
et la nouvelle version de pdf creator est 2.0 avant celle là j'avais la 1.7
et donc j'ai un messge d'erreur : erreur d'execution 429
Un composant ActiveXne peut pas créer d'objet.
comment puis je faire?
voici mon code vba:
Public Sub Test1()
Dim pdfjob
Dim NomExcel, NomPdf, DefaultPrinter
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
Dim Chemin As String, Fich As String, rep
Chemin = Workbooks(ActiveWorkbook.Name).Path & "\historique"
Fich = Range("B21").Value & ".pdf"
rep = Dir(Chemin & "\" & Fich)
If rep = "" Then
MsgBox "le fichier n'existe pas création du fichier PDFCreator"
Impression:
With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Impossible d'initialiser PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutisaveDirectory") = 1
.cOption("AutosaveDirectory") = Chemin
.cOption("AutosaveFilename") = Fich
.cOption("AutosaveFormat") = 0
.cClearCache
End With
ThisWorkbook.Sheets("Feuil1").PrintOut Copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
With pdfjob
.cDefaultPrinter = DefaultPrinter
.cClearCache
.cClose
End With
Else
réponse = MsgBox("le fichier existe voulez-vous le remplacer ?", vbYesNo)
If réponse = vbYes Then
MsgBox "Remplacement du fichier existant"
GoTo Impression
Else
MsgBox "Sortie de la procédure"
Exit Sub
End If
End If
Range("M22").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Chemin & "\" & Fich _
, TextToDisplay:=" "
Range("M22").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
Range("A1").Select
Dim a As String
Dim b As String
a = Range("M17")
b = Range("E11")
Sheets("Feuil3").Select
Range("A65536").End(xlUp).Offset(1, 0) = b
Range("B65536").End(xlUp) = -a
End Sub
merci d'avance
Salut,
Essaie de regarder de ce côté-là :
lebtibo33 a écrit :Bonjour à tous,
j'ai créé un programme pour mon entreprise afin de créer des bons de livraison sous excel.
J'ai, dans ce programme, créé une macro pour imprimer avec pdf creator.
cette macro marchait très bien jusqu'à la dernière mise à jour de pdf creator.
Je ne trouve plus la référence PDF creator dans visual basic editor.
pour info je travail sur microsoft office 2010
et la nouvelle version de pdf creator est 2.0 avant celle là j'avais la 1.7
et donc j'ai un messge d'erreur : erreur d'execution 429
Un composant ActiveXne peut pas créer d'objet.
comment puis je faire?
voici mon code vba:
Public Sub Test1()
Dim pdfjob
Dim NomExcel, NomPdf, DefaultPrinter
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
Dim Chemin As String, Fich As String, rep
Chemin = Workbooks(ActiveWorkbook.Name).Path & "\historique"
Fich = Range("B21").Value & ".pdf"
rep = Dir(Chemin & "\" & Fich)
If rep = "" Then
MsgBox "le fichier n'existe pas création du fichier PDFCreator"
Impression:
With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Impossible d'initialiser PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutisaveDirectory") = 1
.cOption("AutosaveDirectory") = Chemin
.cOption("AutosaveFilename") = Fich
.cOption("AutosaveFormat") = 0
.cClearCache
End With
ThisWorkbook.Sheets("Feuil1").PrintOut Copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
With pdfjob
.cDefaultPrinter = DefaultPrinter
.cClearCache
.cClose
End With
Else
réponse = MsgBox("le fichier existe voulez-vous le remplacer ?", vbYesNo)
If réponse = vbYes Then
MsgBox "Remplacement du fichier existant"
GoTo Impression
Else
MsgBox "Sortie de la procédure"
Exit Sub
End If
End If
Range("M22").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Chemin & "\" & Fich _
, TextToDisplay:=" "
Range("M22").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
Range("A1").Select
Dim a As String
Dim b As String
a = Range("M17")
b = Range("E11")
Sheets("Feuil3").Select
Range("A65536").End(xlUp).Offset(1, 0) = b
Range("B65536").End(xlUp) = -a
End Sub
merci d'avance
Bonsoir,
Pourquoi ne pas utiliser le format d'enregistrement PDF d'excel?
Cela éviterait les erreurs à chaque changement de version
cdt,
Il est possible de supprimer la version 2... et de réinstallation la version 1.7.3
Installer le logiciel SumatraPDF gratuit en version ligne de commande, l'avantage de la rapidité, pas de gestion de file d'attente et on choisit l'imprimante ou celle par défaut.
Je m'en sers avec une macro Outlook pour imprimer sur différentes imprimantes (NB, couleur et distante, vous pouvez dupliquer aussi une imprimante avec d'autres paramètres pour faire du recto-verso).
Alors que l'instruction d'impression Outlook ne le fait que sur celle par défaut ou alors il faut changer celle par défaut et la redéfinir "fastidieux et trop long".
Shell "C:\Program Files\SumatraPDF\SumatraPDF.exe """ & FichierPDF, vbNormalFocus 'ou vbMinimizedFocus fichier affiché
L'option -print-to $printer_name $file.pdf Imprime le fichier spécifié sur l'imprimante désignée
'Convertir le fichier xl* concerné en pdf
'Accède au fichier Base pour travailler en fermé
Set FichierBase = GetObject(NomFichier)
'Workbooks.Open FichierBase ' ouverture du fichier
'Récupère seulement la feuille active, sinon faire un test
FichierBase.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomFichierTravail, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False ' sauvegarde du fichier au format pdf
'Exemple avec les options ActiveDocument.ExportAsFixedFormat OutputFileName:="D:StuffBusinessTempPDFName.pdf", ExportFormat:=wdExportFormatPDF, Range:=wdExportFromTo, From:=1, To:=1
FichierBase.Close (False) ' fermeture du fichier
Set FichierBase = Nothing
Complément sur le détail de l'instruction d'impression SumatraPDF en exemples pour les guillemets:
Cible = Shell("C:\Program Files\SumatraPDF\SumatraPDF.exe -Print-to ""\\SRVAMPROD\Xerox 7328 COULEUR"" """ & FichierSource, vbNormalFocus)
Cible = Shell("C:\Program Files\SumatraPDF\SumatraPDF.exe -Print-to ""Xerox 7530 couleur recto-verso"" """ & FichierSource, vbNormalFocus)
'https://github.com/sumatrapdfreader/sumatrapdf/wiki/Command-line-arguments
'Option : Par exemple. -print-settings "1-3,5,10-8, impair, propres" imprime les pages 1, 3, 5, 9 (par exemple les pages impaires des gammes 1-3, 5-5 et 10-8) et des échelles afin qu'ils insèrent dans la zone imprimable du papier.
-print-settings "3x" imprime le document 3 fois.
Cible = Shell("C:\Program Files\SumatraPDF\SumatraPDF.exe -print-to-default """ & FichierSource, 1)