Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nombres de lignes dans une plage non-contigües

33 réponses
Avatar
Apitos
Bonjour =E0 tous,

J'ai la plage nomm=E9e "Limite" suivante :

=3DFeuil1!$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 =3D Range("Limite").Rows.Count
Debug.Print "Lignes =3D " & x

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


Merci.

10 réponses

1 2 3 4
Avatar
DanielCo
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.
Avatar
Patrick
Bonjour,

est ce un bug ou pas ?

Patrick


"DanielCo" a écrit dans le message de news:
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
Avatar
DanielCo
?
Daniel


Bonjour,

est ce un bug ou pas ?

Patrick


"DanielCo" a écrit dans le message de news:
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
Avatar
DanielCo
Et on peut faire plus complet si les plages distinctes risquent d'avoir
des lignes communes.
Daniel
Avatar
Patrick
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" a écrit dans le message de news:
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
Avatar
DanielCo
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" a écrit dans le message de news:
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
Avatar
GL
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.
Avatar
isabelle
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" a écrit dans le message de news:
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

Avatar
DanielCo
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
Avatar
DanielCo
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" a écrit dans le message de news:
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
1 2 3 4