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
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)
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