imprimer plusieurs pages dans un seul PDF Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
i
infodes
Membre fidèle
Membre fidèle
Messages : 183
Inscrit le : 28 novembre 2013
Version d'Excel : 2007fr

Message par infodes » 9 juin 2014, 17:54

Bonjour, j'ai un nouveau problème. J'aimerais imprimer plusieurs pages dans un seul document PDF. Je n'y arrive pas et j'ai trouvé des choses sur les forums mais rien ne semble répondre à mes besoins.

La particularité de mon fichier est que la sélection change selon les besoins du client.

Voilà comment il faudrait que ça fonctionne:

je sélectionne dans la page "feuille1" la section b1 à J45 et la section B125 à Jxxx. Le "xxx" est une variable qui donne le numéro de la ligne. Jusque là tout va bien. Après, je sélectionne une autre section et une autre section toujours dans la même page. Pas de problème pour faire cela. Là ou sa ce complique, c'est que je dois après cela aller sélectionner une autre section dans une autre page. Feuille2, section "a1" à "a56" puis feuille5 section "a1" à "t125".

Aussitôt que je sélectionne l'autre page, les sélections dans la page antérieur ne sont pas pris en compte. Est-il possible d'imprimer toutes ces page dans un seul et même document? Comment faut-il faire? Je n'ai aucune idée de ce qu'il faut faire.

merci de votre aide.

J'ai un code qui fonctionne pour la première section mais sa s'arrête là. Je pourrais le mettre mais ça ne donne rien.
i
infodes
Membre fidèle
Membre fidèle
Messages : 183
Inscrit le : 28 novembre 2013
Version d'Excel : 2007fr

Message par infodes » 10 juin 2014, 14:18

bonjour, j'ai trouvé cela en fouillant mais ça ne fonctionne pas, j'ai toujours 2 fichier indépendant un de l'autre. Peut-être que quelqu'un peut m'aider...

Sub printtest1trim()


Worksheets("feuil1").PageSetup.PrintArea = Worksheets("feuil1").Range("a1:af50").Address
Worksheets("feuil2").PageSetup.PrintArea = Worksheets("feuil2").Range("b1:i45").Address
Sheets(Array("feuil1", "feuil2")).PrintOut copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", collate:=True
End Sub

Si je comprend bien, la fonction collapse devrait faire en sorte qu'un seul fichier est produit mais ce n'est pas le cas. Peut-être que ça ne fonctionne pas avec se programme. Doit-on prendre PDFCreator pour que ça fonctionne?
i
infodes
Membre fidèle
Membre fidèle
Messages : 183
Inscrit le : 28 novembre 2013
Version d'Excel : 2007fr

Message par infodes » 12 juin 2014, 15:20

Bon il semble bien que ce soit pas la tasse de beaucoup de monde l'impression en PDF. J'ai trouvé ce code que j'ai adapter à ma situation qui fonctionne à moitié.

Dim j As Long, o As Byte, f As Byte
For j = 1 To 4
o = 5
f = 6
Worksheets("# (" & j & ")").PageSetup.PrintArea = Worksheets("# (" & j & ")").Range("a9:p56").Address
Worksheets("# (" & o & ")").PageSetup.PrintArea = Worksheets("# (" & o & ")").Range("a1:af50").Address
Worksheets("# (" & f & ")").PageSetup.PrintArea = Worksheets("# (" & f & ")").Range("b1:B46", "B98:i135").Address
Next j
Sheets(Array("# (2)", "# (4)", "# (5)", "# (6)")).PrintOut copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", _
collate:=True

Je m'explique, si j'imprime 25 pages avec la même sélection (A9:P56), j'ai un seul fichier mais lorsque je change la sélection tel que ci-haut (o et f), il me fait autant de fichier qu'il y a de sélection. malgré le fait que je lui demande à la fin de faire un "collate = true". Je comprends que cette fonction ne sert absolument à rien puisqu'elle ne fonctionne pas. Puisque avec ou sans cette commande, j'ai le même résultat ou je ne sais pas l'utiliser à bon escient.

Donc, si quelqu'un peut m'aider, je serait bien content puisque je suis sur cela depuis lundi dernier sans avoir vraiment trouvé de solution. ne vous gêner pas...

merci de votre aide.
i
infodes
Membre fidèle
Membre fidèle
Messages : 183
Inscrit le : 28 novembre 2013
Version d'Excel : 2007fr

Message par infodes » 6 août 2014, 18:54

Bonjour tout le monde, après bien des jours à faire des essaie, j'ai réussit à l'aide d'un post sur un autre forum. Il s'agissait de simplement faire un compteur. Pour ceux que ça intéresse, je vais laisser mon code. Il est complexe car je dois faire des choix en fonction des pages qui sont dans mon document, qui changent constamment. Si ça peut aider quelqu'un, tant mieux.

voici le code:


Sub PrintPDF()

Dim A As String
Dim B As Integer
Dim c As Integer
Dim Chemin As String
Dim Chemin2 As String
Dim Chemin3 As String
Dim D As Integer
Dim DernirePage As String
Dim E As Integer
Dim GestionFichier As New Scripting.FileSystemObject
Dim I As Integer
Dim IncrementLigne As Integer
Dim IncrementLigne2 As Integer
Dim Ligne As Integer
Dim Nbre As Integer
Dim NbrEquip As Integer
Dim NomFichier As String
Dim NumPage As String
Dim Print1 As Variant
Dim Print2 As Variant
Dim Print3 As Variant
Dim Print4 As Variant
Dim Print5 As Variant
Dim Print6 As Variant
Dim Print7 As Variant
Dim Print8 As Variant
Dim Sh As Worksheet
Dim pdfjob As PDFCreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String

