Supprimer les doublons dans combobox [Résolu]

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

13 réponses

Répondre au sujet
cs_Ayr 221 Messages postés mercredi 9 avril 2003Date d'inscription 13 décembre 2009 Dernière intervention - 27 sept. 2009 à 18:04
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Ayr
NHenry 14132 Messages postés vendredi 14 mars 2003Date d'inscription 21 avril 2018 Dernière intervention - 27 sept. 2009 à 14:09
+1
Utile
Petite correction :
ctrl.Items(i) = ctrl.Items(a)
devient :
ctrl.Items(i).Equals(ctrl.Items(a))


Commenter la réponse de NHenry
NHenry 14132 Messages postés vendredi 14 mars 2003Date d'inscription 21 avril 2018 Dernière intervention - 27 sept. 2009 à 13:42
0
Utile
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
cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention - 27 sept. 2009 à 14:00
0
Utile
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
NHenry 14132 Messages postés vendredi 14 mars 2003Date d'inscription 21 avril 2018 Dernière intervention - 27 sept. 2009 à 14:08
0
Utile
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
cs_Ayr 221 Messages postés mercredi 9 avril 2003Date d'inscription 13 décembre 2009 Dernière intervention - 27 sept. 2009 à 14:22
0
Utile
Fonctionne chez moi avec "ctrl.Items.RemoveAt(a)" à la place de "ctrl.Items.Remove(a)"
Commenter la réponse de cs_Ayr
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 27 sept. 2009 à 15:02
Commenter la réponse de PCPT
cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention - 27 sept. 2009 à 15:10
0
Utile
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
cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention - 27 sept. 2009 à 17:27
0
Utile
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
cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention - 27 sept. 2009 à 18:08
0
Utile
SUPER

un grand merci à vous,plus de doublons

bonne soirée
Commenter la réponse de cs_petchy
cs_Ayr 221 Messages postés mercredi 9 avril 2003Date d'inscription 13 décembre 2009 Dernière intervention - 27 sept. 2009 à 14:05
-1
Utile
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
cs_Ayr 221 Messages postés mercredi 9 avril 2003Date d'inscription 13 décembre 2009 Dernière intervention - 27 sept. 2009 à 15:17
-1
Utile
[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
NHenry 14132 Messages postés vendredi 14 mars 2003Date d'inscription 21 avril 2018 Dernière intervention - 27 sept. 2009 à 17:56
-1
Utile
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.