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 SubSalut,
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
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 - 1Si 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 WithBonsoir,
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 -1En 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
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.