Tâche de fond pour killer Adobe après un cprintfile

Cocoroboss Messages postés 1 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 15 septembre 2015 - 15 sept. 2015 à 09:58
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 15 sept. 2015 à 10:25
Bonjour à tous,

J'utilise sur VBA la commande cprintfile pour générer des PDF dans le but de les fusionner avec PDFCreator par la suite. Voici le code en question pour un exemple de 3 PDF à fusionner (j'ai plus le nom de l'auteur désolé) (voir ligne 57 pour les cprintfile) :

Sub bindPDF(fnameout$)

Dim pdfjob As PDFCreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String
Dim DefaultPrinter$
Dim bRestart As Boolean

Dim sFilenames(3) As String

sFilenames(1) = "T:\_USERS\ECOR\Projet Macro Priorité 1\Dossier test\Yo-test.docx"
sFilenames(2) = "T:\_USERS\ECOR\Projet Macro Priorité 1\Dossier test\Yo-pdf - Copy.pdf"
sFilenames(3) = "T:\_USERS\ECOR\Projet Macro Priorité 1\Dossier test\Yo-pdf - Copy - Copy.pdf"

'/// Change the output file name here! ///
sPDFName = fnameout

'' stub here
sPDFPath = "C:\Users\me\Desktop"

'Activate error handling and turn off screen updates
On Error GoTo EarlyExit
' Application.ScreenUpdating = False
Set pdfjob = New PDFCreator.clsPDFCreator

'Check if PDFCreator is already running and attempt to kill the process if so
Do
bRestart = False
Set pdfjob = New PDFCreator.clsPDFCreator
If pdfjob.cStart("/NoProcessingAtStartup") = False Then
'PDF Creator is already running. Kill the existing process
Shell "taskkill /f /im PDFCreator.exe", vbHide
DoEvents
Set pdfjob = Nothing
bRestart = True
End If
Loop Until bRestart = False

'Assign settings for PDF job
With pdfjob
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
DefaultPrinter = .cDefaultPrinter
.cDefaultPrinter = "PDFCreator"
.cClearCache
End With

'Delete the PDF if it already exists
If Dir(sPDFPath & sPDFName) = sPDFName Then Kill (sPDFPath & sPDFName)

'Print the document to PDF
With pdfjob
' change this filename each loop
.cPrintFile (sFilenames(1))
Application.Wait Now + TimeValue("0:0:2")
.cPrintFile (sFilenames(2))
Application.Wait Now + TimeValue("0:0:2")
.cPrintFile (sFilenames(3))
Application.Wait Now + TimeValue("0:0:2")

'Wait until all the print jobs have entered the queue
Do Until pdfjob.cCountOfPrintjobs = 3
DoEvents
Loop
.cCombineAll
.cPrinterStop = False

End With
'Wait until the PDF file shows up then release the objects
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop

'Wait a bit longer for PDF Creator to finish
Application.Wait Now + TimeValue("0:0:2")

'reset original Windows' default printer
pdfjob.cDefaultPrinter = DefaultPrinter
pdfjob.cClose

Cleanup:
'Release objects and terminate PDFCreator
Set pdfjob = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
On Error GoTo 0
'Application.ScreenUpdating = True
Exit Sub

EarlyExit:
'Inform user of error, and go to cleanup section
MsgBox "There was an error encountered. PDFCreator has" & vbCrLf & _
"has been terminated on file " & sPDFName & " in bind. Please try again.", _
vbCritical + vbOKOnly, "Error"
Resume Cleanup

End Sub


Le problème que j'ai c'est qu'après l'exécution de la commande cprintfile pour un PDF, Adobe reste ouvert (le PDF s'est fermé mais pas l'application) et tant qu'Adobe reste ouvert le code ne se poursuit pas, j'obtiens même un message d'erreur : "Microsoft Excel is waiting for another application to complete an OLE action" (l'action en question est la fermeture manuelle d'Adobe). Le site PDFFORGE me l'a confirmé : "After printing PDF files with Adobe Acrobat Reader, the program window will not close anymore. This behavior can't be be influenced by the user. You can use an alternative application to print the PDF file, i.e. Foxit Reader".

J'ai essayé de killer Adobe une fois la commande cprintfile terminée mais en fait tant qu'Adobe reste ouvert la commande ne se termine pas.

Du coup j'ai pensé à une tâche de fond qui inspecterait l'état d'Adobe et qui, dès qu'elle repère qu'Adobe est lancée, attend quelques secondes (le temps que le cprintfile se fasse) et ferme Adobe sans autre forme de procès.

Pensez-vous qu'une telle tâche existe ?

1 réponse

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
15 sept. 2015 à 10:25
Bonjour quelle version de vb?
0
Rejoignez-nous