Selection d'un champ d'une combo simple à partir d'une saisie. (avec et sans api)


Contenu du snippet

Permet de selectionner un champ d'une combo de type combo simple à partir d'une saisie de l'utilisateur. L'appel peut ce faire sur un Keypress :
If KeyAscii = 13 Then
Call ComboDynamique(CmboNomCompte, "Le compte n'a pas été trouvé")
End If

Source / Exemple :


'Majuscule à la premiere lettre d'une chaine
Public Function Majuscule(txt As String) As String
    Majuscule = UCase$(Left(txt, 1)) & Mid(txt, 2, Len(txt))
End Function

Public Sub ComboDynamique(ByRef combo As ComboBox, _
                          MsgErreur As String, Optional TitreErreur As String = "Erreur")
    Dim i       As Integer

    'Majuscule à la premiere lettre de la saisie
    combo.Text = Majuscule(combo.Text)

    'Cherche le texte dans la combo
    For i = 0 To combo.ListCount - 1

        If (combo.List(i) = combo.Text) Then ' C'est trouvé, on selectionne et on quitte
            combo.ListIndex = i
            Exit For
            
        ElseIf  (i = combo.ListCount - 1) Then
            'Le texte n'est pas dans la combo : msgbox
            MsgBox MsgErreur, vbInformation + vbOKOnly, TitreErreur
            
        End If
    Next i
    
End Sub  

'-------------------
'Version avec API
'-------------------
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Const LB_FINDSTRING = &H18F ' pour les listBox
Const CB_FINDSTRING = &H14C ' Pour les comboBox

Private Sub Combo1_Change()
  Combo1.ListIndex = SendMessage(Combo1.hwnd, &H14C, -1, ByVal CStr(Combo1.Text))
End Sub

Conclusion :


Exact Max12, on peut faire plus simple avec API :

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Const LB_FINDSTRING = &H18F
Const CB_FINDSTRING = &H14C

Private Sub Combo1_Change()
Combo1.ListIndex = SendMessage(Combo1.hwnd, &H14C, -1, ByVal CStr(Combo1.Text))
End Sub

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.