Prévenir les items dupliqués dans un combo

[Résolu]
Signaler
Messages postés
100
Date d'inscription
lundi 20 juin 2005
Statut
Membre
Dernière intervention
20 janvier 2009
-
Messages postés
4
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
13 juillet 2009
-
Bonjour, bonjour,

voila mon problème, je cherche à prevenir l'insertion dans un combo d'une donnée déjà présente.
Je ne veux pas utiliser le bout de code qui consiste à lire les différents items du combo pour les comparer à la donnée à insérer,
il y beaucoup d'items, je veux utiliser le SendMessage.
J'utilise le code qui suit, mais mon problème c'est que à chaque fois ou je devrais obtenir ComboBox_FindItemIndex = -1 ; j'obtiens
ComboBox_FindItemIndex = 0. Même si le combo est vide...

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

Private Const CB_FINDSTRING As Long = &H18F
Private Const CB_FINDSTRINGEXACT As Long = &H1A2

'--------------------------------------------------------------------------------------------
Private Function ComboBox_FindItemIndex(hwndlist As Long, sData As String) As Long

   If hwndlist <> 0 Then
     'find the first matching item
      ListBox_FindItemIndex = SendMessage(hwndlist, CB_FINDSTRINGEXACT, -1, ByVal sData)
   End If

End Function

'Code dans un bouton
If ComboBox_FindItemIndex(Combo1.hwnd, objRS.fields("myDateInterV")) = -1 Then
    Combo1.AddItem objRS.fields("myDateInterV")
End If

Merci d'avance pour toute aide...

 Bidouille & Cie

6 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,

je pense que ça ne fonctionne pas avec une Combo.
Essaies le même code avec une ListBox, et tu verras
que ça marche.
Messages postés
100
Date d'inscription
lundi 20 juin 2005
Statut
Membre
Dernière intervention
20 janvier 2009

Mouais....
semblerait que ce soit le cas...

Merde, Merde et Merde....

Doit bien y avoir une astuce...

 Bidouille & Cie
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Tu veux une bidouille ?
essaies ceci
toujours avec le même code
'Code dans un bouton
On error resume next
Combo1.ListIndex= ComboBox_FindItemIndex(Combo1.hwnd, objRS.fields("myDateInterV")) 
 if Combo1.ListIndex=-1 Then _
   Combo1.AddItem objRS.fields("myDateInterV")

ça semble bizzard, mais  il y' a toujours une erreur
quand il ne trouve pas de correspondance.
et quand il y' a erreur Combo1.ListIndex= -1.
Messages postés
100
Date d'inscription
lundi 20 juin 2005
Statut
Membre
Dernière intervention
20 janvier 2009

ok merci pour tout

 Bidouille & Cie
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Je crois qu' on s' est gourré tout les deux
Il semble que c' est possible...je viens de m' en assurer...
Gardes ton premier code et changes seulement
Private Const CB_FINDSTRING = &H14C
Private CB_FINDSTRINGEXACT = &H1A2
(et pas de As Long dans la declaration)

Autre chose : Pourqoui faire appel àune fonction qui ne
comporte qu' une seule ligne.
Fais directement
Combo1.ListIndex= SendMessage(Combo1.Hwnd, CB_FINDSTRINGEXACT, -1,       objRS.fields("myDateInterV"))

 If Combo1.ListIndex=-1 Then 
      ajoute un élément
      ....
Messages postés
4
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
13 juillet 2009

Bonjour,
Je vous propose cette procédure :

Public Sub RemplirCombo(ByRef cbo As ComboBox, ByVal commande As String, ByVal colonne As String)
'Cette procédure permet de remplir la ComboBox à partir de la base de données
cmdTR = cnxTR.CreateCommand()
cmdTR.CommandText = commande
cmdTR.ExecuteNonQuery()
Dim MyReader As OleDbDataReader = cmdTR.ExecuteReader()

Try
If cbo.Items.Count > 0 Then cbo.Items.Clear()
Do While MyReader.Read()
If (cbo.FindStringExact(MyReader.Item(colonne).ToString) = -1) Then
cbo.Items.Add(MyReader.Item(colonne).ToString)
End If
Loop
MyReader.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "Remplissage de ComboBox")
End Try
End Sub

J'espère que ça répondra à votre sollicitation.

NB : j'ai utilisé un BD access

Smaeil