Supprimer les doublons dans combobox

Résolu
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 - 27 sept. 2009 à 12:37
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre 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

13 réponses

NHenry Messages postés 15128 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2024 159
27 sept. 2009 à 14:09
Petite correction :
ctrl.Items(i) = ctrl.Items(a)
devient :
ctrl.Items(i).Equals(ctrl.Items(a))


1
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
27 sept. 2009 à 18:04
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.
1
NHenry Messages postés 15128 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2024 159
27 sept. 2009 à 13:42
Bonjour,

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

0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
27 sept. 2009 à 14:00
Re
en fait, ça ne suprime pas les doublons,mais je n'est pas d'erreurs.
merci
petchy
0

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

Posez votre question
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
27 sept. 2009 à 14:05
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+
0
NHenry Messages postés 15128 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2024 159
27 sept. 2009 à 14:08
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


0
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
27 sept. 2009 à 14:22
Fonctionne chez moi avec "ctrl.Items.RemoveAt(a)" à la place de "ctrl.Items.Remove(a)"
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 sept. 2009 à 15:02
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
27 sept. 2009 à 15:10
désolé,mais ça ne fonctionne pas
j'ai toujours les doublons dans ma combobox,j'ai essayer les 2 solutions.
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
27 sept. 2009 à 17:27
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
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
27 sept. 2009 à 18:08
SUPER

un grand merci à vous,plus de doublons

bonne soirée
0
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
27 sept. 2009 à 15:17
[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.
-1
NHenry Messages postés 15128 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2024 159
27 sept. 2009 à 17:56
Bonjour,

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

-1
Rejoignez-nous