OVH Cloud OVH Cloud

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,
Peut-être ça :
Sub test2()
Dim Plage As Range, A As Range
Set Limite = Range("A10:C10,A1:C3")
Set Plage = [Limite]
For Each A In [Limite].Areas
Set Plage = Union(Plage, A.EntireRow)
Next A
For Each A In Plage.Areas
Ctr = Ctr + A.Rows.Count
Next A
Debug.Print "Lignes : " & Ctr
End Sub
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
DanielCo
Bonjour Jacquouille,
Regarde ma réponse d'aujourd'hui. Je pense qu'elle doit fonctionner
quel que soit le cas de figure.
Cordialement.
Daniel


Hello Isabelle, Daniel, ... et les autres, trop nombreux à citer,

Cas 1 - Si j'ai une plage A1:C5 et une seconde E3:F10 ... (plages séparées)
quid du nb de lignes ?
Cas 2 - Si A1:C5 et une seconde B3:F10 ... (plages imbriquées) quid du nb de
lignes?

Peut-on faire ce jeux avec les colonnes?
-----------
cas 1: x lignes et y colonnes
cas 2: x lignes et y colonnes
------------
De quel calibre sont tes balles ? -))

Jacquouille, pas vraiment compétent sur ces Areas

" Le vin est au repas ce que le parfum est à la femme."


"DanielCo" a écrit dans le message de groupe de discussion :
mcikbf$map$

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


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com
Avatar
Apitos
Bonjour,


Mais je ne vois pas ce que vous voulez faire avec .Copy : sur Excel,
quand vous sélectionnez une plage de plusieurs zones p.ex. votre
G13:L13, G17:L17
initial (en utilisant la souris et CTRL) et que vous faites
copier/coller, le collage résultant est bien sur deux lignes
adjacentes...

Au départ, vous vouliez le nombre de lignes...


Au départ, je voudrais calculer le nombre de lignes pour chaque zone cons tituante d'une plage nommée de cellules non-contigües, pour pourvoir le s copier/coller dans un autre endroit dans la feuille pour constituer un ta bleau de plusieurs plages nommées superposées qui repondent à certain s critères.

Comme mes plages nommées sont souvent constituées de deux zones, je pro cède comme suit :

1) La première copie se fait sur la premiere ligne, qui est toujours l'en tete de la plage nommée (Areas(1))

2) Ensuite on copie le reste à partir de la deuxième ligne Areas(2)


Cet exemple fonctionne pour ce cas, mais je ne sais s'il y a d'autres cas d e figure qu'y s'appliquent :

http://cjoint.com/?EBzmS1UrUZf
Avatar
DanielCo
Bonjour,
Je ne sais pas si la réponse a déjà été donnée par quelqu'un. Pour
compter le nombre de lignes de chaque sous-plage :
Sub test2()
Dim A As Range
Set Limite = Range("A10:C10,A1:C3")
For Each A In [Limite].Areas
Debug.Print "Lignes : " & A.Rows.Count
Next A
End Sub
Daniel


Bonjour,


Mais je ne vois pas ce que vous voulez faire avec .Copy : sur Excel,
quand vous sélectionnez une plage de plusieurs zones p.ex. votre
G13:L13, G17:L17
initial (en utilisant la souris et CTRL) et que vous faites
copier/coller, le collage résultant est bien sur deux lignes
adjacentes...

Au départ, vous vouliez le nombre de lignes...


Au départ, je voudrais calculer le nombre de lignes pour chaque zone
constituante d'une plage nommée de cellules non-contigües, pour pourvoir les
copier/coller dans un autre endroit dans la feuille pour constituer un
tableau de plusieurs plages nommées superposées qui repondent à certains
critères.

Comme mes plages nommées sont souvent constituées de deux zones, je procède
comme suit :

1) La première copie se fait sur la premiere ligne, qui est toujours l'entete
de la plage nommée (Areas(1))

2) Ensuite on copie le reste à partir de la deuxième ligne Areas(2)


Cet exemple fonctionne pour ce cas, mais je ne sais s'il y a d'autres cas de
figure qu'y s'appliquent :

