Supprimer un element d'une listbox et de la feuille

Bonjour,

J'ai une listbox chargé a partir de la colonne B de ma feuille Excel.

Je voudrais rédiger un code qui me permet de supprimer l'élément de la listbox et de la feuille.

J'ai rédigé ce code, mais ca fonctionne pas rien ne se supprime de ma feuille ni de la liste :

Private Sub CommandButton23_Click()
Dim ws_Lame As Worksheet
Dim Modele As String
Dim Plage As Range
Dim Trouve As Range
Modele = "Liste_Lame_" & Me.TextBox1.Value
Set ws_Lame = ActiveWorkbook.Worksheets(Modele)
dl = ws_Lame.Range("A65530").End(xlUp).Row

If Me.ListBox_Lames.ListIndex = -1  Then
    MsgBox ("Veuillz choisir une lame a supprimer")
Else
    Lame = Me.ListBox_Lames.Value
    Set Plage = ws_Lame.Columns(2)     
    Set Trouve = Plage.Cells.Find(what:=Lame)     

    If MsgBox("Etes vous sur de vouloir suprimer ?", vbYesNo) = vbYes Then
        If Trouve Is Nothing Then
            MsgBox ("erreur: Lame non trouvée!")
        Else
            Range(Cells(Trouve.Row, Trouve.Column), Cells(Trouve.Row + 1, Trouve.Column)).Select
                Selection.Delete (xlShiftUp)
        End If
end if 
end if 
End Sub

Bonjour, je ne pense pas que l'on puisse supprimer des données d'une listbox qui elle même est en cours d'utilisation.

Bonjour.

Aurais-tu un fichier à nous soumettre stp ?

Bonjour,

si la liste de la ListeBox est issue de votre feuille, une fois la ligne voulue supprimée il faut réinitialiser votre ListeBox pour qu'elle prenne en compte cette suppression, non ?

@ bientôt

LouReeD

Veuillez voir le fichier joint sur la feuille "2" :

51listbox-maj.xlsm (34.18 Ko)

@ bientôt

LouReeD

Remplacez le code par celui-ci :

Option Explicit
Public EnCours As Boolean

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    On Error Resume Next
    If EnCours = True Then Exit Sub
    Dim Trouve As Range
    Set Trouve = [Tableau1].Cells.Find(what:=ListBox1.List(ListBox1.ListIndex))
    If Not Trouve Is Nothing Then
        EnCours = True
        Feuil2.Rows(Trouve.Row).EntireRow.Delete
        ListBox1.RowSource = [Tableau1[liste source]].Address
        Me.Repaint
        EnCours = False
    End If
End Sub

Private Sub UserForm_Initialize()
    Dim Cpt As Integer
    With ListBox1
        .RowSource = [Tableau1[liste source]].Address
    End With
End Sub

Comme cela, même le dernier intitulé peut être effacé...

La procédure est liée au Up du bouton gauche de la souris, donc le processus est le suivant :
MouseMove au dessus de la ListeBox, clic gauche pour sélectionner un item, item sélectionné passe en bleu, au lâché de ce clic le code de suppression est lancé, suppression de la ligne de la feuille, puis mise à jour de la ListeBox avec les nouvelles données mises à jour, on "repaint" le USF afin que la liste se mette également "à jour" au niveau de sa longueur.

La variable EnCours évite de tomber dans une boucle "infernale" !
Le "On Error Resume Next" c'est pour éviter une erreur sur la ListeBox lorsque celle-ci devient vide...

@ bientôt

LouReeD

Bonjour le fil,

Pour faire simple j'ai modifié mon code :

Private Sub CommandButton23_Click()
Dim ws_Lame As Worksheet
Dim Modele As String
Dim Plage, Plage1, Plage2, Plage3 As Range
Dim Trouve, Trouve1, Trouve2, Trouve3 As Range
Dim L, L1, L2, L3, L4 As Integer

Modele = "Liste_Lame_" & Me.TextBox1.Value
Set ws_Lame = ActiveWorkbook.Worksheets(Modele)
dl = ws_Lame.Range("A65530").End(xlUp).Row

If Me.ListBox_Lames.ListIndex = -1 Then
    MsgBox ("Veuillez choisir une lame a supprimer")
Else
    L = ListBox_Lames.ListIndex + 2
    Lame = Me.ListBox_Lames.Value
    Set Plage = ws_Lame.Columns(2)
    Set Trouve = Plage.Cells.Find(what:=Lame)
    If MsgBox("Etes vous sur de vouloir suprimer ?", vbYesNo) = vbYes Then
        If Trouve Is Nothing Then
        Else
        ws_Lame.Range("B" & L).Delete shift:=xlUp

        End If
    End If
ListBox_Lames.List = ws_Lame.Range("B2:B" & dl).Value
End If
End sub 

On selectionne un element de la listbox

On clique sur un bouton pour supprimer l'element

L'element est supprimé de la listbox et de la feuille aussi

Mise a jour de la listbox

Merci a tous pour vos propositions

Bonsoir,

la solution sans bouton ne vous convient pas ? Et bien tant pis pour moi...

@ bientôt

LouReeD

Rechercher des sujets similaires à "supprimer element listbox feuille"