Supprimer les doublons dans combobox [Résolu]

Messages postés
710
Date d'inscription
jeudi 20 février 2003
Dernière intervention
19 mai 2015
- - Dernière réponse : cs_petchy
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Dernière intervention
19 mai 2015
- 27 sept. 2009 à 18:08
bonjour
j'ai se code pour supprimer les doublons dans un combobox,mais ça ne fonctionne pas
 Private Sub SupprDoublon(ByVal ctrl As ComboBox)

        For i = 0 To ctrl.Items.Count - 1
            For a = i + 1 To ctrl.Items.Count - 1
                If ctrl.Items(i) = ctrl.Items(a) Then
                    ctrl.Items.Remove(i)
                    a = a - 1
                End If
            Next a
        Next i
    End Sub

merci
petchy
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
1
Merci
Petite correction :
ctrl.Items(i) = ctrl.Items(a)
devient :
ctrl.Items(i).Equals(ctrl.Items(a))


Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Dernière intervention
13 décembre 2009
1
Merci
Ben tout à fait !

Essaye :
Me.cmb_Acteur.DataSource = Me.CsDb.LoadDb("SELECT DISTINCT acteurs FROM t_jeux", "t_jeux", "BD\jvtheque.mdb")

pour remplir ton ComboBox. Tu n'obtiens que le champ acteurs et sans doublons. Tu ne charge que les données qui te sont nécéssaires

Eventuellement tu peux ecrire
Me.cmb_Acteur.DataSource = Me.CsDb.LoadDb("SELECT DISTINCT acteurs FROM t_jeux ORDER BY acteurs", "t_jeux", "BD\jvtheque.mdb")

pour avoir tes données triées.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_Ayr
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Comment ça "Ca ne fonctionne pas" ?
ça supprime pas les doublons ou ça en supprime trop, une erreur ?

Commenter la réponse de NHenry
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Dernière intervention
19 mai 2015
0
Merci
Re
en fait, ça ne suprime pas les doublons,mais je n'est pas d'erreurs.
merci
petchy
Commenter la réponse de cs_petchy
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Et en modifiant un peu ?

Private Sub SupprDoublon(ByVal ctrl As ComboBox)
    For i =  ctrl.Items.Count - 1 to 0 step -1
        For a = ctrl.Items.Count - 1 to i + 1 step -1
            If ctrl.Items(i) = ctrl.Items(a) Then
                ctrl.Items.Remove(a)
                Exit for
            End If
        Next a
    Next i
End Sub


Commenter la réponse de NHenry
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Dernière intervention
13 décembre 2009
0
Merci
Fonctionne chez moi avec "ctrl.Items.RemoveAt(a)" à la place de "ctrl.Items.Remove(a)"
Commenter la réponse de cs_Ayr
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
Commenter la réponse de PCPT
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Dernière intervention
19 mai 2015
0
Merci
désolé,mais ça ne fonctionne pas
j'ai toujours les doublons dans ma combobox,j'ai essayer les 2 solutions.
Commenter la réponse de cs_petchy
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Dernière intervention
19 mai 2015
0
Merci
Re
les données du combo viennes d'un champ d'une table ACCESS
voila le code que j'utilise
dans la form j'ai 3 combo,mais celle qui m'intérresse c'est la cmb_Acteur

#Region "Utilisation des class"
    Private CsDb As New ClassBdd()
