Saisie assistée d'une zone de texte

Contenu du snippet

Ce petit bout de code permet de créer une saisie assistée (ou semi-automatique) d'un champs de texte (comme par exemple sur ce site même lorsque vous tapez quelque chose dans la zone de recherche dont le début commence comme une recherche antérieure que vous aviez faite)

J'ai ici pris l'exemple d'un textbox mais cela peut être adapté à une combobox par exemple

Le principe est simple:
- on crée un label que l'on affichera ou pas en fonction du besoin (collez-le
juste au dessus ou au dessous du textbox),
- on charge un tableau contenant certaines chaînes (celles qui sont
susceptibles d'être saisies),
- pour chaque caractère saisi dans le textbox, on compare ce texte avec le
début des chaînes du tableau,
- lorsqu'une chaîne commençant pareil est trouvée, on l'affiche dans le label,
- il suffit alors de taper <Entrée> ou de double-cliquer sur le label pour
affecter sa "caption" dans la zone de texte

Source / Exemple :


' déclaration d'un tableau contenant certaines chaînes de caractères
' il peut bien sûr être d'une autre taille
Dim tablo(0 To 4) As String

' chargement du tableau (on peut bien entendu le charger d'une autre 
' manière)
Private Sub Form_Load()
        
        tablo(0) = "toto"
        tablo(1) = "tete"
        tablo(2) = "titi"
        tablo(3) = "tutu"
        tablo(4) = "tata"
        
End Sub

' les évènements suivants se déclenchent pour chaque caractère
' saisi dans le textbox
Private Sub Text1_Change()

    ' déclaration d'un booléen indiquant si une possible chaîne
    ' compatible été trouvée
    Dim présent As Boolean
    
    présent = False
    
    i = 0
    
    Do
        ' le textbox ne doit pas être vide sinon la
        ' première chaîne rencontrée sera déclarée compatible
        ' Si dans le tableau une chaîne commence comme le texte
        ' saisi, on affiche le label avec la première
        ' chaîne de caractère pouvant correspondre
        If Text1.Text <> "" And tablo(i) Like Text1.Text + "*" Then
            
            Label1.Visible = True   ' affichage du label
            présent = True           
            Label1.Caption = tablo(i)  ' affectation de la chaîne à proposer dans 
                                                 ' sa caption
        
        Else
        
            Label1.Caption = ""
            
        End If
        
        i = i + 1
    
    Loop While i < 5 And présent = False
    
End Sub

' lorsque l'on appuie sur <Entrée> et que le label est visible et contient une 
' chaîne on affecte cette "caption" au textbox
Private Sub Text1_KeyPress(KeyAscii As Integer)

    If Label1.Visible = True and Label1.Caption <> "" and KeyAscii = 13 Then
    ' 13 est le code ASCII de la touche <Entrée>
        
        Text1.Text = Label1.Caption
        Label1.Caption = ""
        Label1.Visible = False
        
    End If
    
End Sub

' lorsque l'on double - clique sur le label et que celui - ci n'est pas vide
' on affecte sa "caption" au textbox
Private Sub Label1_DblClick()
    
    Text1.Text = Label1.Caption
    Label1.Caption = ""
    Label1.Visible = False
    
End Sub

Conclusion :


La propriété Visible du label par défaut doit être "False"
Pour une visibilté optimum mieux vaut que le label et le textbox soient collés (mais ça dépend de vous)

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.