Détecter doublons sur listbox

sormick -  
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   -
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


A voir également:

4 réponses

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
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
sormick
 
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   Statut Membre Dernière intervention   160
 
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
sormick
 
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
sormick
 
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   Statut Membre Dernière intervention   160
 
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
sormick
 
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   Statut Membre Dernière intervention   160 > sormick
 
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
sormick
 
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
sormick
 
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
sormick
 
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