XL 2016 Plages Continues et Discontinues, Areas (propriétés Count, Row, Column, Rows.Count, Columns.count)

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

crocrocro

XLDnaute Impliqué
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)
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

A
Réponses
3
Affichages
2 K
Alex6942
A
Retour