Combobox :Problème de doublons

Bonjour,

j'ai un combobox ("client") qui s'alimente (sans doublons) à partir une feuille EXCEL. le problème c'est que parfois un même client existe en doublon au sein de la liste déroulante de ma combobox parce que un espace a été ajouté à la fin lors de sa création dans ma Combobox par faute d'inattention. Est ce qu'il y'a un moyen d'effacer toujours l'espace ajouté à la fin d'une chaîne de caractère (avant même qu'il soit enregistré sur la feuille Excel) ?

Merci pour votre réponse.

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    La fonction Trim() supprime les espaces avant et après un mot

    Mot = "    TOTO    "
    Mot = Trim(Mot)


    Mot -> "TOTO"

    voir aussi Ltrim(), Rtrim(), Ucase(), Lcase()
    1. prenant l'exemple du client : "Jack Daniel " (espace à la fin) le problème c'est que lorsque j'utilise le TRIM il va supprimer l'espace avant et après ! c'est le désordre total. "JackDaniel"
      1. Non, pas du tout

        Fais un essai

        Sub test()
        Mot = " TOTO TITI "
        Mot = Trim(Mot)
        msgbox "-" & Mot & "-"
        end sub
      2. Ok Merci, je vais l'essayer mais ou je doit mettre cette fonction ?(combobox change ou initialize ..)

        voici mon code d'alimentation du combo:

        Private Sub UserForm_Initialize()

        ComboBox2.SetFocus

        For i = 3 To Sheets("CD").Cells(3, 26).End(xlDown).Row
        Me.ComboBox2 = Sheets("CD").Cells(i, 26)
        If Me.ComboBox2.ListIndex = -1 Then
        Me.ComboBox2.AddItem Sheets("CD").Cells(i, 26)
        End If
        Next i

        end sub

        Merci pour ton suivi.
      3. @LANGAZOUIl faut mettre cette fonction dans la Sub qui valide la saisie

        par exemple si tu valides par un bouton OK

        Private Sub Boutton_OK_Click()
        Mot = Trim(Me.ComboBox2.text)
        Me.ComboBox2.AddItem Mot
        Me.ComboBox2.text = ""
        End Sub

        C'est un exemple, tu dois adapter à ton code.
      4. ca marche parfaitement pour les prochains nouveaux clients ( au sein du bouton OK) mais le problème c'est qu'il y'a des anciens clients déjà enregistré avec l'espace alors ya t-il un moyen de les recuperer sans espace dans le combo en intégrant le TRIM dans le combo.additem ?

        Private Sub UserForm_Initialize()

        ComboBox2.SetFocus

        For i = 3 To Sheets("CD").Cells(3, 26).End(xlDown).Row
        Me.ComboBox2 = Sheets("CD").Cells(i, 26)
        If Me.ComboBox2.ListIndex = -1 Then
        Me.ComboBox2.AddItem Sheets("CD").Cells(i, 26)
        End If
        Next i

        end sub

        Merci.
      5. c'est bon je l'ai trouvé :

        For i = 3 To Sheets("CD").Cells(3, 26).End(xlDown).Row
        Sheets("CD").Cells(i, 26) = Trim(Sheets("CD").Cells(i, 26))

        Next

        For i = 3 To Sheets("CD").Cells(3, 26).End(xlDown).Row
        Me.ComboBox2 = Sheets("CD").Cells(i, 26) ' on se positionne dans le combobox
        If Me.ComboBox2.ListIndex = -1 Then ' Existe t-il?
        Me.ComboBox2.AddItem Sheets("CD").Cells(i, 26)
        End If
        Next i

        Merci beaucoup pour votre aide :)
    2. Modérateur
      Bonjour,

      Il est tout de même dommage que vous ne suiviez pas les (bons) conseils de Yoda. Votre base comporte des espaces intempestifs qui engendre des problèmes de doublons et vous ne voulez pas traiter le problème à la base?

      Nettoyez votre liste de noms, votre fichier ne s'en portera que mieux. Qui plus est cela va vous prendre 10 minutes. Ce temps n'est rien comparé aux erreurs susceptibles de se présenter dans votre code...

      Ps : pour rappel, vous avez un autre sujet en cours.
      1. j'ai découvert encore le problème suivant:

        je veux lorsque le textbox1 est vide et le textbox 2 non vide le EXIT sur le textbox2 me renvoie au textbox1 pour remplissage. j'ai essayé le code suivant mais ca marche pas:

        Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If TextBox1 = "" Then
        MsgBox " Borne Min vide !"
        Cancel = True
        End If
        End sub

        Merci.
    3. Bonjour,

      c'est bon j'ai fait ce que YODA m'a dit et ca marche mieux que integrer le TRIM dans le combo.additem.

      je vous remercie énormément :)