Macro print plusieurs feuilles
Bonjour,
j'essaye de mettre une macro pour imprimer plusieurs plages de cellules de plusieurs feuilles dans un fichier unique pdf. j'ai donc mis cette macro :
Sub printtest1trim()
'
' printtest1trim Macro
' Macro enregistrée le 30/08/2009 par Philippe BIRAC
'
'
Sheets("i1").Select
Range("O1:X56").Select
Sheets("i2").Select
Range("O1:X57").Select
Sheets("i3").Activate
Range("O1:X57").Select
Application.ActivePrinter = "CutePDF Writer sur CPW2:"
Selection.PrintOut Copies:=1, ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
End Sub
lorsque j'execute la macro, seule la dernière plage de la dernière feuille s'imprime dans mon fichier.
Si quelqu'un pouvait m'expliquer ou se trouve mon erreur, je le(s) remercie par avance
Philippe
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour,
Normal ! tes 3 sélections annulent la précédentes,
tu peux faire une routine (ici Sub imprime)
Sub printtest1trim()
Sheets("i1").Range("O1:X56").Select
Call imprime
Sheets("i2").Range("O1:X57").Select
Call imprime
Sheets("i3").Range("O1:X57").Select
Call imprime
End Subroutine
Sub imprime()
Application.ActivePrinter = "CutePDF Writer sur CPW2:"
Selection.PrintOut Copies:=1, ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
End Subon doit pouvoir faire mieux, mais çà devrait marcher
Amicalement
Claude.
dubois a écrit :Bonjour,
Normal ! tes 3 sélections annulent la précédentes,
tu peux faire une routine (ici Sub imprime)
Sub printtest1trim() Sheets("i1").Range("O1:X56").Select Call imprime Sheets("i2").Range("O1:X57").Select Call imprime Sheets("i3").Range("O1:X57").Select Call imprime End Subroutine
Sub imprime() Application.ActivePrinter = "CutePDF Writer sur CPW2:" Selection.PrintOut Copies:=1, ActivePrinter:="CutePDF Writer sur CPW2:", _ Collate:=True End Subon doit pouvoir faire mieux, mais çà devrait marcher
Amicalement
Claude.
Bonjour et merci
j'ai donc repris tes codes (avec cc pour ne pas déraper sur les touches) mais malheureusement j'ai un blocage "erreur d'execution 1004" "la méthode select de la classe range a échoué"
lorsque je vais sur le debogueur, la ligne Sheets("i2").Range("O1:X57").Select est en erreur.
a tout hasard j'ai supprimer cette ligne mais je retrouve l'erreur sur la ligne concernant i3
cordialement
Philippe
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
re,
excuses !
Sub printtest1trim()
With Sheets("i1")
.Activate
.Range("O1:X56").Select
Call imprime
End With
With Sheets("i2")
.Activate
.Range("O1:X57").Select
Call imprime
End With
With Sheets("i3")
.Activate
.Range("O1:X57").Select
Call imprime
End With
End Subçà devrait aller mieux
Claude.
dubois a écrit :re,
excuses !
Sub printtest1trim() With Sheets("i1") .Activate .Range("O1:X56").Select Call imprime End With With Sheets("i2") .Activate .Range("O1:X57").Select Call imprime End With With Sheets("i3") .Activate .Range("O1:X57").Select Call imprime End With End Subçà devrait aller mieux
Claude.
Effectivement, la je n'ai pas d'erreur. J'ai compris le principe de la routine et je te remercie, ca me servira surement pour d'autres fichiers.
Dans celui-ci, cela ne m'arrange pas car lorsque je déclenche la macro, elle s'active et me déclenche trois enregistrement différents donc théoriquement 3 fichiers pdf différents et je crois bien que les deux derniers ne s'enregistrent pas rireeee. enfin, ce n'est pas grave j'ai quand même appris et compris une macro routine, ce que je ne connaissais pas
en te remerciant
cordialement
Philippe
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
re,
y-a des jours, on ferait mieux de rester couché !
je suis nul sur ce coup là
Attends un peu, tu auras surement de meilleures réponses
Claude.
dubois a écrit :re,
y-a des jours, on ferait mieux de rester couché !
je suis nul sur ce coup là
Attends un peu, tu auras surement de meilleures réponses
Claude.
re claude
voilà ce que l'on m'a donné dans un autre forum.
Sub printtest1trim()
Dim j As Long
For j = 1 To 3
Worksheets("i" & j).PageSetup.PrintArea = Worksheets("i" & j).Range("O1:X57").Address
Next j
Sheets(Array("i1", "i2", "i3")).PrintOut Copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
End Sub
ca marche très bien tel que ... mais lorsque je modifie le For j = 1 To 35 et que je mets toutes les feuilles dans le sheets(array ...) la il est pas d'accord. j'ai posé la question du pourquoi et j'attends la réponse.
je te le livre tel que, peut être pourra t'il t'être utile un jour .... et je m'en voudrais beaucoup que tu te sois levé pour rien aujourd'hui ....
cordialement
Philippe
Salut le forum
Une autre méthode à tester
Sub Impression()
Dim J As Byte
With ThisWorkbook
For J = 1 To 35 'Tes feuilles sont I1 à I35
With Worksheets("I" & J)
.PageSetup.PrintArea = "$O$1:$X$57"
.PrintOut Copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
.PageSetup.PrintArea = ""
End With
Next J
End With
End SubMytå
Usb512 a écrit :Salut le forum
Une autre méthode à tester
Sub Impression() Dim J As Byte With ThisWorkbook For J = 1 To 35 'Tes feuilles sont I1 à I35 With Worksheets("I" & J) .PageSetup.PrintArea = "$O$1:$X$57" .PrintOut Copies:=1, _ ActivePrinter:="CutePDF Writer sur CPW2:", _ Collate:=True .PageSetup.PrintArea = "" End With Next J End With End SubMytå
bsoir
j'ai testé mais ca me fait un fichier pdf par page, ce qui n'est pas ce que je cherche. j'ai obtenu finalement ce qui se rapproche le plus de ce que je souhaite sur un autre forum :
Sub printtest1trim()
Dim j As Long, o As Byte
For j = 1 To 32
o = 35
Worksheets("i" & j).PageSetup.PrintArea = Worksheets("i" & j).Range("O1:X57").Address
Worksheets("i" & o).PageSetup.PrintArea = Worksheets("i" & o).Range("O1:X57").Address
Next j
Sheets(Array("i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "i10", "i11", "i12", "i13", "i14", "i15", "i16", "i17", "i18", "i19", "i20", "i21", "i22", "i23", "i24", "i25", "i26", "i27", "i28", "i29", "i30", "i31", "i32", "i35")).PrintOut Copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
End Sub
ca m'imprime toutes les sélection dans le même fichier pdf (soit 33 pages). il ne me reste plus qu'à obtenir de voir si je peux mettre d'autre variable pour pouvoir sauter 2 ou 3 pages inutiles (pour exemple la i11, i12 et i14 qui sont pour le moment inutilisées)
Cordialement
Philippe
Re le forum
Avec choix des feuilles et gestion du Array par un Tablo
Sub Impression()
Dim Feuille As Byte
Dim Tablo() As String
ReDim Tablo(0)
With ThisWorkbook
For Feuille = 1 To 35 'Tes feuilles sont I1 à I35
Select Case Feuille
Case 1 To 10, 13, 15 To 35
Tablo(UBound(Tablo)) = "I" & Feuille
ReDim Preserve Tablo(UBound(Tablo) + 1)
Worksheets("I" & Feuille).PageSetup.PrintArea = "$O$1:$X$57"
End Select
Next Feuille
ReDim Preserve Tablo(UBound(Tablo) - 1)
End With
Sheets(Tablo()).PrintOut Copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
End SubMytå
Usb512 a écrit :Re le forum
Avec choix des feuilles et gestion du Array par un Tablo
Sub Impression() Dim Feuille As Byte Dim Tablo() As String ReDim Tablo(0) With ThisWorkbook For Feuille = 1 To 35 'Tes feuilles sont I1 à I35 Select Case Feuille Case 1 To 10, 13, 15 To 35 Tablo(UBound(Tablo)) = "I" & Feuille ReDim Preserve Tablo(UBound(Tablo) + 1) Worksheets("I" & Feuille).PageSetup.PrintArea = "$O$1:$X$57" End Select Next Feuille ReDim Preserve Tablo(UBound(Tablo) - 1) End With Sheets(Tablo()).PrintOut Copies:=1, _ ActivePrinter:="CutePDF Writer sur CPW2:", _ Collate:=True End SubMytå
Bonsoir Myta
merci beaucoup, c'est exactement ce que je cherchais et j'ai même compris le principe
merci à toutes celles et tous ceux qui font vivre ces forums et qui partagent leurs connaissances avec nous qui n'y connaissons pas grand chose mais qui avons la soif d'apprendre.
cordialement
Philippe (qui se répète ici mais ca le vaut bien)
Re le forum
Une autre méthode avec contrôle du texte "Vide" dans une cellule de la feuille et
gestion de l'erreur d'impression si aucune feuille dans le tableau.
On évite de modifier la macro pour ajouter les feuilles à traiter.
Sub Impression()
Dim Feuille As Byte
Dim Tablo() As String
ReDim Tablo(0)
With ThisWorkbook
For Feuille = 1 To 35 'Tes feuilles sont I1 à I35
If UCase(Sheets("I" & Feuille).Range("A1")) <> "VIDE" Then
Tablo(UBound(Tablo)) = "I" & Feuille
ReDim Preserve Tablo(UBound(Tablo) + 1)
Worksheets("I" & Feuille).PageSetup.PrintArea = "$O$1:$X$57"
End If
Next Feuille
If Tablo(0) = "" Then Exit Sub
ReDim Preserve Tablo(UBound(Tablo) - 1)
End With
Sheets(Tablo()).PrintOut Copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
End SubNe pas oublier de mettre ta ficelle en Résolu
Mytå
Usb512 a écrit :Re le forum
Avec choix des feuilles et gestion du Array par un Tablo
Sub Impression() Dim Feuille As Byte Dim Tablo() As String ReDim Tablo(0) With ThisWorkbook For Feuille = 1 To 35 'Tes feuilles sont I1 à I35 Select Case Feuille Case 1 To 10, 13, 15 To 35 Tablo(UBound(Tablo)) = "I" & Feuille ReDim Preserve Tablo(UBound(Tablo) + 1) Worksheets("I" & Feuille).PageSetup.PrintArea = "$O$1:$X$57" End Select Next Feuille ReDim Preserve Tablo(UBound(Tablo) - 1) End With Sheets(Tablo()).PrintOut Copies:=1, _ ActivePrinter:="CutePDF Writer sur CPW2:", _ Collate:=True End SubMytå
Bonjour
je me permets de revenir vers toi. Ton code macro fonctionne très bien, et je pensais avoir compris mais ..... il faut croire qu'il y a des bricoles que je n'ai pas intégré.
je reprends ce code tel que ci dessous :
Sub printtest1trim()
Dim Feuille As Byte
Dim Tablo() As String
ReDim Tablo(0)
With ThisWorkbook
For Feuille = 1 To 35 'Tes feuilles sont i1 à i35
Select Case Feuille
Case 1 To 10, 13, 15 To 25, 27 To 30, 32
Tablo(UBound(Tablo)) = "i" & Feuille
ReDim Preserve Tablo(UBound(Tablo) + 1)
Worksheets("i" & Feuille).PageSetup.PrintArea = "$O$1:$X$57"
End Select
Next Feuille
ReDim Preserve Tablo(UBound(Tablo) - 1)
End With
Sheets(Tablo()).PrintOut Copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
End Sub
ce code là fonctionne bien, je créé donc une nouvelle macro pour les feuilles cls, avec la plage cellule A1 - J58 et je tapes le code suivant :
Sub print1sem()
Dim Feuille As Byte
Dim Tablo() As String
ReDim Tablo(0)
With ThisWorkbook
For Feuille = 1 To 35 'Tes feuilles sont cls1 à cls35
Select Case Feuille
Case 2 To 10, 13, 15 To 25, 27 To 32, 35
Tablo(UBound(Tablo)) = "cls" & Feuille
ReDim Preserve Tablo(UBound(Tablo) + 1)
Worksheets("cls" & Feuille).PageSetup.PrintArea = "$A$1:$J$58"
End Select
Next Feuille
ReDim Preserve Tablo(UBound(Tablo) - 1)
End With
Sheets(Tablo()).PrintOut Copies:=1, _
ActivePrinter:="CutePDF Writer sur CPW2:", _
Collate:=True
End Sub
j'ai bien remplacé tout ce qui était "i" par "cls" et ma plage définie les cellules correctement .... et c'est là que les choses se gâtent .. sic ... lorsque je créé un bouton en y affectant la macro ci dessus, j'ai un fichier qui se créé avec les pages de mes feuilles "i" et non "cls"
peux tu me dire ou se situe le problème s'il te plait
Merci d'avance
Philippe
autant pour moi, désolé du dérangement, ca marche bien, j'ai juste regardé le fichier pdf qu'il ne fallait pas.
avec mes excuses
Cordialement
Philippe
Bonjour à tous,
Je rebondis... un peu tard sur ce sujet !
En ce qui me concerne, j'arrive à générer un PDF avec plusieurs feuilles, mais, mon besoin est légèrement différent aujourd'hui, je voudrai maintenant dans le même PDF y imprimer 2 plages de cellules de 2 feuilles différentes.
J'ai bricolé un code qui arrive à m'imprimer le PDF avec la 1ère plage de la Feuil1... mais lorsque j'ajoute la 2e plage de la Feuil2... tout plante...
Voici mon code rétabli pour une plage et qui fonctionne :
Sub DMI_Générer_PDF()
' Permet de générer une impression PDF d'une partie d'une feuille
' en sauvegardant le document .pdf avec un nom spécifique et dans répertoire déterminé
Dim sRep As String ' Répertoire de sauvegarde
Dim sFilename As String ' Nom du fichier
sRep = "C:\Users\Joe\Desktop\" ' Répertoire de sauvegarde (si non spécifié, répertoire actif par défaut)
sFilename = "Douanes" & "-" & ActiveSheet.Name & "-" & Range("B18").Value & "-" & Range("C20") & "." & "pdf" ' Nom du fichier
' Vérifier si un fichier portant ce nom existe
If sRep = ("Douanes" & "-" & ActiveSheet.Name & "-" & Range("B18").Value & "-" & Range("C20").Value & "." & "pdf") <> "" Then
If MsgBox("Un fichier ayant ce nom " & sFilename & " existe " & _
"déjà dans ce répertoire " & sRep & "." & vbCrLf & _
"Désirez-vous l'écraser ? ", vbCritical + vbYesNo, "Attention !") = vbNo Then
sFilename = Application.InputBox("Donner lui un nouveau nom.")
If Format(sFilename) = False Then
MsgBox "Opération de la Création des fichiers PDF annulée."
Else
End If
End If
End If
' Impression PDF de la feuille "DMI"
Range("A15:H54").Select
Selection.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sRep & sFilename, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End SubEn attendant d'avoir vos avis et vos conseils, merci et bon week-end
Joe