#End Region


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'combo genre
        Me.ComboObjet.DataSource = Me.CsDb.LoadDb("SELECT * FROM t_genres", "t_genres", "BD\jvtheque.mdb") 'On charge les données dans le combobox
        Me.ComboObjet.DisplayMember = "gen_nom" 'On choisi le champs à afficher dans le combobox car elle ne peut en afficher qu'un seul
        'combo support
        Me.cmb_Support.DataSource = Me.CsDb.LoadDb("SELECT * FROM t_support", "t_support", "BD\jvtheque.mdb") 'On charge les données dans le combobox
        Me.cmb_Support.DisplayMember = "support" 'On choisi le champs à afficher dans le combobox car elle ne peut en afficher qu'un seul
        'combo acteurs
        Me.cmb_Acteur.DataSource = Me.CsDb.LoadDb("SELECT * FROM t_jeux", "t_jeux", "BD\jvtheque.mdb") 'On charge les données dans le combobox
        Me.cmb_Acteur.DisplayMember = "acteurs" 'On choisi le champs à afficher "acteur" dans le combobox car elle ne peut en afficher qu'un seul

    End Sub
    Private Sub SupprDoublon(ByVal ctrl As ComboBox)
        Dim NewList As New List(Of Object)
        For Each Item As Object In ctrl.Items
            If Not NewList.Contains(Item) Then NewList.Add(Item)
        Next Item
        ctrl.DataSource = NewList
        '-- La commande précédente selectionne automatiquement le premier
        '-- élément du ComboBox. Si C'est ennuyeux, décommente la ligne qui suit
        'ctrl.SelectedIndex = -1
    End Sub


salut,

http://www.codyx.org/snippet_supprimer-doublons-combobox_374.aspx#1203

j'ai essayer aussi,mais c'est pareil.
je ne sais pas se qui cloche.
merci
petchy
Commenter la réponse de cs_petchy
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Dernière intervention
19 mai 2015
0
Merci
SUPER

un grand merci à vous,plus de doublons

bonne soirée
Commenter la réponse de cs_petchy
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Dernière intervention
13 décembre 2009
-1
Merci
Salut,

Ton code ne marche pas, l'approche n'est pas correcte.
Plusieurs problèmes dont :
- le "ctrl.Items(i) = ctrl.Items(a)" qui est erroné, on doit ecrire " ctrl.Items(i) Is ctrl.Items(a) " car ce sont des objets,
- le "a = a - 1" qui fait tourner le programme en boucle sur le for,
- le "ctrl.Items.Remove(i)" qui ne supprime pas l'élément concerné. Et de toute façon, si on le supprimait il y aurai une erreur car la fin de la boucle (ctrl.Items.Count - 1) n'est évalué qu'une fois au départ et on se retrouverai à boucler sur des éléments qui n'existent pas.

Essaye ceci :

Private Sub SupprDoublon(ByVal ctrl As ComboBox)
  Dim NewList As New List(Of Object)
  For Each Item As Object In ctrl.Items
    If Not NewList.Contains(Item) Then NewList.Add(Item)
  Next Item
  ctrl.DataSource = NewList
  '-- La commande précédente selectionne automatiquement le premier
  '-- élément du ComboBox. Si C'est ennuyeux, décommente la ligne qui suit
  'ctrl.SelectedIndex = -1
End Sub


A+
Commenter la réponse de cs_Ayr
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Dernière intervention
13 décembre 2009
-1
Merci
[quote=PCPT]salut,

http://www.codyx.org/snippet_supprimer-doublons-combobox_374.aspx#1203

++ /quote
Ha ben bravo, on s'emballe sur un problème et il y à déjà des solution proposées

A voir aussi peut être pourquoi il y à des doublons et eventuellement gerer le problème à la source.

[quote=petchy]désolé,mais ça ne fonctionne pas
j'ai toujours les doublons dans ma combobox,j'ai essayer les 2 solutions. /quote
Je te garanti que les solutions proposées fonctionnent, je les ai testées. Regarde s'il n'y à pas un problème autour. Et dis nous aussi en quoi ça ne marche pas, on n'est pas devant ton ecran. N'oublie pas que tu peux faire tourner ton programme en pas à pas avec des points d'arrets pour voir ce qu'il se passe.
il te reste aussi à essayer le lien de PCPT.
Commenter la réponse de cs_Ayr
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
-1
Merci
Bonjour,

Et si à la place de :
SELECT *
Tu utilises
SELECT DISTINCT *
?

Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.