Chemin = ActiveWorkbook.Path 'pdf ira se placer sous ce dossier
NomFichier = "a" & ActiveWorkbook.Sheets("nom de la page").Range("xx").Value
sPDFName = NomSoum & ".pdf"
sPDFPath = Chemin & 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

Set GestionFichier = CreateObject("Scripting.FileSystemObject")

Application.ScreenUpdating = False

Sheets("nomde la page").Select
For Each Sh In Sheets
If Left(Sh.Name, 1) = "#" Then I = I + 1
Next Sh

'Ligne 51 = 0 print les pages 1 et 3
Sheets("nomde la page").Select
IncrementLigne = I + 147 - 1
If Range("i51") = 0 Then
A = Range("a" & IncrementLigne).Address
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("a1:h45,a98:h" & IncrementLigne).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
End If

'Ligne 51 = 1 print la page 2 avec les pages 1 et 3
If Range("i51") = 1 Then
ActiveWorkbook.Worksheets("nomde la page").PageSetup.TopMargin = Application.InchesToPoints(0.75)
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("B1:I45,B47:I97, B98:I" & IncrementLigne).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
End If

IncrementLigne2 = I + 267 - 2
'ligne 135 = 1 ligne 51 = 0 print les pages 4 et 5 avec les pages 1 et 3
If Range("i" & IncrementLigne + 1) = 1 And Range("i97") = 0 Then
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("a1:I45, a98" & ":" & "h" & IncrementLigne2).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
End If

'ligne 135 = 1 et ligne 51 = 1 print les pages 4 et 5 avec les pages 1, 2 et 3
If Range("i" & IncrementLigne) = 1 And Range("i97") = 1 Then
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("a1:h" & IncrementLigne2).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
End If

c = IncrementLigne2 + 1
D = IncrementLigne2 + 32

'ligne 251 = 1 ligne 135 =0 ligne 51 = 0 print la page 6 avec les pages 1 et 3
If Range("i" & c) = 1 And Range("i" & IncrementLigne) = 0 And Range("i97") = 0 Then
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("a1:I45,a98:I" & IncrementLigne & "," & "a" & c & ":h" & D).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
End If

'ligne 251 = 1 ligne 135 = 0 ligne 51 = 1 print la page 6 avec les pages 1,2 et 3
If Range("i" & c) = 1 And Range("i" & IncrementLigne) = 0 And Range("i97") = 1 Then
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("a1:h" & IncrementLigne & "," & "a" & c & ":" & "h" & D).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
End If

'ligne 251 = 1 ligne 135 = 1 ligne 51 = 1 print la page 6 avec les pages 1,2,3,4 et 5
If Range("i" & c) = 1 And Range("i97") = 1 And Range("i" & IncrementLigne) = 1 Then
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("a1:h" & D).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
End If

Sheets("nomde la page").Select
Range("o23:o27").Select
If Range("a1") = 1 Or Range("a2") = 1 Or Range("a3") = 1 Or Range("a4") = 1 Or Range("a5") = 1 Then
Sheets("nomde la page").Select
Range("a1:a50").Select
Else: GoTo fin
End If
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("a1:a50").PrintOut 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

Sheets("nomde la page").Select
Range("o23:o27").Select
If Range("a1") = 1 Or Range("a2") = 1 Or Range("a3") = 1 Or Range("a4") = 1 Or Range("a5") = 1 Then
Sheets("nom de la page").Select
Range("a1:a50").Select
Else: GoTo fin
End If
pdfjob.cPrinterStop = True
Sheets("nomde la page").Range("a1:a50").PrintOut 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

'Définir le nbre de page existante avec calcul
Sheets("nomde la page").Select
Range("f29").Select

NbrEquip = 1
Counter = 1

'compte le nombre d'équipement dans la soumission
For Each Sh In Sheets
If Left(Sh.Name, 1) = "feuil" Then E = E + 1 ' Ici, la lettre E sert a faire un décompte des pages
Next Sh

'boucle selon la quantité d'équipement
Do While NbrEquip = 1
If Counter = I Then
NbrEquip = 0
End If

Ligne = ActiveCell.Row
If ActiveCell.Value <> 0 Or Range("e" & Ligne) = 0 Then
ActiveCell.Offset(1, 0).Select
Else:
E = Counter - 1
ActiveCell.Offset(0, -4).Select
NumPage = ActiveCell.Value
Sheets("# (" & NumPage & ")").Select
Range("a9:p56").Select
If Counter <> 1 Then
GoTo 2
Else:
pdfjob.cPrinterStop = True
Sheets("# (" & NumPage & ")").Range("a9:p56").PrintOut 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
GoTo 3
End If
2:
pdfjob.cPrinterStop = True
Sheets("# (" & NumPage & ")").Range("a9:p56").PrintOut copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = E + 3 'La lettre E remplace le chiffre qui numérote les documents pdf
DoEvents
Loop
3:
Sheets("nomde la page").Select
ActiveCell.Offset(1, 4).Select
End If
Sheets("nomde la page").Select
Counter = Counter + 1
Loop


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
Set pdfjob = Nothing
fin:

Application.ScreenUpdating = True

End Sub

Merci à tout ces gens qui mettent sur les forums leur solution finale et à ceux qui nous viennent en aide aussi.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message