Connaître le nombre de lignes d'un tableau

Magic_Doctor

XLDnaute Barbatruc
Bonjour à tous,

Existe-t-il un moyen (VBA) pour connaître le nombre total de lignes d'un tableau, que les lignes soient vides ou pas ?
La seule caractéristique de ces lignes est qu'elles sont toutes encadrées, comme c'est généralement le cas dans un tableau.

Merci pour toute réponse.
 

david84

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Bonsoir,
Parles-tu d'un tableau au sens où on l'entend sous la version 2007 d'Excel ou d'une plage de cellules mise en forme (qui n'est pas un tableau) ? Peut-être que tu pourrais nous joindre un fichier exemple pour comprendre ta demande.
A+
 

job75

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Bonjour Magic Doctor, salut David,

Par exemple cette macro :

Code:
Sub HauteurTableaux()
Dim cel As Range, plage As Range, mes$
For Each cel In ActiveSheet.UsedRange
  If cel.Borders.Value = 1 Then _
    Set plage = Union(cel, IIf(plage Is Nothing, cel, plage))
Next
For Each plage In plage.Areas
  mes = mes & "Plage " & plage.Address(0, 0) & " : " & plage.Rows.Count & " ligne(s)" & vbLf
Next
MsgBox mes, , "Hauteur des tableaux"
End Sub
Bien sûr il peut y avoir plusieurs tableaux dans la feuille.

D'où l'analyse des Areas (voir l'aide VBA).

A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Bonsoir david84, hola job75,

Quand je parle de tableau, je veux dire un ensemble de cellules encadrées sans solution de continuité.
La solution de job fait l'affaire mais analyse trop en détail la feuille.
Je m'explique. Dans la feuille il peut y avoir un ou plusieurs tableaux et éventuellement une ou des cellules encadrées isolées, bref comme dans n'importe quelle feuille.
Ce qui m'intéresse est de savoir combien il y a de lignes uniquement dans tel tableau.
Pour éviter les migraines vespérales et permettre facilement l'identification du tableau qui nous intéresse, j'ai nommé l'en-tête (en général tout tableau digne de ce nom possède un en-tête) de chaque tableau.
Dans la macro il suffirait de compter les lignes correspondant au tableau avec tel en-tête.
Ci-joint un exemple.
 

Pièces jointes

  • Tableau.xls
    30 KB · Affichages: 179
  • Tableau.xls
    30 KB · Affichages: 194
  • Tableau.xls
    30 KB · Affichages: 229

job75

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Re,

Avec le fichier tel qu'il est, ceci fonctionne bien :

Code:
Sub HauteurTableaux()
Dim cel As Range, plage As Range, titre$, lig As Variant
For Each cel In ActiveSheet.UsedRange
  If cel.Borders.Value = 1 Then _
    Set plage = Union(cel, IIf(plage Is Nothing, cel, plage))
Next
[M23:M30].ClearContents
For Each plage In plage.Areas
  titre = plage.Cells(1, 1).Offset(-1)
  If titre <> "" Then
    lig = Application.Match("*" & titre & "*", [K:K], 0)
    If IsNumeric(lig) Then Cells(lig, "M") = plage.Rows.Count
  End If
Next
End Sub
Il faut impérativement que l'on trouve "Tableau 1" et "Tableau 2" en K23 et K24...


A+
 

david84

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Re
puisque tu as Excel 2007, si tu définies tes plages en tableau, la fonction suivante te ramène le nombre de ligne de chaque tableau :
Code:
Function NbreLigneTableau(Nom As String) As Long
NomTableau = Nom
NbreLigneTableau = Range(NomTableau).Rows.Count
End Function
A+
 

Pièces jointes

  • Tableau (1).xls
    37 KB · Affichages: 232

Magic_Doctor

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Merci job75, effectivement ça marche bien.
Mais comment compter le nombre de ligne d'un seul tableau de la feuille à la fois, en utilisant, par exemple, comme indice le suffixe de la "SousZone" qui lui correspond (1 pour "SousZone1" --> 1er tableau, 2 pour "SousZone2" --> 2ème tableau), en paramétrant la macro :
Sub HauteurTableau (x as byte)
'x = suffixe d'une "SousZone"
.
.
.
End Sub
 

job75

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Re,

Sans vouloir faire de la lèche, je dirais que l'intuition de Magic Doctor est parfaite, comme d'habitude.

En effet il vaut bien mieux cette fonction macro :

Code:
Function HTABLO&(n As Byte)
Dim cel As Range
Application.Volatile
Set cel = Evaluate("SousZone" & n).Offset(1)
While cel.Offset(HTABLO).Cells(1, 1).Borders.Value = 1
  HTABLO = HTABLO + 1
Wend
End Function
Fichier joint.

A+
 

Pièces jointes

  • Hauteur Tableau(1).xls
    49 KB · Affichages: 206

david84

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Re
Job
OK David, mais notre ami n'est pas un débutant.
Peut-être mais j'ai déjà croisé sur ce forum des personnes qui n'étaient pas des débutants et qui ne savaient pas utiliser pleinement les potentialités liées aux tableaux et permises par la version 2007 d'Excel:rolleyes:.
S'il ne nomme pas ses tableaux, c'est qu'il a ses raisons...
peut-être, mais quelles sont-elles ? Sont-elles réellement "bonnes" ?
Mais bon ,je pense effectivement qu'il doit avoir ses raisons parce qu'il ne se facilite pas la tâche (penser à recopier la mise en forme de la ligne précédente alors qu'avec un tableau, pas besoin, possibilité d'utiliser la touche Tab pour créer automatiquement une nouvelle ligne, etc.).
En tous cas, bien vu ta fonction:cool:.
A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Bonsoir le fil,

¡Macanudo! job75, c'est exactement ce que je cherchais. Je n'ose pas montrer dans quelles complications tortueuses je m'étais engagé pour résoudre ce problème.
Voilà une fonction vraiment pratique qui en ravira plus d'un.

Pourquoi je ne nomme pas mes tableaux ? Car ceux-ci peuvent très changer de hauteur. Je voulais éviter d'avoir à changer le nom de chaque tableau (en fait conserver le même nom mais pour une plage plus vaste, donc devoir effacer le nom, puis sélectionner le tableau modifié, puis remettre le même nom... alouette...). Par cet artifice on s'évite tout simplement une corvée.

Otra vez, muchas gracias!
 

Magic_Doctor

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Non job75, je n'ai pas abandonné le fil "Toile de fond", mais je devais d'abord résoudre ce problème qui me turlupinait pour avancer dans "Toile de fond".
Donc je vais à présent reprendre ce fil avec des idées nouvelles.
 

david84

XLDnaute Barbatruc
Re : Connaître le nombre de lignes d'un tableau

Re
Pourquoi je ne nomme pas mes tableaux ? Car ceux-ci peuvent très changer de hauteur.
mais justement, le fait de transformer tes plages en tableau (j'utilise le terme de tableau au sens défini par la version 2007 d'Excel) t'évite ce type de désagrément (et d'autres encore). En fait, j'ai l'impression que tu confonds 2 procédés différents (mais peut-être me trompe-je ?):
- définir une plage dynamique de données : onglet formule=>groupe "noms définis"=>commande "définir un nom
- définir une plage en tant que tableau : onglet Insertion=>groupe "Tableaux"=>commande "tableau" (ce dont je te parle).
Mais bon, le plus important est que tu ais résolu ton problème grâce à la fonction de Job.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 304
Messages
2 087 068
Membres
103 453
dernier inscrit
Choupi