Bonjour,
Les propriétés Count, Row, Column, Rows.Count, Columns.Count
d'une plage simple par exemple "$C$2:$H$14""
ou d'une plage équivalente, constituée de la concaténation de plages simples par exemple "$C$2:$D$10,$H$2:$H$14,$C$11:$D$14,$E$2:$G$14"
réservent parfois des surprises :
Contrairement à la propriété Count, les propriétés Column, Columns.Count, Row, Rows.Count sont celles de la 1ère Area de la Plage et non celles de la Plage !!!.
Le code VBA qui met cela en évidence
Le résultat dans la fenêtre d'exécution
===============================================================
Plage (pRange.) $C$2:$H$14
---> Count 78 Column 3 Columns.Count 6 Row 2 Rows.Count 13
---------------------
Area (MonArea.) $C$2:$H$14
---> Count 78 Column 3 Columns.Count 6 Row 2 Rows.Count 13
Dernière ligne de la plage 14
Dernière colonne de la plage 8
===============================================================
Plage (pRange.) $C$2:$D$10,$H$2:$H$14,$C$11:$D$14,$E$2:$G$14
---> Count 78 Column 3 Columns.Count 2 Row 2 Rows.Count 9
---------------------
Area (MonArea.) $C$2:$D$10
---> Count 18 Column 3 Columns.Count 2 Row 2 Rows.Count 9
---------------------
Area (MonArea.) $H$2:$H$14
---> Count 13 Column 8 Columns.Count 1 Row 2 Rows.Count 13
---------------------
Area (MonArea.) $C$11:$D$14
---> Count 8 Column 3 Columns.Count 2 Row 11 Rows.Count 4
---------------------
Area (MonArea.) $E$2:$G$14
---> Count 39 Column 5 Columns.Count 3 Row 2 Rows.Count 13
Dernière ligne de la plage 14
Dernière colonne de la plage 8
===============================================================
Plage (pRange.) $C$2:$D$10,$H$2:$H$14
---> Count 31 Column 3 Columns.Count 2 Row 2 Rows.Count 9
---------------------
Area (MonArea.) $C$2:$D$10
---> Count 18 Column 3 Columns.Count 2 Row 2 Rows.Count 9
---------------------
Area (MonArea.) $H$2:$H$14
---> Count 13 Column 8 Columns.Count 1 Row 2 Rows.Count 13
Dernière ligne de la plage 14
Dernière colonne de la plage 8
===============================================================
Plage (pRange.) $H$2:$H$14,$C$2:$D$10
---> Count 31 Column 8 Columns.Count 1 Row 2 Rows.Count 13
---------------------
Area (MonArea.) $H$2:$H$14
---> Count 13 Column 8 Columns.Count 1 Row 2 Rows.Count 13
---------------------
Area (MonArea.) $C$2:$D$10
---> Count 18 Column 3 Columns.Count 2 Row 2 Rows.Count 9
Dernière ligne de la plage 14
Dernière colonne de la plage 8
Les propriétés Count, Row, Column, Rows.Count, Columns.Count
d'une plage simple par exemple "$C$2:$H$14""
ou d'une plage équivalente, constituée de la concaténation de plages simples par exemple "$C$2:$D$10,$H$2:$H$14,$C$11:$D$14,$E$2:$G$14"
réservent parfois des surprises :
Contrairement à la propriété Count, les propriétés Column, Columns.Count, Row, Rows.Count sont celles de la 1ère Area de la Plage et non celles de la Plage !!!.
Le code VBA qui met cela en évidence
VB:
Sub TestPlageDiscontinue()
' Contrairement à la propriété Count,
' les propriétés (Column, Columns.Count, Row, Rows.Count) sont celles de la 1ère Area de la Plage et non celles de la Plage !!!
' alors que les 2 plages (Plage continue et Plage Discontinue sont identiques)
InfosPlageDiscontinue ActiveSheet.Range("$C$2:$H$14")
InfosPlageDiscontinue ActiveSheet.Range("$C$2:$D$10,$H$2:$H$14,$C$11:$D$14,$E$2:$G$14") ' ici complet équivalent de "$C$2:$H$14"
InfosPlageDiscontinue ActiveSheet.Range("$C$2:$D$10,$H$2:$H$14") ' ici 1ère aréa = $C$2:$D$10
InfosPlageDiscontinue ActiveSheet.Range("$H$2:$H$14,$C$2:$D$10") ' ici 1ère aréa = $H$2:$H$14
End Sub
Sub InfosPlageDiscontinue(pRange As Range)
Dim MonArea As Range
Dim DerLig As Long, DerCol As Long
DerLig = 0
DerCol = 0
Debug.Print _
"===============================================================" & vbCrLf & _
" Plage (pRange.) " & pRange.Address & vbCrLf & " ---> " & _
" Count " & pRange.Count & _
" Column " & pRange.Column & _
" Columns.Count " & pRange.Columns.Count & _
" Row " & pRange.Row & _
" Rows.Count " & pRange.Rows.Count
For Each MonArea In pRange.Areas
Debug.Print _
"---------------------" & vbCrLf & _
" Area (MonArea.) " & MonArea.Address & vbCrLf & " ---> " & _
" Count " & MonArea.Count & _
" Column " & MonArea.Column & _
" Columns.Count " & MonArea.Columns.Count & _
" Row " & MonArea.Row & _
" Rows.Count " & MonArea.Rows.Count
DerLig = Application.Max(DerLig, MonArea.Row + MonArea.Rows.Count - 1)
DerCol = Application.Max(DerCol, MonArea.Column + MonArea.Columns.Count - 1)
Next MonArea
Set MonArea = Nothing
Debug.Print _
vbCrLf & _
"Dernière ligne de la plage " & DerLig & vbCrLf & _
"Dernière colonne de la plage " & DerCol & vbCrLf
End Sub
Le résultat dans la fenêtre d'exécution
===============================================================
Plage (pRange.) $C$2:$H$14
---> Count 78 Column 3 Columns.Count 6 Row 2 Rows.Count 13
---------------------
Area (MonArea.) $C$2:$H$14
---> Count 78 Column 3 Columns.Count 6 Row 2 Rows.Count 13
Dernière ligne de la plage 14
Dernière colonne de la plage 8
===============================================================
Plage (pRange.) $C$2:$D$10,$H$2:$H$14,$C$11:$D$14,$E$2:$G$14
---> Count 78 Column 3 Columns.Count 2 Row 2 Rows.Count 9
---------------------
Area (MonArea.) $C$2:$D$10
---> Count 18 Column 3 Columns.Count 2 Row 2 Rows.Count 9
---------------------
Area (MonArea.) $H$2:$H$14
---> Count 13 Column 8 Columns.Count 1 Row 2 Rows.Count 13
---------------------
Area (MonArea.) $C$11:$D$14
---> Count 8 Column 3 Columns.Count 2 Row 11 Rows.Count 4
---------------------
Area (MonArea.) $E$2:$G$14
---> Count 39 Column 5 Columns.Count 3 Row 2 Rows.Count 13
Dernière ligne de la plage 14
Dernière colonne de la plage 8
===============================================================
Plage (pRange.) $C$2:$D$10,$H$2:$H$14
---> Count 31 Column 3 Columns.Count 2 Row 2 Rows.Count 9
---------------------
Area (MonArea.) $C$2:$D$10
---> Count 18 Column 3 Columns.Count 2 Row 2 Rows.Count 9
---------------------
Area (MonArea.) $H$2:$H$14
---> Count 13 Column 8 Columns.Count 1 Row 2 Rows.Count 13
Dernière ligne de la plage 14
Dernière colonne de la plage 8
===============================================================
Plage (pRange.) $H$2:$H$14,$C$2:$D$10
---> Count 31 Column 8 Columns.Count 1 Row 2 Rows.Count 13
---------------------
Area (MonArea.) $H$2:$H$14
---> Count 13 Column 8 Columns.Count 1 Row 2 Rows.Count 13
---------------------
Area (MonArea.) $C$2:$D$10
---> Count 18 Column 3 Columns.Count 2 Row 2 Rows.Count 9
Dernière ligne de la plage 14
Dernière colonne de la plage 8