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..
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.
- Messages
- 4'091
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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 !