buchelord
Messages postés1Date d'inscriptionjeudi 9 août 2007StatutMembreDernière intervention 9 août 2007
-
9 août 2007 à 10:41
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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 ?