Détecter doublons sur listbox

sormick -  
ThauTheme Messages postés 1564 Statut Membre -
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. ThauTheme Messages postés 1564 Statut Membre 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
    1. 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
  2. ThauTheme Messages postés 1564 Statut Membre 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
    1. 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
  3. 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
  4. ThauTheme Messages postés 1564 Statut Membre 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
    1. 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
      1. ThauTheme Messages postés 1564 Statut Membre 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
    2. 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
    3. 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
    4. 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