Supprimer les doublons d'un bombobox

buchelord Messages postés 1 Date d'inscription jeudi 9 août 2007 Statut Membre Dernière intervention 9 août 2007 - 9 août 2007 à 10:41
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 10 août 2007 à 00:02
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

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
9 août 2007 à 10:51
Si tu fais du VBA, pourquoi tu poste dans le forum VB6 ???

Je déplace vers le forum approprié !
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 août 2007 à 11:32
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)
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 août 2007 à 11:34
PS : Tu pourras aussi remplacer l'utilisation de ton compteur I par la lecture du nombre d'items dans ta ComboBox :
Impr.ComboBox2.ListCount
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 août 2007 à 11:39
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

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 août 2007 à 00:02
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>
Rejoignez-nous