Supprimer ligne tableau depuis listbox

Bonjour,

Je souhaite supprimer une ligne de mon tableau depuis une listbox d'un userform. J'ai tenté de nombreux codes, certains avaient l'air de fonctionner et le lendemain plus.. Franchement frustrant..

capture

Je sélectionne la ligne dans la listbox et avec le numéro de l'id, il le retrouve dans mon tableau et supprime la ligne du tableau.

Comme codes essayer, j'avais ces 2 ci par exemple

Private Sub SCBsupprimer_Click()
Dim PL As Range
Dim I As Integer

Set PL = Range("TABsortie")
For I = PL.Rows.Count To 1 Step -1

For k = 0 To LBsortie.ListCount - 1
    If LBsortie.Selected(k) And LBsortie.List(k, 0) <> "" Then
        'Sheets("SORTIE").Range("TABsortie").Find(LBsortie.List(k, 0)).Select
        PL.ListObject.ListRows(I).Delete
        LBsortie.RemoveItem (k)
        LBsortie.Selected(k) = False
        ActiveSheet.PivotTables("TCDS").RefreshTable
    Exit Sub
    End If
Next k
Next I
End Sub

Ca me semble bien long pour un truc aussi simple mais bon..

et

For i = 0 To LBsortie.ListCount - 1
    If LBsortie.Selected(i) And LBsortie.List(i, 0) <> "" Then
        Sheets("SORTIE").Range("TABsortie").Find(LBsortie.List(i, 0)).Delete
        LBsortie.RemoveItem (i)
        LBsortie.Selected(i) = False
    End If
Next i

Merci,

Bonjour Thrrybo,

Ce n'est jamais bon de supprimer une ligne en fonction de l'index de la ListBox

Ce qu'il faut faire, c'est :
- récupérer le numéro d'ID sélectionner
- chercher la ligne de ce numéro d'ID dans la feuille
- supprimer cette ligne

Voilà

Bonjour Bruno,

C'est ce que je fais avec cette ligne du premier code non ?

Sheets("SORTIE").Range("TABsortie").Find(LBsortie.List(k, 0)).Select

Mais ensuite c'est pour la supprimer que ça pose problème

Soit ça ne fait rien soit ça met une erreur.

Bonjour,

ce code devrait fonctionner en mettant le nom de la colonne concernée par la recherche du numéro d'ID présent dans la ListBox

For k = 0 To LBsortie.ListCount - 1
    If LBsortie.Selected(k) And LBsortie.List(k, 0) <> "" Then
        With PL.ListObject
            I = Application.Match(LBsortie.List(k, 0), .ListColumns("nom_colonne").DataBodyRange, 0)
            .ListRows(I).Delete
        End With
        LBsortie.RemoveItem (k)
        LBsortie.Selected(k) = False
        ActiveSheet.PivotTables("TCDS").RefreshTable
        Exit Sub
    End If
Next k

NB : Voir mon Tuto sur le code relatif à un tableau structuré : https://forum.excel-pratique.com/astuces/tableau-structure-instructions-vba-specifiques-a-cet-objet-...

Bonjour Thev,

Il m'indique "incompatibilité de type sur

I = Application.Match(LBsortie.List(k, 0), .ListColumns("ID").DataBodyRange, 0)

Mais sur l'autre code, je trouve bien l'id dans le tableau avec

Sheets("SORTIE").Range("TABsortie").Find(LBsortie.List(k, 0)).Select

C'est vraiment la suppression qui me pose problème.

Dans ton tuto c'est ça qu'il me faut :

'// suppression d'une ligne d'indice i

TS.ListRows(i).Delete

J'ai déjà essayé de définir i avec ceci mais sans succès

I = Activecell.Row

Je peux peut-être simplement mettre

ActiveCell.delete 

Ca poserait des problèmes ?

Re,

J'ai fait comme cela et ça fonctionne..

Dim lo As ListObject, lr As ListRow, lRowInTable As Long

For k = 0 To LBsortie.ListCount - 1
    If LBsortie.Selected(k) And LBsortie.List(k, 0) <> "" Then
        Sheets("SORTIE").Range("TABsortie").Find(LBsortie.List(k, 0)).Select

            Set lo = ActiveCell.ListObject
            lRowInTable = ActiveCell.Row - lo.HeaderRowRange.Row
            Set lr = lo.ListRows(lRowInTable)
            lr.Range.Select
            Selection.Delete

        LBsortie.RemoveItem (k)
        LBsortie.Selected(k) = False
        ActiveSheet.PivotTables("TCDS").RefreshTable
    Exit Sub
    End If
Next k

Merci !

Rechercher des sujets similaires à "supprimer ligne tableau listbox"