Microsoft 365 Commande VBA pour supprimer plusieurs lignes d'un tableau structuré

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

BenHarber

XLDnaute Occasionnel
Bonjour Le Forum,
Une petite demande (de confirmation) SVP.

Je souhaite supprimer par macro les lignes 16 à 19 d'un tableau structuré "Tableau1".
La seule solution que j'ai trouvée est de boucler à l'envers sur les lignes à supprimer de mon TS du type :
For i = 19 to 16 Step -1
Feuil1.ListObjects("Tableau1").ListRows(i).Delete
Next i

Et a priori, je NE PEUX PAS exécuter cette commande en une seule ligne (du type "Feuil1.ListObjects("Tableau1").ListRows("16:19").Delete).

Vous confirmez ? 🤔

Merci d'avance pour vos retours...
 
bonjour

essaie en passant par le resize
Feuil1.ListObjects("Tableau1").ListRows(16).range.resize(4).Delete
Bonjour @vgendron ,
Merci pour ta réponse.
Tu as raison : il faut bien passer par la commande "Resize". 👍🏻
J'ai simplement ajusté la ligne de départ (je suppose qu'il ne faut pas compter l'entête de mon TS donc partir de la 15è ligne (données)).
Ce qui donne : Feuil1.ListObjects("Tableau1").ListRows(15).Range.Resize(4).Delete

Merci beaucoup : je vais conserver cette astuce dans ma musette !
 
Dernière édition:
Re,

Une procédure générique : LstoSupprLigne TS , NumLigDeb , NumLigFin
qui, je pense, effectue toutes les vérifications nécessaires et qui permet de supprimer par exemple :

les lignes entre 16 et 19LstoSupprLigne Sheets("Feuil1").ListObjects("Tableau1"), 16, 19
les lignes depuis la 1ère jusqu'à 19LstoSupprLigne Sheets("Feuil1").ListObjects("Tableau1"), , 19
les lignes depuis 16 jusqu'à la dernière ligneLstoSupprLigne Sheets("Feuil1").ListObjects("Tableau1"), 16
toutes les lignesLstoSupprLigne Sheets("Feuil1").ListObjects("Tableau1")

nota 1 : TS est le tableau structuré, NumLigDeb est la ligne de début, NumLigFin est la ligne de fin. Dans certains cas, NumLigDeb et/ou NumLigDeb peuvent être omis.

nota 2 : les lignes sont comptées à partir de la première ligne des données


Le code à mettre dans un module ordinaire :
VB:
Sub LstoSupprLigne(TS As ListObject, Optional NumLigDeb& = 1, Optional NumLigFin& = 999999999)
Dim n&
   If TS.ListRows.Count = 0 Then Exit Sub
   If NumLigDeb > NumLigFin Then n = NumLigDeb: NumLigDeb = NumLigFin: NumLigFin = n
   If NumLigDeb < 1 Then NumLigDeb = 1
   If NumLigDeb > TS.ListRows.Count Then Exit Sub
   If NumLigFin > TS.ListRows.Count Then NumLigFin = TS.ListRows.Count
   TS.DataBodyRange.Rows(NumLigDeb & ":" & NumLigFin).Delete
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
905
Retour