Et oui, encore une liste sans doublons

  • Initiateur de la discussion Initiateur de la discussion Fanfan68
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
XL 2021 Macro
Réponses
6
Affichages
310
Réponses
8
Affichages
876
Réponses
10
Affichages
641
Retour