par , 22/04/2020 à 09h59 (3397 Affichages)
Salut.
Dans cette discussion, la demande consistait à pouvoir vider rapidement un tableau structuré en VBA.
La réponse générique que je donne est la suivante et fonctionne pour le classeur actif:
1 2 3
| Sub Table_Clear(Tablename As String)
If Not Range(Tablename).ListObject.DataBodyRange Is Nothing Then Range(Tablename).ListObject.DataBodyRange.Delete
End Sub |
Je préfère passer par la plage plutôt que par la feuille et le listobject ( Worksheets("Feuil1").ListObject("Tableau1") parce que c'est plus générique. Passer par la plage découple la table de données de la feuille qui la supporte, et le code peut donc continuer à fonctionner même après déplacement dans une autre feuille. De plus, l'utilisation du nom d'onglet n'est pas optimale dans ce cas.
Une solution pourrie a été proposée. Elle passe par le Range sans utiliser le listobject, et teste la première cellule du tableau pour éventuellement supprimer. Je passe sur le code sans déclaration, l'absurdité du test et le fait que la "solution" aurait au moins pu utiliser un argument plutôt que le nom en dur... (Y en a, j'vous jure). Je préfère toujours travailler avec les outils adéquats, et donc utiliser le ListObject du range plutôt que de passer uniquement par le range. Je le démontre dans ce billet qui donne la solution de comptage des lignes d'un tableau structuré.
Lorsque l'on manipule la structure de tables de données en VBA, il me semble pertinent de travailler avec le ListObject. Et l'on essaiera toujours de programmer de façon générique, ce qui permettra une réutilisation du code, une formalisation de son approche et une systématisation de codage.
Bon travail avec Excel et VBA