Doublon combobox

Signaler
Messages postés
44
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
28 mars 2008
-
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Bonjour,
j'ai un combo1 déjà rempli de valeurs et j'aimerais supprimer les doublons dans ce combo1.
Aprés consultation du forum, je n'ai pas trouvé de solution satisfaisant mes besoins.
Mereci de votre aide.

###TITEUF###

13 réponses

Messages postés
104
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
28 septembre 2006

Bjr,

comment ta combo est remplie ?
par une requete du type:
"select * from ma table"
dans ce cas , mets plutot : "select distinct * from ma table".
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Salut,

Essaie de voir si ce code peu t'aider

Il Faut ajouter la références Microsoft Scripting Runtime

Private Sub Command1_Click() 
'Dictionnaire contenant les éléments de la combobox
Dim ItemCol  As New Dictionary 
'Tableau contenant la clé de chaque élément du dictionnaire
Dim Keys() As Variant 
'Variable de boucle
Dim i As Integer 

    'Pour chaque élément de la combo
    For i =  0 To Cb.ListCount - 1 
        'Si l'éléments n'éxiste pas on l'ajoute au dictionnaire
        'ATTENTION faire en sorte que la clé soit égale a l'item.
        If Not ItemCol.Exists(Cb.List(i)) Then Call ItemCol.Add(Cb.List(i), Cb.List(i)) 
    Next 
    'Récupération des clés des éléments
    'On aurait pu aussi remplir le tableau en meme temps que le dictionaire
    Keys = ItemCol.Keys 
    'Efface le Combo
    Call Cb.Clear 
    For i =  LBound (Keys) To UBound(Keys) 
        Call Cb.AddItem(ItemCol.Item(Keys(i))) 
    Next 

    Cb.ListIndex  = 0 

End Sub 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Messages postés
76
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
30 octobre 2007
1
Salut,
Comment remplis tu ta combo?
sinon tu peut faire deux boucles:
For i =0 to combo.item.count
   valeur = combo.item(i).value
   for j = i+1 to combo.item.count
      if valeur = combo.item(j).count then
         combo.item(j).delete
      end if
   next j
next i

Voila par contre je suis pas du tout sur de la syntaxe, mais j'espère que cela pourra t'aider.


 
Messages postés
44
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
28 mars 2008

Merci de votre aide, mais étant débutant, la méthode de jrivet me parait complexe et la méthode de Billoute 50 ne fonctionne pas encore car il doit y avoir des problémes de syntaxe (pourais tu commenter ta méthode afin que je comprenne bien)

Merci de votre aide

###TITEUF###
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Salut,

J'ai repris la facon de faire de billoute50 et est corrigé la synthaxe

Private Sub Command1_Click() 
'Valeur tampon
Dim Valeur As String 
'Variable de boucle numero 1
Dim i As Integer 
'Variable de boucle numero 2
Dim j As Integer 
'Pour tous les éléments
    For i = 0 To Combo.ListCount - 1 
        'Memorisation de la valeur de l'item
       Valeur = Combo.List(i) 
       'Seconde boucle qui passe en revu la fin du combo
        For j = i + 1 To Combo.ListCount - 1 
            'Si l'élément est égale a la valeur tampon
            If Valeur = Combo.List(j) Then 
                'Suppression de l'item
                Call Combo.RemoveItem(j) 
            End If 
        Next j 
    Next i 
End Sub 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

Ceci devrait fonctionner et est plus simple que ma première proposition

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Messages postés
76
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
30 octobre 2007
1
For i =0 to combo.items.count-1                  'boucle pour chaque valeur comprise dans ta combobox
   valeur = combo.items.item(i)                     'récupere la valeur de l'élement sélectionné
   for j = i+1 to combo.items.count - 1         ' boucle pour chaque valeur comprise dans ta combobox aprés la sélectionné
      if valeur = combo.items.item(j) then         ' compare ta premiére valeur avec la seconde (donc toute celle de ta boucle 2)
         combo.items.removeat(j)                     'supprime le doublon
         j=j-1                                       
      end if
   next j
next i

J'espère que c'est mieu j'ai essayé de corriger mais je suis en vb.net donc je suis pas sur de la syntaxe.

Mais ta combo est rempli à quel moment et avec quel code?
Messages postés
44
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
28 mars 2008

Impossible de faire fonctionner les boucles !!
Aucun doublon n'est supprimé !!

###TITEUF###
Messages postés
76
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
30 octobre 2007
1
essaye de mettre un point d'arrêt et appui sur F8 pour faire du pas à pas afin de savoir comment réagi ton prog et pour savoir à quelle endroit il passe pas.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Salut,

Il faudrait que tu sois plus precis...

J'ai tester en VB6 le code inspiré de billoute avec la synthaxe VB6 et cela fonctionne.

Poste le code tel que tu l'as mis dans ton code pour que l'on teste, car là on avancve à l'aveugle....

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Re,

Je viens de penser à un truc:

ATTENTION les codes proposés supprime les VRAI Doublons, pas de sensibilité avec les espaces, les majuscules et les minuscule.

Si tu pallier à ce problème SI c'est celui ci.

Change cette ligne

'Si l'élément est égale a la valeur tampon
If Valeur =  Combo.List(j) Then 
  'Suppression de l'item
  Call Combo.RemoveItem(j) 
End If 

EN

'Si l'élément est égale a la valeur tampon
If  Trim (UCase(Valeur))  = Trim(Ucase(Combo.List(j))) Then  
  'Suppression de l'item
  Call Combo.RemoveItem(j)  
End If  

 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Messages postés
44
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
28 mars 2008

Voici le code que j'ai mis

Dim Valeur As String
Dim h As Integer
Dim j As Integer
    For h = 0 To Combo1.ListCount - 1
    Valeur = Combo1.List(h)
     For j = h + 1 To Combo1.ListCount - 1
    If Valeur = Combo1.List(j) Then
    Call Combo1.RemoveItem(j)
    End If
     Next j
    Next h

###TITEUF###
Messages postés
44
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
28 mars 2008

J'ai rajouté une boucle générale qui refait l'opération 5 fois de suite et là ça fonctionne, il me reste plus aucun doublon.
Sinon sur 7 doublons recenser il m'en restait 3
Si vous savez pourquoi la réponse m'intérressse sinon merci mais je pense avoir résolu mon probléme par l'absurde !!

Merci de votrre mobilisation

###TITEUF###
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Pour bien resoudre ton problème il faudrait le faire en une boucle.

Si ce n'est pas trop long peut tu mettre les textes contenu dans ta combo (ca m'intrigue tout ca )

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée