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

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 Sub

routine

Sub imprime()
    Application.ActivePrinter = "CutePDF Writer sur CPW2:"
    Selection.PrintOut Copies:=1, ActivePrinter:="CutePDF Writer sur CPW2:", _
    Collate:=True
End Sub

on 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 Sub

routine

Sub imprime()
    Application.ActivePrinter = "CutePDF Writer sur CPW2:"
    Selection.PrintOut Copies:=1, ActivePrinter:="CutePDF Writer sur CPW2:", _
    Collate:=True
End Sub

on 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

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

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

12test-v3.xlsm (33.73 Ko)

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 Sub

Mytå

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 Sub

Mytå

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 Sub

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 Sub

Mytå

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 Sub

Ne 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 Sub

Mytå

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 Sub

En attendant d'avoir vos avis et vos conseils, merci et bon week-end

Joe

Rechercher des sujets similaires à "macro print feuilles"