Et oui, encore une liste sans doublons

F

Fanfan68

Guest
Bonjour à tous,

Désolé mais je n'ai pas réussi à trouver sur le forum une solution à mon problème détaillé ci-dessous :

J'ai une listebox qui est alimentée par par des données se trouvant sur une feuille.

A chaque fois que je click sur une ligne de cette listbox1, une seconde listbox2 est alimentée par la valeur de la listbox1.

Mon souci est que si je click sur une ligne de ma listbox1 dont la valeur existe déja sur ma listbox2, celle-ci sera tout de même rajouté, je voudrai savoir comment faire pour ne pas ajouter dans ma listbox2 une valeur déja existante.

Merci à tous
 

Hervé

XLDnaute Barbatruc
Bonsoir fanfan, le forum

Il te faut d'abord boucler sur chaque item de la listbox2 afin de vérifier si celui-ci n'y est pas déjà.

si il y est on sort, sinon on le rajoute.


Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Integer

For i = 0 To ListBox2.ListCount - 1
       
If ListBox2.List(i) = ListBox1 Then Exit Sub
Next i

ListBox2.AddItem ListBox1
'ListBox1.RemoveItem (ListBox1.ListIndex)'utilise cette ligne si tu veux aussi supprimer l'item de la listbox 1
End Sub


salut
 

Hervé

XLDnaute Barbatruc
Bonjour fanfan, le forum

Je n'est pas de solution pour ta demande de suppression par 'del'.

l'evenement keypress n'intercepte pas la touche 'suppr', et la méthode onkey ne fonctionne pas avec les userforms (ou je ne connais pas la syntaxe, ce qui me semble fort plausible).

Tu pourrais éventuellement passer par une api pour detecter l'appui sur cette touche, mais c'est utiliser un marteau pilon pour ecraser une mouche.

sinon, 2 solutions de substitutions.

Utiliser l'evenement double click de la listbox.

ou

Utiliser une autre touche que la touche suppr, exemple ci-dessous avec la touche retour arrière.


Dim indexl As Integer
Private Sub ListBox1_Click()
indexl = ListBox1.ListIndex
End Sub

Private Sub ListBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 8 Then
       
With ListBox1
                .RemoveItem indexl
                .ListIndex = indexl
       
End With
End If
End Sub


salut
 
F

Fanfan68

Guest
Re bonjour Hervé et merci pour la rapidité de ta réponse.

En fait, c'est un peu ce que j'ai fais mais avec la barre d'espace simplement.

Private Sub ListBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
ListBox2.RemoveItem (ListBox2.ListIndex)
End Sub

Merci
 

Discussions similaires

Réponses
8
Affichages
453

Statistiques des forums

Discussions
312 400
Messages
2 088 083
Membres
103 710
dernier inscrit
amin Saadaoui