http://cjoint.com/?EBzmS1UrUZf
Avatar
Jacquouille
Ben, chez moi, rien ne se passe.
j'ai inscrit des trucs dans les cel A1:C10
Puis, j'ai changé ta ligne: Debug.Print "Lignes : " & Ctr
par msgbox "Lignes : " & Ctr
Et il m'affiche 10.
Moralité, on n'additionne pas le nb de ligne de chaque plage, mais on compte
les lignes occupées. Dans ce cas, les 3 lignes de A1:C3 ne comptent pas
puisque déjà incluses dans A1:C10 et ce, quelque soit le nb de colonnes
utilisées.

Ai-je vu juste?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"DanielCo" a écrit dans le message de groupe de discussion :
mck92n$liu$

Bonjour,
Peut-être ça :
Sub test2()
Dim Plage As Range, A As Range
Set Limite = Range("A10:C10,A1:C3")
Set Plage = [Limite]
For Each A In [Limite].Areas
Set Plage = Union(Plage, A.EntireRow)
Next A
For Each A In Plage.Areas
Ctr = Ctr + A.Rows.Count
Next A
Debug.Print "Lignes : " & Ctr
End Sub
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 électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
DanielCo
Ce qu'on cherche à compter, c'est le nombre de lignes de chaque plage
d'un seul tenant. C'est le cas de A1:C10; et il y a bien 10 lignes (on
ne cherche pas à savoir si elles sont remplies).
Cordidalement.
Daniel


j'ai inscrit des trucs dans les cel A1:C10
Avatar
Jacquouille
Re
J'ai très difficile de suivre.
=lignes(a1:c10) me donne 10 .....
=lignes(playa) me donne 10 aussi si je baptise A1:C10 du nom de playa
si playa1 = (A1:C10) et playa2=(a1:f15)
=lignes(playa1:playa2) me donne 15
si playa1=(A1:C10) et playa3 = (d12:f15)
me donne 15. donc il calcule a1:f15
si je fais =lignes(playa1)+lignes(playa3), il me donne 14, ce qui est bien
le nombre de lignes utilisées.


Vamos a la playa .....

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"DanielCo" a écrit dans le message de groupe de discussion :
mckmbf$sua$

Ce qu'on cherche à compter, c'est le nombre de lignes de chaque plage
d'un seul tenant. C'est le cas de A1:C10; et il y a bien 10 lignes (on
ne cherche pas à savoir si elles sont remplies).
Cordidalement.
Daniel


j'ai inscrit des trucs dans les cel A1:C10




---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
GL
Le 25/02/2015 15:59, Jacquouille a écrit :
Re
J'ai très difficile de suivre.
=lignes(a1:c10) me donne 10 .....
=lignes(playa) me donne 10 aussi si je baptise A1:C10 du nom de playa
si playa1 = (A1:C10) et playa2=(a1:f15)
=lignes(playa1:playa2) me donne 15
si playa1=(A1:C10) et playa3 = (d12:f15)
me donne 15. donc il calcule a1:f15



Normal puisque selon la syntaxe des adresses,
playa1:playa3 vaut A1:F15 dans ce cas.

si je fais =lignes(playa1)+lignes(playa3), il me donne 14, ce qui est
bien le nombre de lignes utilisées.



oui mais si vous faites lignes(playa1)+lignes(playa1) vous aurez 20.
Le problème, c'est quand les lignes se recouvrent.

Vamos a la playa .....



e besame mucho !


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"DanielCo" a écrit dans le message de groupe de discussion :
mckmbf$sua$

Ce qu'on cherche à compter, c'est le nombre de lignes de chaque plage
d'un seul tenant. C'est le cas de A1:C10; et il y a bien 10 lignes (on
ne cherche pas à savoir si elles sont remplies).
Cordidalement.
Daniel


j'ai inscrit des trucs dans les cel A1:C10




---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com

Avatar
DanielCo
Le problème, c'est quand les lignes se recouvrent.



Non apparemment, plus maintenant, puisqu'il s'agit de recopier les
sous-plages. (voir message d'aujourd'hui 12:36:15)
Daniel
Avatar
GL
Le 25/02/2015 19:46, DanielCo a écrit :
Le problème, c'est quand les lignes se recouvrent.



Non apparemment, plus maintenant, puisqu'il s'agit de recopier les
sous-plages. (voir message d'aujourd'hui 12:36:15)
Daniel



Oui mais les sous-plages (Areas) peuvent se recouvrir.

Il n'est pas interdit de faire : Range("A1:A3,A1:A3")
qui contient deux Areas.

Bien qu'avec la souris, ce ne semble pas être possible...
1 2 3 4