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!
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
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]"))
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