Bonjour,
J'ai construit à l'aide du forum une macro me permettant d'imprimer différentes feuilles en un seul PDF (en utilisant PDF Creator en annexe à excel).
Pour se faire, j'ai dû installer PDF Creator sur l'ordinateur et introduire sous VBA- outil - Référence - la référence "PDF Creator".
Et ça fonctionne super ! je vais vous donné la macro après, si ça peut aider certain !
LE PROBLEME, car il y en a un gros... c'est que si j'ouvre le fichier sur un poste oÙ pdfcreator n'est pas installé et bien AUCUNE MACRO ne fonctionne. se n'ai pas grave si la macro spécifique à l'impression pdf ne fonctionne pas, mais je ne peux lancer aucune autre macro.
Donc ma question. Y'a t-il un moyen pour que les macros soient fonctionnelles (les macros normales donc) .
En tout cas, merci d'avance pour celui qui pourra me renseigner !
voici le code, ça ressemble pratiquement à ce qui a déjà été proposé, mais c'est modifier, pour une impression conditionnel de différentes pages.
Sub toPDF() 'macro impression (utilité : impression en pdf (nécessite PDF CREATOR) (0.9.8 -avec version 0.9.6 fonctionne pas chez moi)
' NECESSITE AUSSI SOUS VISUAL BASIC - OUTIL - REFERENCE -> Activé PDF Créator
Dim pdfjob As PDFCreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String
dossier = ThisWorkbook.Path & "\Annexes scannées\" 'pdf ira se placer sous ce dossier
nomclient = ActiveWorkbook.Sheets("situation personnelle").Range("e3").Value 'pdf prendra le nom du fichier client (cf E3 sous situation personnelle)
x16 = Sheets("données pour calcul").Range("x16") 'cellule définissant le nombre de page d'impression des différentes parties (fisc3,...)
x18 = Sheets("données pour calcul").Range("x18") ' '' '' ''
sPDFName = nomclient & ".pdf"
sPDFPath = dossier & Application.PathSeparator
'Check if worksheet is empty and exit if so
If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub
Set pdfjob = New PDFCreator.clsPDFCreator
With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + _
vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cCombineAll
.cClearCache
End With
'Imprime le document en PDF
pdfjob.cPrinterStop = True
Sheets("page 1").PrintOut copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 1 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
Sheets("FISC2").PrintOut From:=1, to:=(Sheets("données pour calcul").Range("x14")), copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 2 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
If x18 > 0 Then
Sheets("fortune et titres").PrintOut From:=(x18), to:=(x18), ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 3 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
Else 'Si il n'y a pas d'état des titres ça fait ce qui suit, et ça place le compteur de la file d'attente à 3 au lieu de 4 (ce qui permet de continuer la macro)
If x16 = 4 Then
Sheets("FISC2").PrintOut From:=(x16), to:=(x16), copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 3 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
GoTo Suite::
End If
End If
If x16 = 4 Then
Sheets("FISC2").PrintOut From:=(x16), to:=(x16), copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 4 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
End If
Suite::
'Attend que le document soit entré dans la file d'impression
'pdfjob.cPrinterStop = False
'Combine all PDFs into a single file and stop the printer
With pdfjob
.cCombineAll
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
.cPrinterStop = False
End With
'Attend que l'impression du document soit terminée
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
pdfjob.cClose
MsgBox "Opération terminée"
'Set pdfjob = Nothing
End Sub
J'ai construit à l'aide du forum une macro me permettant d'imprimer différentes feuilles en un seul PDF (en utilisant PDF Creator en annexe à excel).
Pour se faire, j'ai dû installer PDF Creator sur l'ordinateur et introduire sous VBA- outil - Référence - la référence "PDF Creator".
Et ça fonctionne super ! je vais vous donné la macro après, si ça peut aider certain !
LE PROBLEME, car il y en a un gros... c'est que si j'ouvre le fichier sur un poste oÙ pdfcreator n'est pas installé et bien AUCUNE MACRO ne fonctionne. se n'ai pas grave si la macro spécifique à l'impression pdf ne fonctionne pas, mais je ne peux lancer aucune autre macro.
Donc ma question. Y'a t-il un moyen pour que les macros soient fonctionnelles (les macros normales donc) .
En tout cas, merci d'avance pour celui qui pourra me renseigner !
voici le code, ça ressemble pratiquement à ce qui a déjà été proposé, mais c'est modifier, pour une impression conditionnel de différentes pages.
Sub toPDF() 'macro impression (utilité : impression en pdf (nécessite PDF CREATOR) (0.9.8 -avec version 0.9.6 fonctionne pas chez moi)
' NECESSITE AUSSI SOUS VISUAL BASIC - OUTIL - REFERENCE -> Activé PDF Créator
Dim pdfjob As PDFCreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String
dossier = ThisWorkbook.Path & "\Annexes scannées\" 'pdf ira se placer sous ce dossier
nomclient = ActiveWorkbook.Sheets("situation personnelle").Range("e3").Value 'pdf prendra le nom du fichier client (cf E3 sous situation personnelle)
x16 = Sheets("données pour calcul").Range("x16") 'cellule définissant le nombre de page d'impression des différentes parties (fisc3,...)
x18 = Sheets("données pour calcul").Range("x18") ' '' '' ''
sPDFName = nomclient & ".pdf"
sPDFPath = dossier & Application.PathSeparator
'Check if worksheet is empty and exit if so
If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub
Set pdfjob = New PDFCreator.clsPDFCreator
With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + _
vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cCombineAll
.cClearCache
End With
'Imprime le document en PDF
pdfjob.cPrinterStop = True
Sheets("page 1").PrintOut copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 1 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
Sheets("FISC2").PrintOut From:=1, to:=(Sheets("données pour calcul").Range("x14")), copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 2 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
If x18 > 0 Then
Sheets("fortune et titres").PrintOut From:=(x18), to:=(x18), ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 3 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
Else 'Si il n'y a pas d'état des titres ça fait ce qui suit, et ça place le compteur de la file d'attente à 3 au lieu de 4 (ce qui permet de continuer la macro)
If x16 = 4 Then
Sheets("FISC2").PrintOut From:=(x16), to:=(x16), copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 3 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
GoTo Suite::
End If
End If
If x16 = 4 Then
Sheets("FISC2").PrintOut From:=(x16), to:=(x16), copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 4 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
End If
Suite::
'Attend que le document soit entré dans la file d'impression
'pdfjob.cPrinterStop = False
'Combine all PDFs into a single file and stop the printer
With pdfjob
.cCombineAll
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
.cPrinterStop = False
End With
'Attend que l'impression du document soit terminée
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
pdfjob.cClose
MsgBox "Opération terminée"
'Set pdfjob = Nothing
End Sub