Détecter doublons sur listbox

Fermé
sormick - Modifié par sormick le 18/02/2015 à 11:22
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 18 févr. 2015 à 19:48
Bonjour,
Je souhaiterais détecter plusieurs valeurs en doublon qui ont déjà été validées dans une listbox lorsqu'on clique sur la valeur dans la listbox. S'il y a un ou plusieurs doublons détectés alors un msgbox s'affiche.
Voici un code vba que j'ai trouvé mais ça ne marche absolument pas. Je suis débutant en vba.
Dim i As Long
Dim j As Long
With ListBox2
For i = 0 To .ListCount - 1
For j = .ListCount To (i + 1) Step -1
If .List(j) = .List(i) Then
MsgBox "doublon trouvé"
End If
Next
Next
End With


4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 159
18 févr. 2015 à 12:06
Bonjour Sormick, bonjour le forum,

En principe, pour éviter cela il est d'usage d'alimenter la Listbox sans doublon... Si ça t'intéresse je peux te proposer un code mais il me faudra savoir où se trouvent tes données.

Sinon essaie ça :

Dim I As Long
Dim J As Long

With Me.ListBox2
    For I = 0 To .ListCount - 1
        If .Selected(I) = True Then
            For J = 0 To .ListCount - 1
                If .Selected(J) = True Then
                    If .List(I) = .List(J) And I <> J Then MsgBox "Doublon !": Exit Sub
                End If
            Next J
        End If
    Next I
End With

0
Bonjour,

Au contraire! je veux garder ces doublons sur la listbox.
je voudrais juste que si il y a un doublon qu'il me lance une autre macro.
là ou ça se corse beaucoup c'est que je souhaite qu'il me détecte seulement les doublons sur une partie de la valeur.
voici un exemple de cette valeur:
CM T412522P
je voudrais que sur la listbox qu'il me détecte les doublons CM .
j'ai un code VBA qui me détecte cette valeur (CM) mais ne détecte pas les Doublons (CM).
voici ce code:
Dim Infos
Infos = Split(ListBox2.Text, " ")
If Infos(0) = "CM" Then
msgbox "trouvé"
end if
Pouvez vous m'aider? car je n'y arrive pas
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 159
18 févr. 2015 à 13:57
Bonjour Sormick, bonjour le forum,

Peut-être comme ça alors :

Dim I As Long
Dim J As Long

With Me.ListBox2
    For I = 0 To .ListCount - 1
        If .Selected(I) = True Then
            For J = 0 To .ListCount - 1
                If .Selected(J) = True Then
                    If Left(.List(I), 2) = "CM" And Left(.List(J), 2) = "CM" And I <> J Then MsgBox "Doublon !": Exit Sub
                End If
            Next J
        End If
    Next I
End With

0
Bonjour,

Lorsque je clique sur la valeur sur la listbox2 absolument rien ne se passe.
Ni message d'erreur, ni de message doublon!
le code vba je l'ai mis sur:
Private Sub ListBox2_Click()
il y a t'il quelque chose que j'ai oublié?
0
Cette derniere macro par thautheme est celle que je souhaite utiliser pour détecter les doublons. mais pourquoi rien ne se passe lorsque je clique sur une valeur en doublon sur la listbox? Il y a t'il une erreur sur ce code?
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 159
18 févr. 2015 à 17:28
Bonjour Sormick, bonjour le forum,

Il semblerait qu'en mode MultiSelect, l'événement Click ne soit plus déclenché à la sélection d'un élément de la ListBox... L'aide VBA n'en parle pas. Deux solutions pas très confortables :
  • Utiliser l'événement DblClick (Double-Clic)
  • Utiliser l'événement Mouse_up


Dans le premier cas il faut que l'utilisateur le sache sinon il n'aura pas de message.
Dans le second, si l'utilisateur est un mordu des raccourcis clavier (comme moi), il risque de passer au travers...

J'ai pas mieux désolé, mais je pense que les balèzes qui sévissent dans ce forum vont te trouver une vraie solution...
0
je suis en fmmultiselectSingle
et le clic fonctionne avec d'autres macros sur la listbox c'est ça que je ne comprends pas
si je mets le code:
MsgBox Me.ListBox2.Value
ça fonctionne alors que votre code ne donne rien
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 159 > sormick
18 févr. 2015 à 19:48
Je voulais dire fmMultiSelectMulti car en Single un seul élément peut-être sélectionné. Plus exactement deux au maximum !...
Je vois mal comment ton dernier code peut fonctionner en restant en Single. Vérifie bien car ce code n'est absolument pas adapté à ta requête !... En plus du bug que tu signales, si tu choisis un élément qui ne commence pas par CM puis, en second, un élément qui commence par CM tu auras le message de doublon alors qu'il n'y a pas de doublon !?...
0
je vois d'ou viens l'erreur mais je ne sais pas comment le corriger:
si à la place de :
If Left(.List(i), 2) = "CM" And Left(.List(j), 2) = "CM" And i <> j Then MsgBox "Doublon !": Exit Sub
je mets msgbox "Doublon!"
alors ça fonctionne alors je suppose que le problème vient du code ci-dessus
0
sur ce code :
If Left(.List(i), 2) = "CM" And Left(.List(j), 2) = "CM" And i <> j Then MsgBox "Doublon !": Exit Sub

j'ai enlevé (And i <> j) et la ça a l'air de fonctionner!!!!
sauf que ça ne fonctionne pas bien avec "CM" car j'ai essayé avec une seule valeur "CM" et une autre "CE" et il me détecte un doublon alors que ce ne sont pas les mêmes valeurs
0
finalement j'ai trouvé un autre code que j'ai modifié:
Dim i As Long
Dim j As Long
With ListBox2
For i = 0 To .ListCount - 1
For j = .ListCount To (i + 1) Step -1
If .Selected(j) = True Then
If Left(.List(i), 2) = "CM" And Left(.List(j), 2) = "CM" And i <> j Then MsgBox "Doublon !": Exit Sub
End If

Next
Next
End With

et là il me détecte bien les doublons , sauf que lorsque je clique sur la première valeur au dessus de la listbox cette macro ne fonctionne pas!!!
0