[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 SubSauf 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 SubA+
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 SubEt 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