Doublon combobox

cs_titeuf44 Messages postés 44 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 28 mars 2008 - 8 juin 2006 à 09:46
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 8 juin 2006 à 14:36
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

Zylott Messages postés 104 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 28 septembre 2006
8 juin 2006 à 10:08
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".
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 juin 2006 à 10:13
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
0
billoute 50 Messages postés 76 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 30 octobre 2007 2
8 juin 2006 à 10:15
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.


 
0
cs_titeuf44 Messages postés 44 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 28 mars 2008
8 juin 2006 à 11:26
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###
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 juin 2006 à 11:38
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
0
billoute 50 Messages postés 76 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 30 octobre 2007 2
8 juin 2006 à 11:43
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?
0
cs_titeuf44 Messages postés 44 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 28 mars 2008
8 juin 2006 à 14:03
Impossible de faire fonctionner les boucles !!
Aucun doublon n'est supprimé !!

###TITEUF###
0
billoute 50 Messages postés 76 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 30 octobre 2007 2
8 juin 2006 à 14:07
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.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 juin 2006 à 14:18
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 juin 2006 à 14:21
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
0
cs_titeuf44 Messages postés 44 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 28 mars 2008
8 juin 2006 à 14:22
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###
0
cs_titeuf44 Messages postés 44 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 28 mars 2008
8 juin 2006 à 14:31
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###
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 juin 2006 à 14:36
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
0
Rejoignez-nous