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 :

suppression1

Je voudrais obtenir après traitement :

suppression2

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.

252suppression.xlsm (13.89 Ko)

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

354export-ligne-1.xlsm (42.63 Ko)
Rechercher des sujets similaires à "tableau structure suppression lignes"