Bonjour,
Les propriétés Count, Row, Column, Rows.Count, Columns.Count
d'une plage simple
ou d'une plage équivalente, constituée de la concaténation de plages simples
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 !!!.
1er exemple
$C$2:$H$14
---> Count 78 Column 3 Columns.Count 6 Row 2 Rows.Count 13
$C$2:$D$10,$H$2:$H$14,$C$11:$D$14,$E$2:$G$14 (la concaténation des plages est équivalente à $C$2:$H$14)
---> Count 78 Column 3 Columns.Count 2 Row 2 Rows.Count 9
2ème exemple
$C$2:$D$10,$H$2:$H$14
---> Count 31 Column 3 Columns.Count 2 Row 2 Rows.Count 9 (1ère area = $C$2:$D$10)
$H$2:$H$14,$C$2:$D$10 (simple inversion des plages de $C$2:$D$10,$H$2:$H$14)
---> Count 31 Column 8 Columns.Count 1 Row 2 Rows.Count 13 (1ère area = $H$2:$H$14)
Le code VBA qui met cela en évidence (voir le debug.print après exécution de la macro)
Les propriétés Count, Row, Column, Rows.Count, Columns.Count
d'une plage simple
ou d'une plage équivalente, constituée de la concaténation de plages simples
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 !!!.
1er exemple
$C$2:$H$14
---> Count 78 Column 3 Columns.Count 6 Row 2 Rows.Count 13
$C$2:$D$10,$H$2:$H$14,$C$11:$D$14,$E$2:$G$14 (la concaténation des plages est équivalente à $C$2:$H$14)
---> Count 78 Column 3 Columns.Count 2 Row 2 Rows.Count 9
2ème exemple
$C$2:$D$10,$H$2:$H$14
---> Count 31 Column 3 Columns.Count 2 Row 2 Rows.Count 9 (1ère area = $C$2:$D$10)
$H$2:$H$14,$C$2:$D$10 (simple inversion des plages de $C$2:$D$10,$H$2:$H$14)
---> Count 31 Column 8 Columns.Count 1 Row 2 Rows.Count 13 (1ère area = $H$2:$H$14)
Le code VBA qui met cela en évidence (voir le debug.print après exécution de la macro)
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
Dernière édition: