Supprimer les doublons d'un bombobox

Signaler
Messages postés
1
Date d'inscription
jeudi 9 août 2007
Statut
Membre
Dernière intervention
9 août 2007
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
J'ai cherché un code me permettant de supprimer dans une combobox les doublons mais mon code bug et je ne trouve pas la solutions.

Dans Combobox1, je choisis une semaine. En fonction de la semaine choisi cela m'indique dans quelle colonne d'un tableau excel je vais lister les différentes valeurs. Si la cellule est vide je ne rajoute aucune valeur dans combobox2, si la valeur de la cellule ne figure pas dans la liste des items de combobox2 je l'ajoute dans la liste de combobox2 . Voici le code, je n'arrive pas à comparer les valeurs de la liste de combobox2 à la valeur du tableau excel

Private Sub ComboBox1_Change()
Dim I, J As Integer


I = 0


Impr.ComboBox2.Clear




If Impr.ComboBox1.Value = "Semaine 1" Then
    For p = 3 To 200
        If Cells(p, 5) = "" Then
            GoTo a
        Else
        If I = 0 Then
                 Impr.ComboBox2.AddItem Cells(p, 5)
                 Else
                  For J = 1 To I
                    If ComboBox2.Item(J) = Cells(p, 5) Then GoTo a
                  Next
                   Impr.ComboBox2.AddItem Cells(p, 5)
        End If
        I = I + 1
        End If
      
a:    Next
End If




Impr.Label2.Visible = True
Impr.ComboBox2.Visible = True


 


End Sub

5 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
Si tu fais du VBA, pourquoi tu poste dans le forum VB6 ???

Je déplace vers le forum approprié !
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
Salut
Rappel : Dim I, J As Integer ne dimensionne pas I comme un Integer, mais comme un Variant
Evite les Goto, c'est source de problèmes

Private Sub ComboBox1_Change()
    Dim I As Integer
    Dim J As Integer
    Dim bTrouvé As Boolean
    I = 0
    Impr.ComboBox2.Clear
    If Impr.ComboBox1.Value = "Semaine 1" Then
        For p = 3 To 200
            If Cells(p, 5) <> "" Then
                If I = 0 Then
                    Impr.ComboBox2.AddItem Cells(p, 5)
                    I = I + 1
                Else
                    bTrouvé = False
                    For J = 1 To I
                        If ComboBox2.Item(J) = Cells(p, 5) Then
                            bTrouvé = True
                            Exit For
                        End If
                    Next
                    If Not bTrouvé Then
                        Impr.ComboBox2.AddItem Cells(p, 5)
                        I = I + 1
                    End If
                End If
            End If
        Next p
    End If
End Sub

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
PS : Tu pourras aussi remplacer l'utilisation de ton compteur I par la lecture du nombre d'items dans ta ComboBox :
Impr.ComboBox2.ListCount
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
tu pourrais également utiliser ce genre de choses :

Private Const CB_FINDSTRINGEXACT As Long = &H158
Private Const LB_FINDSTRINGEXACT As Long = &H1A2

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

Public Function AddDistinctItem(ByRef voControl As Object, ByRef vsItem As String, Optional vzIndex As Variant)
Dim nMessage As Long
   If TypeOf voControl Is ComboBox Then
       nMessage = CB_FINDSTRINGEXACT
   ElseIf TypeOf voControl Is ListBox Then
       nMessage = LB_FINDSTRINGEXACT
   End If
   
   If nMessage Then       AddDistinctItem (SendMessage(voControl.hwnd, nMessage, -1, ByVal vsItem) -1)
       If AddDistinctItem Then
           If IsMissing(vzItem) Then
               voControl.AddItem vsItem
           Else
               voControl.AddItem vsItem, vzIndex
           End If
       End If
   End If
End Function , ----
By Renfield

Ensuite, tu peux faire :

   If Impr.ComboBox1.Value = "Semaine 1" Then
       For p = 3 To 200
           If Cells(p, 5) <> "" Then
               AddDistinctItem Impr.ComboBox2, Cells(p, 5)
           End If
       Next p
   End If , ----
By Renfield

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

à part l'application hôte, pas de hWnd en VBA (désolé Renfield, faudra le calculer en plus..)

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>