XL 2019 Range Union

vgendron

XLDnaute Barbatruc
Bonjour

j'ai un souci que je ne m'explique pas lorsque je selectionne une plage contigue ou pas

dans l'exemple ci joint
je set une plage simple (la plage Jaune)
je la selectionne (.select)
je vérifie le nombre de ligne (rows.count)
jusque la . ok

maintenant, si je set une plage avec la méthode union.. (la plage verte)
je selectionne la plage==> OK
MAIS le nombre de lignes m'indique que seule la première partie est prise en compte
qu'est ce qui cloche??
l'idée au final serait de pouvoir boucler sur les 7 lignes qu'est censée contenir cette plage fractionnée..
 

Pièces jointes

  • UnionRange.xlsm
    14.6 KB · Affichages: 3
Solution
Bonsoir vgendron, le fil

Et comme ceci
Code:
Sub test_ii()
Dim ZoneFractionnée As Range, lig%
With ActiveSheet
Set ZoneFractionnée = Union(.Range("A9:A11"), .Range("C2:C5"))
For i = 1 To ZoneFractionnée.Areas.Count
lig = lig + ZoneFractionnée.Areas(i).Rows.Count
Next
End With
MsgBox "La zone fractionnée contient: " & lig & " lignes.", vbInformation
End Sub

Staple1600

XLDnaute Barbatruc
Bonsoir vgendron, le fil

Et comme ceci
Code:
Sub test_ii()
Dim ZoneFractionnée As Range, lig%
With ActiveSheet
Set ZoneFractionnée = Union(.Range("A9:A11"), .Range("C2:C5"))
For i = 1 To ZoneFractionnée.Areas.Count
lig = lig + ZoneFractionnée.Areas(i).Rows.Count
Next
End With
MsgBox "La zone fractionnée contient: " & lig & " lignes.", vbInformation
End Sub
 

vgendron

XLDnaute Barbatruc
hello @Staple1600 et merci

ok.. je retrouve bien toutes les lignes
et ca veut donc dire que par défaut.. si on ne précise pas le areas, il prend la première
ca veut donc dire aussi que si je veux parcourir toutes les lignes, je ne peux pas avec une simple boucle..
il me faut une seconde boucle pour acceder aux Areas...
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

C'est exactement ce que dit l'aide de Microsoft : https://learn.microsoft.com/fr-fr/office/vba/api/excel.range.rows ;)

En particulier :
Microsoft à dit:
Lorsqu’elle est appliquée à un objet Range qui est une sélection multiple, cette propriété renvoie uniquement les lignes de la première zone de la plage. Par exemple, si l’objet Range someRange possède deux zones, A1:B2 et C3:D4,someRange.Rows.Count renvoie 2, et non 4. Pour utiliser cette propriété dans une plage pouvant contenir une sélection de plusieurs zones, testez Areas.Count afin de déterminer si la plage contient plusieurs zones. Si c’est le cas, passez en boucle sur chaque zone dans la plage
 

patricktoulon

XLDnaute Barbatruc
bonjour
union n'est pas forcement nécessaire pour une selection multiple
VB:
Sub test()
    Dim ZoneSimple As Range
    Dim ZoneFractionnée As Range
    Dim lig&, nbcel&, Area As Range

    With ActiveSheet
        Set ZoneSimple = .Range("A2:A8")
        ZoneSimple.Select
        MsgBox "nb de ligne de la zone simple:" & ZoneSimple.Rows.Count

        Set ZoneFractionnée = .Range("A9:A11,C2:C5")
        With ZoneFractionnée
            '.Select
            texte = .Address(0, 0) & vbCrLf & .Areas.Count & " areas" & vbCrLf
            For Each Area In .Areas
                lig = lig + Area.Rows.Count
                nbcel = nbcel + Area.Cells.Count
            Next
            texte = texte & lig & " lignes selectionnées" & vbCrLf & nbcel & " cellules"
        End With
    End With
    MsgBox texte

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch