Tableau structuré - suppression de lignes
Bonjour,
Je voudrais supprimer les lignes d’un tableau structuré « Tableau » si ces lignes contiennent la valeur « A » dans la colonne « Classe » et le tout en VBA :
Je voudrais obtenir après traitement :
J’ai ce code VBA, mais qui a pour message d’erreur : « Erreur d’exécution ‘9’ : L’indice n’appartient pas à la sélection. »
Sub suppr()
Range("Tableau[Classe]").Select
Do Until ActiveCell.Value = ""
If ActiveCell.Value = "A" Then
R = ActiveCell.Row
Selection.ListObject.ListRows(R).Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub
Pouvez-vous m’aider, s’il vous plait ?
PS : Vous trouverez en pièce-jointe le classeur test.
Cordialement,
Bibou
Mets un debug.print R
par exemple ou sur un autre paramètre ... et tu devrais voir où cela cloche !
La raison est la suivante ...
Sub suppr()
Range("Tableau[Classe]").Select
Do Until ActiveCell.Value = ""
If ActiveCell.Value = "A" Then
R = ActiveCell.Row
MsgBox R
Selection.ListObject.ListRows(R).Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub
Le R est bien égal à 4, mais il supprime la 4ème ligne du tableau, alors que tu devrais tenir compte du fait que le tableau ne commence pas à la première ligne !
Il y a mélange entre la ligne en absolu et la ligne du tableau.
Donc à un moment, il a bien supprimé des lignes (pas les bonnes) et essaie de supprimer la ligne 4 qui devient en dehors des limites du tableau.
Bonjour bibou, bonjour le forum,
Peut-être comme ça :
Sub suppr()
Dim PL As Range 'déclare la variable PL
Dim I As Integer 'déclare la variable I
Set PL = Range("Tableau[Classe]") 'définit la plage PL
For I = PL.Rows.Count To 1 Step -1 'boucle de la dernière a la première ligne de PL
If PL(I).Value = "A" Then PL.ListObject.ListRows(I).Delete 'si la valeur vaut A supprime la ligne
Next I 'procaine ligne de la boucle
End Sub
Steelson a écrit :Mets un
debug.print R
par exemple ou sur un autre paramètre ... et tu devrais voir où cela cloche !Le R est bien égal à 4, mais il supprime la 4ème ligne du tableau, alors que tu devrais tenir compte du fait que le tableau ne commence pas à la première ligne !
Il y a mélange entre la ligne en absolu et la ligne du tableau.
Donc à un moment, il a bien supprimé des lignes (pas les bonnes) et essaie de supprimer la ligne 4 qui devient en dehors des limites du tableau.
Merci Steelson pour ces explications, elles me serviront pour un problème futur !
ThauThème a écrit :Sub suppr() Dim PL As Range 'déclare la variable PL Dim I As Integer 'déclare la variable I Set PL = Range("Tableau[Classe]") 'définit la plage PL For I = PL.Rows.Count To 1 Step -1 'boucle de la dernière a la première ligne de PL If PL(I).Value = "A" Then PL.ListObject.ListRows(I).Delete 'si la valeur vaut A supprime la ligne Next I 'procaine ligne de la boucle End Sub
Merci ThauThème, c'est la solution que je retiens !
Bonne continuation.
Bibou
je supprime les lignes de l'ancien