Nombres de lignes dans une plage non-contigües

Le
Apitos
Bonjour à tous,

J'ai la plage nommée "Limite" suivante :

=Feuil1!$G$13:$L$13;Feuil1!$G$17:$L$17



Quand je voudrais compter le nombre de lignes de cette plage, j'aurais touj=
ours 1, or il y a bien deux lignes :

'-
Sub test0()
Dim x As Long

x = Range("Limite").Rows.Count
Debug.Print "Lignes = " & x

End Sub
'-


Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #26340772
Bonjour,
Sub test()
Dim A As Range, Ctr As Long
For Each A In [Limite].Areas
Ctr = Ctr + A.Rows.Count
Next A
Debug.Print "Lignes : " & Ctr
End Sub
Cordialement.
Daniel


Bonjour à tous,

J'ai la plage nommée "Limite" suivante :

þuil1!$G$13:$L$13;Feuil1!$G$17:$L$17



Quand je voudrais compter le nombre de lignes de cette plage, j'aurais
toujours 1, or il y a bien deux lignes :

'-------------------------------
Sub test0()
Dim x As Long

x = Range("Limite").Rows.Count
Debug.Print "Lignes = " & x

End Sub
'-------------------------------


Merci.
Patrick
Le #26340774
Bonjour,

est ce un bug ou pas ?

Patrick


"DanielCo" mci6so$ju4$
Bonjour,
Sub test()
Dim A As Range, Ctr As Long
For Each A In [Limite].Areas
Ctr = Ctr + A.Rows.Count
Next A
Debug.Print "Lignes : " & Ctr
End Sub
Cordialement.
Daniel


Bonjour à tous,

J'ai la plage nommée "Limite" suivante :

þuil1!$G$13:$L$13;Feuil1!$G$17:$L$17



Quand je voudrais compter le nombre de lignes de cette plage, j'aurais
toujours 1, or il y a bien deux lignes :

'-------------------------------
Sub test0()
Dim x As Long

x = Range("Limite").Rows.Count
Debug.Print "Lignes = " & x

End Sub
'-------------------------------


Merci.







---
L'absence de virus dans ce courrier electronique a ete verifiee par le logiciel antivirus Avast.
http://www.avast.com
DanielCo
Le #26340781
?
Daniel


Bonjour,

est ce un bug ou pas ?

Patrick


"DanielCo" mci6so$ju4$
Bonjour,
Sub test()
Dim A As Range, Ctr As Long
For Each A In [Limite].Areas
Ctr = Ctr + A.Rows.Count
Next A
Debug.Print "Lignes : " & Ctr
End Sub
Cordialement.
Daniel
DanielCo
Le #26340780
Et on peut faire plus complet si les plages distinctes risquent d'avoir
des lignes communes.
Daniel
Patrick
Le #26340779
Je me disais quen en sélectionnant le range "limite" et demandant rows.count
ça irait , mais non ...

c'est pourquoi je demande si c'est un bug ?



"DanielCo" 54eca88a$0$2994$
Et on peut faire plus complet si les plages distinctes risquent d'avoir
des lignes communes.
Daniel





---
L'absence de virus dans ce courrier electronique a ete verifiee par le logiciel antivirus Avast.
http://www.avast.com
DanielCo
Le #26340784
C'est écrit comme ça dans le marbre de l'aide VBA ;-)
Donc, c'est pas un bug, c'est une remarque dans l'aide.
Daniel


Je me disais quen en sélectionnant le range "limite" et demandant rows.count
ça irait , mais non ...

c'est pourquoi je demande si c'est un bug ?



"DanielCo" 54eca88a$0$2994$
Et on peut faire plus complet si les plages distinctes risquent d'avoir des
lignes communes.
Daniel





---
L'absence de virus dans ce courrier electronique a ete verifiee par le
logiciel antivirus Avast.
http://www.avast.com
GL
Le #26340783
Le 24/02/2015 17:18, Patrick a écrit :
Bonjour,

est ce un bug ou pas ?

Patrick



Un bug de plus ? Microsoft vous expliquera que non, c'est une /feature/.

Cependant : Range("$G$13:$L$13,$G$17:$L$17").Rows est une collection
d'objets Range qui contient deux éléments (comme on peut le voir avec
un For Each par exemple), par conséquent :

Range("$G$13:$L$13,$G$17:$L$17").Rows.Count

devrait renvoyer le nombre l'éléments de la collection (à savoir 2).

C'est le design même d'Excel qui est en cause : l'objet Range étant une
merde absolue (désolé pour les 5 lettres, mais c'est mérité), l'objet
Range(...).Rows

est en fait l'objet Range(...) agrémenté d'un flag "Rows" qui sera
interprété différemment selon que le contexte est .Count, For Each etc.

En principe, Range(...).Rows devrait être l'objet Range avec des Areas
re-dessinnée de sorte que chaque Area soit une ligne. Mais ce n'est
évidemment pas le cas (pour des raisons, sans doute, d'optimisation,
car, comme on sait, VBA, c'est tellement ultra rapide... no comment).

Cordialement.
isabelle
Le #26340803
bonjour Patrick,

si tu fait une selection, le résultat est 2

Range("Limite").Select
Debug.Print Selection.Areas.Count

isabelle

Le 2015-02-24 11:38, Patrick a écrit :
Je me disais quen en sélectionnant le range "limite" et demandant rows.count
ça irait , mais non ...

c'est pourquoi je demande si c'est un bug ?



"DanielCo" 54eca88a$0$2994$
Et on peut faire plus complet si les plages distinctes risquent d'avoir
des lignes communes.
Daniel





---
L'absence de virus dans ce courrier electronique a ete verifiee par le logiciel antivirus Avast.
http://www.avast.com

DanielCo
Le #26340814
Le code "à l'épreuve des balles" serait donc (sous réserve) :
Sub test2()
With [Limite]
For i = .Areas(1).Row To .Areas(.Areas.Count).Row +
.Areas(.Areas.Count).Rows.Count - 1
If Not Intersect([Limite], Rows(i)) Is Nothing Then
Ctr = Ctr + 1
End If
Next i
End With
Debug.Print "Lignes : " & Ctr
End Sub
Daniel
DanielCo
Le #26340813
Bonsoir Isabelle,
Ca te donne le nombre de sous-plages, pas forcément le nombre de lignes
:
Sheets("Feuil1").Range("$G$13:$L$13,$G$17:$L$18").Name = "Limite"
Range("Limite").Select
Debug.Print Selection.Areas.Count
Daniel


bonjour Patrick,

si tu fait une selection, le résultat est 2

Range("Limite").Select
Debug.Print Selection.Areas.Count

isabelle

Le 2015-02-24 11:38, Patrick a écrit :
Je me disais quen en sélectionnant le range "limite" et demandant
rows.count
ça irait , mais non ...

c'est pourquoi je demande si c'est un bug ?



"DanielCo" 54eca88a$0$2994$
Et on peut faire plus complet si les plages distinctes risquent d'avoir
des lignes communes.
Daniel





---
L'absence de virus dans ce courrier electronique a ete verifiee par le
logiciel antivirus Avast.
http://www.avast.com
Publicité
Poster une réponse
Anonyme