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 SubCa 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 iMerci,
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)).SelectMais ensuite c'est pour la supprimer que ça pose problème
Soit ça ne fait rien soit ça met une erreur.
- Messages
- 4'199
- 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 kNB : 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)).SelectC'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).DeleteJ'ai déjà essayé de définir i avec ceci mais sans succès
I = Activecell.RowJe 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 kMerci !