Combobox :Problème de doublons

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

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
LANGAZOU Messages postés 95 Date d'inscription   Statut Membre Dernière intervention  
 
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
Yoda
 
Non, pas du tout

Fais un essai

Sub test()
Mot = " TOTO TITI "
Mot = Trim(Mot)
msgbox "-" & Mot & "-"
end sub
0
LANGAZOU Messages postés 95 Date d'inscription   Statut Membre Dernière intervention  
 
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
Yoda > LANGAZOU Messages postés 95 Date d'inscription   Statut Membre Dernière intervention  
 
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
LANGAZOU Messages postés 95 Date d'inscription   Statut Membre Dernière intervention  
 
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
LANGAZOU Messages postés 95 Date d'inscription   Statut Membre Dernière intervention  
 
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
LANGAZOU Messages postés 95 Date d'inscription   Statut Membre Dernière intervention  
 
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > LANGAZOU Messages postés 95 Date d'inscription   Statut Membre Dernière intervention  
 
Tu t'es trompé de discussion...
ma réponse ici : https://forums.commentcamarche.net/forum/affich-31515133-probleme-vba-excel
0
LANGAZOU Messages postés 95 Date d'inscription   Statut Membre Dernière intervention  
 
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