[Zone impression-Probleme synthaxe] VBA détecte une formule et erreur 1004

Bonjour,

Je voudrais déterminer une zone d'impression de type A1:D29;E1:H10

Sub Btn_Aperçu_Impression_Universel()
Dim DerLig As Integer, DerCol As Integer, DerLig2 As Integer, DerCol2 As Integer
With ActiveSheet

    DerLig = .Range("B" & Rows.Count).End(xlUp).Row
    DerCol = .Cells(12, Columns.Count).End(xlToLeft).Column
    DerLig2 = .Range("I" & Rows.Count).End(xlUp).Row
    DerCol2 = .Cells(12, Columns.Count).End(xlToLeft).Column

    ActiveSheet.PageSetup.PrintArea = ActiveSheet.Range(.Cells(3, 1).Address & ":" & .Cells(DerLig, DerCol).Address).Address & ";" & ActiveSheet.Range(.Cells(3, 8).Address & ":" & .Cells(DerLig2, DerCol2).Address).Address

End With

Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")

End Sub

Sauf que j'ai un problème de synthaxe je pense...J'ai essayé de concaténer deux parties et c'est là que ça foire :/ sur le principe zone d'impression= A1:D29 c'est bon. Mais dès que je concatène pour en mettre une autre ça coince...

VBA tombe en erreur 1004: Nous avons rencontré une erreur avec cette formule.

Merci pour votre aide

Bonsoir Matths

Essayez ceci

Sub Btn_Aperçu_Impression_Universel2()
  Dim DerLig As Long, DerCol As Long
  Dim Rng1 As Range, Rng2 As Range
  With ActiveSheet
    ' Dernière ligne/colonne de la Zone1
    DerLig = .Range("B" & Rows.Count).End(xlUp).Row
    DerCol = .Cells(12, Columns.Count).End(xlToLeft).Column
    ' Définir la plage de la zone 1
    Set Rng1 = .Range(.Cells(3, 1), .Cells(DerLig, DerCol))
    ' Dernière ligne/colonne de la Zone2
    DerLig = .Range("I" & Rows.Count).End(xlUp).Row
    DerCol = .Cells(12, Columns.Count).End(xlToLeft).Column
    ' Définir la plage de la zone 2
    Set Rng2 = .Range(.Cells(3, 8), .Cells(DerLig2, DerCol2))
    ' Définir la zone d'impression
    ActiveSheet.PageSetup.PrintArea = Rng1.Address & "," & Rng2.Address
  End With
  Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")
End Sub

A+

Merci de la proposition Bruno

Je viens d'essayer cela ne fonctionne pas :/ j'ai toujours le même résultat: la quatrième page qui est toujours là

Dernière procédure de "Module_commun"

Bonjour Matths,

ATTENTION ! vous confondez tout et ce n'est plus la problématique indiqué dans le titre du sujet

Je ne comprenais pas aussi, pourquoi vous vouliez définir ces 2 zones

Si vous ne voulez faire qu'une seule impression, c'est impossible, l'impression se base sur la plus grande zone.
il faut donc procéder en 2 étapes :
1) définir la zone 1 et l'imprimer
2) définir la zone 2 et l'imprimer

Voilà

Bonjour Bruno

Là je ne comprends pas non plus. 😥

Lorsque l'on est dans "imprimer les titres" et que la zone d'impression apparaît avec les coordonnées il est tout à fait possible d'entrer B3:F29;J3:K22 et cela fonctionne. Pourtant, l'une est plus grande que l'autre.

Donc j'essayais de reproduire cela avec VBA en dynamique avec les DerL et DerC non vide sauf que lorsque je mets le ; dans la procédure c'est là que ça coincé.

or, pour avoir tester avec l'enregistreur de macro ça fonctionne aussi (en fixe pas en dynamique).

Ok, alors j'ai adapté.

La petite info que je n'ai pas précisé c'est que la zone 1 la dernière colonne est TOUJOURS "G" et la zone 2 la dernière colonne est TOUJOURS "L", du coup ça donne ça:

Sub Btn_Aperçu_Impression_Universel2()
  Dim DerLig As Long, DerCol As Long, DerLig2 As Long, DerCol2 As Long
  Dim Rng1 As Range, Rng2 As Range
  With ActiveSheet
    ' Dernière ligne/colonne de la Zone1
    DerLig = .Range("B" & Rows.Count).End(xlUp).Row
    'DerCol = .Cells(12, Columns.Count).End(xlToLeft).Column
    ' Définir la plage de la zone 1
    Set Rng1 = .Range(.Cells(3, 1), .Cells(DerLig, 7))
    ' Dernière ligne/colonne de la Zone2
    If Range("J13") = "" Then
        'Columns("I:M").EntireColumn.Hidden = True
        ActiveSheet.PageSetup.PrintArea = Rng1.Address
    Else
        DerLig2 = .Range("I" & Rows.Count).End(xlUp).Row
        Set Rng2 = .Range(.Cells(3, 8), .Cells(DerLig2, 12))
        ActiveSheet.PageSetup.PrintArea = Rng1.Address & "," & Rng2.Address
    End If
  End With
  Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")
End Sub

Et là ça fonctionne ! Vu qu'il n'y a que le nombre de ligne qui va varier et pas le nombre de colonne !

Par contre, je ne comprends toujours pas pourquoi ce code n'a pas fonctionné pour fixer la print area (en me détectant une formule, qui est le problème originel :D)

ActiveSheet.PageSetup.PrintArea = ActiveSheet.Range(.Cells(3, 1).Address & ":" & .Cells(DerLig, DerCol).Address).Address & ";" & ActiveSheet.Range(.Cells(3, 8).Address & ":" & .Cells(DerLig2, DerCol2).Address).Address
Rechercher des sujets similaires à "zone impression probleme synthaxe vba detecte formule erreur 1004"