Compter le nombre de lignes d'une sélection

cocolina

XLDnaute Nouveau
Bonjour,

J'ai besoin de compter le nombre de lignes d'un tableau. L'utilisateur peut directement faire sa sélection (ex : $A$1:$A$20) ou sélectionner la colonne si le tableau est grand ($A:$A).
De plus, ce tableau peut avoir des lignes vides au milieu.

J'ai essayé différentes façons :

Code:
nb_row = Application.WorksheetFunction.CountA(Range(masélection)
==> Ne me compte que les cellules non-vides car ne prend pas en compte les cellules vides. Le résultat est donc incorrect si j'ai une ou plusieurs lignes vides au milieu de mon tableau.

Code:
nb_row = Range(masélection).Rows.Count
==> Dans le cas d'une sélection "$A:$A", le résultat est forcément 65536.

Quelqu'un aurait-il une autre idée ?

J'espère avoir été assez claire !

Chloé.
 

WUTED

XLDnaute Occasionnel
Re : Compter le nombre de lignes d'une sélection

Bonjour,

Je ne sais pas si ça peut t'aider mais :
Code:
Range(Split(masélection.Address,"$")(3) & Split(masélection.Address,"$")(4)).End(xlUp).Row
Te renverra normalement le nombre de lignes non-vides dans ta sélection. Les lignes vides au milieu du tableau seront considérées comme des lignes non-vides.
 

WUTED

XLDnaute Occasionnel
Re : Compter le nombre de lignes d'une sélection

Re, salut tbft,

j'me suis trompé dans le sens où je pensais que maselection est une plage de cellule alors qu'il s'agit en fait d'une chaîne de caractères, en enlevant les .Address, cela fonctionne chez moi.
Je découpe donc ta chaîne de caractère avec des Split pour récupérer seulement la cellule de fin, par exemple en ayant:

"$A$1:$A$20" aprés l'avoir traité avec split, j'ai "A20".

Ainsi j'obtiens :

Code:
 Range("A20").End(xlUp).Row

Cette fonction va remonter les cellules à partir de A20 et s'arrêter à la première cellule non-vide.
 

job75

XLDnaute Barbatruc
Re : Compter le nombre de lignes d'une sélection

Bonsoir cocolina, WUTED, tbft,

C'est un problème intéressant, essayez cette macro :

Code:
Sub Hauteur()
Dim plage As Range, r As Range, premlig&, derligplus1&
'---determination de la plage (possibilité de sélection multiple)--
Set plage = Selection.Areas(1)
For Each r In Selection.Areas
  Set plage = Range(r, plage)
Next
'---1ère ligne remplie---
Set r = plage.Find("*", , xlFormulas, , xlByRows)
If r Is Nothing Then GoTo 1
premlig = r.Row
If Not IsEmpty(plage(1)) Then premlig = plage.Row
'---dernière ligne remplie---
Set r = plage.Find("*", plage(1), , , xlByRows, xlPrevious)
derligplus1 = r.Row + 1
'---hauteur---
Intersect(plage, Rows(premlig & ":" & derligplus1 - 1)).Select
1 MsgBox derligplus1 - premlig, , "Hauteur"
End Sub
Notez que la sélection peut être multiple.

A+
 
Dernière édition:

cocolina

XLDnaute Nouveau
Re : Compter le nombre de lignes d'une sélection

Bonjour Wuted, job75, tbft, le forum,

Le UBound me renvoi 65536 dans le cas d'une sélection A:A.
La proposition de job75 ressemble un peu à du chinoi pour moi :rolleyes:

J'ai finalement trouvé une solution :
nbRow = Range(maSélection).End(xlDown).Row

C'est un peu du bricolage mais ça marche. Par contre je ne comprend pas vraiment ce que fait le End(xlDown), quelqu'un saurait m'expliquer ?

Un grand merci !
 

WUTED

XLDnaute Occasionnel
Re : Compter le nombre de lignes d'une sélection

Bonjour,

Il fait à peu prés la même chose que le End(xlUp) que je t'avais mis. La paramètre de End indique simplement la direction du déplacement.
Code:
Range("A1").End(xlDown).Row
et
Code:
Range("A65536").End(xlUp)
te renverront le plus souvent le même résultat.Seulement, par convention je suppose, j'ai toujours lu qu'on partait le plus souvent du bas de la feuille et qu'on utilisait donc au maximum la deuxième solution.
 

job75

XLDnaute Barbatruc
Re : Compter le nombre de lignes d'une sélection

Re,
La proposition de job75 ressemble un peu à du chinoi pour moi :rolleyes:

C'est de l'anglais, et de niveau élémentaire.

Si vous essayez de lire 30 secondes la macro, vous verrez qu'elle recherche la 1ère ligne remplie et la dernière ligne remplie de la sélection.

Ce qui permet de connaître la hauteur du tableau sélectionné.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 111
dernier inscrit
Eric68350