Combobox :Problème de doublons

LANGAZOU Messages postés 100 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. Yoda
     
    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()
    0
  2. LANGAZOU Messages postés 100 Statut Membre
     
    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"
    0
    1. Yoda
       
      Non, pas du tout

      Fais un essai

      Sub test()
      Mot = " TOTO TITI "
      Mot = Trim(Mot)
      msgbox "-" & Mot & "-"
      end sub
      0
    2. LANGAZOU Messages postés 100 Statut Membre
       
      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.
      0
    3. Yoda > LANGAZOU Messages postés 100 Statut Membre
       
      Il 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.
      0
    4. LANGAZOU Messages postés 100 Statut Membre
       
      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.
      0
    5. LANGAZOU Messages postés 100 Statut Membre
       
      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 :)
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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.
    0
    1. LANGAZOU Messages postés 100 Statut Membre
       
      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.
      0
  4. LANGAZOU Messages postés 100 Statut Membre
     
    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 :)
    0