Listbox multiselect

Bonjour,

Dans un Userform, J'ai créé une Listbox à 2 colonnes dans lesquelles apparaissent les données (Nom et Prénom) de deux colonnes d'une feuille Excel. Dans les propriétés de la Listbox j'ai bien sélectionné multiselect. Lorsque je sélectionne plusieurs noms, seul le premier est pris en compte et je n'ai pas de message d'erreur pour autant.

Où se situe mon erreur

Je me sers de cette Listbox pour supprimer les lignes correspondantes aux clients.

Nom de l'Userform : FormulaireGestionClient

Nom de la Listbox : NomClientsEffacement

Sub Effacement()
'Activation de la feuille Liste Clients
    Worksheets("Liste Clients").Select
 'Selection du nom et prénom
        If (FormulaireGestionClient.NomClientsEffacement.ListIndex) = -1 Then
            MsgBox "Veuillez choisir le nom du client à supprimer de la liste ou cliquer sur le bouton fermer", vbCritical, "Supression"
        Exit Sub
        End If
        For i = 0 To FormulaireGestionClient.NomClientsEffacement.ListCount - 1
          If FormulaireGestionClient.NomClientsEffacement.Selected(i) = True Then
    Nom = FormulaireGestionClient.NomClientsEffacement.List(i, 0)
    Prenom = FormulaireGestionClient.NomClientsEffacement.List(i, 1)
    Reponse = MsgBox("Vous allez supprimer la fiche de  " & Prenom & " " & Nom, vbYesNo, "suppression")
        If Reponse = vbNo Then Exit Sub

'recherche de la celllule
    With Range("C6:C500")
    Set cellule = .Find(Nom, after:=Range("C500"))
    End With
    cellule.Select
      ActiveCell.Offset(0, 1).Select
        If Prenom <> ActiveCell.Value Then
                Do
                 ActiveCell.Offset(1, 0).Select
                Loop Until Prenom = ActiveCell.Value
         End If
         NumeroLigne = ActiveCell.Row
'suppression de la ligne
         For Each Feuille In Sheets(Array("Liste Clients", "Suivi Clients"))
         Feuille.Activate
         Feuille.Rows(NumeroLigne).Delete
       Next Feuille
       End If
       Next i
       Sheets("Liste Clients").Activate
End Sub

Salut,

Pourrais tu mettre le fichier stp?

Cdt

Bonjour,

Tout d'abord merci de te pencher sur mon pb.

Un peu d'explication sur le fonctionnement :

Dans l'onglet "Liste Clients", il y un bouton qui ouvre un formulaire.

Ce formulaire comporte 3 onglets dont un qui se nomme : effacement. C'est celui là qui me pose quelques soucis.

Lorsque l'on clique sur supprimer cela action la procédure "effacement" dans le module "EffacementClient"

Merci d'avance pour essayer de résoudre mon pb

182suivi-clients.zip (46.36 Ko)

Re

Je viens de m'y penchez pendant une petite demi-heure (désolé je n'ai pas beaucoup de temps).

> De une dans le fichier que tu m'a donné il n'y a pas cela :

Sub UserForm_Initialize()
With NomClientsEffacement
    .MultiSelect = fmMultiSelectMulti
End With
End sub

> De deux dans ton module effacement par de l'effacement tu as cela :

For i = 0 To FormulaireGestionClient.NomClientsEffacement.ListCount - 1

Si tu supprime une ligne tu va avoir un décalage ; ton i varie entre 0 et 5

si au i = 2 tu supprime une ligne forcement ta boucle va planter moi je ferai l'inverse avec un step -1 pour éviter les bugs de même pour toute suppression. après cela ne marche tjs pas et la je sèche je vais y penser

Je te tiens au jus si je trouve une solution, j'ai déjà fait ce genre chose mais je préfère les mettre sur les boutons plutôt qu'en module et j'utilise d'autre fonctions. Dis moi si tu veux un exemple des miennes.

Voilà mon code qui recherche un nom et supprime la ligne associé. Cela à l'air bien plus simple que le tiens. Je pense que tu peux t'en inspirer.

With Me.ListBox1
    For i = 0 To .ListCount - 1
        If .Selected(i) = True Then
            For j = 2 To Sheets("BDD").Cells(Rows.Count, 2).End(xlUp).Row ' dernière ligne la feuille BDD
                If Cells(j, 2).Value = .List(i) Then 'condition compare avec la ligne j de la colonne 2
                    Rows(j).Select
                    Selection.Delete Shift:=xlUp ' suppression de la ligne j
                End If
            Next j
        End If
    Next i
End With

Bonsoir,

Tout d'abord merci de te pencher sur mon problème.

Je me suis servi de ton exemple mais j'ai toujours le même pb. J'ai modifié en faisant un décompte mais j'ai toujours le même souci

For i = .ListCount - 1 To 0 Step -1

En faisant du pas à pas je m’aperçois que dès que la ligne correspondant au premier nom trouvé est supprimée, plus aucun nom dans la listbox n'est sélectionné. Pourquoi???

Je vais essayer de reprendre cela en faisant des tests sur un nouveau fichier.

Pour info : mon programme est peut-être un peu complexe mais c'est le moyen que j'ai trouvé pour sélectionné le nom et prénom qui se trouve dans deux colonnes dans la feuille "Liste Clients". Il faut bien que je compare les prénoms puisqu'il peut y avoir des frères et sœurs dans la liste ou plusieurs Dupont (en espérant qu'il n'ai pas le même prénom). Peut-être devrai-je partir en leur mettant un n° d'ID.

J'ai oublié de préciser que je ne suis pas un pro de la programmation mais seulement quelqu'un qui essaye de s'y intéresser.

J'ai créé un nouveau fichier avec une listbox pour supprimer les lignes en utilisant la procédure préconisé par AdrienP. Je rencontre le même problème.

Au lieu de supprimer des lignes, je copie les noms pour les mettre dans un autre cellule, cela fonctionne.

Je continue à chercher

Je suis un peu comme toi je m’intéresse juste.

Euh concernant ton problème je ne sais pas quoi répondre, je n'ai jamais fait de recherche avec les 2 colonnes d'une listbox.

Rechercher des sujets similaires à "listbox multiselect"