Détecter doublons sur listbox

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

  1. 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...
    1. 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
    2. 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
    3. 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
    4. 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!!!
    5. @sormickJe 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 !?...
  2. 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?
    1. 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

      1. 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é?
    2. 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

      1. 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