web-dev-qa-db-fra.com

VBA: Comptage des lignes dans une table (objet de liste)

J'essaie d'écrire un VBA dans Excel qui peut prendre le nom d'un tableau (objet liste) en tant que paramètre et renvoyer le nombre de lignes.

Ce qui suit fonctionne, mais ne me permet pas de passer une chaîne avec le nom de la table.

MsgBox ([MyTable].Rows.Count)

Ce qui suit donne l'erreur: 

Objet requis

v_MyTable = "MyTable"
MsgBox (v_MyTable.Rows.Count)

Ce qui suit donne l'erreur: 

Variable d'objet ou variable de bloc avec non définie

v_MyTable_b = "[" & "MyTable" & "]"
MsgBox(v_MyTable_b.Rows.Count)

J'ai aussi essayé de travailler avec ListObjects, que je connais pour la première fois. Je reçois l'erreur: 

L'objet ne prend pas en charge cette propriété ou méthode

Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("MyTable")
MsgBox(tbl.Rows.Count)

Merci pour toute aide!

10
user2412489

Vous devez aller plus loin dans ce que vous récupérez.

Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("MyTable")
MsgBox tbl.Range.Rows.Count
MsgBox tbl.HeaderRowRange.Rows.Count
MsgBox tbl.DataBodyRange.Rows.Count
Set tbl = Nothing

Plus d'informations à:

Interface ListObject
Propriété ListObject.Range
Propriété ListObject.DataBodyRange
Propriété ListObject.HeaderRowRange

16
user4039065

Vous pouvez utiliser ceci:

    Range("MyTable[#Data]").Rows.Count

Vous devez faire la distinction entre une table comportant une ligne de données ou aucune donnée, car le code précédent renverrait "1" pour les deux cas . Utilisez ceci pour tester une table vide:

    If WorksheetFunction.CountA(Range("MyTable[#Data]"))
3
Jalal

Vous pouvez utiliser:

Sub returnname(ByVal TableName As String)

MsgBox (Range("Table15").Rows.count)

End Sub

et appelez la fonction comme ci-dessous

Sub called()

returnname "Table15"

End Sub
0
Sangamesh B M