Dernièrement, un internaute me demandait s’il était possible de modifier le fonctionnement de l’auto complétion dans les listes déroulante. S’agissant d’une fonctionnalité interne d’ACCESS, il est évident que ce n’est pas possible nativement.
Par contre on peut toujours contourner le problème à l’aide du code VBA. Voici cette astuce basée sur l’utilisation de l’évènement KeyUp (touche relâchée) de la liste :
On commence par créer une variable globale dans le formulaire pour stocker les touches pressées.
A chaque touche tapée par l’utilisateur, on parcourt la liste à la recherche du premier item correspondant aux caractères saisis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Option Compare Database Option Explicit Dim strList As String 'stocke les keycode
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Private Sub Modifiable1_KeyUp(KeyCode As Integer, Shift As Integer) Dim i As Long 'contrôle les touches If KeyCode = 27 Then strList = "" 'Sur Echap vide le contenu If Not (KeyCode > 64 And KeyCode < 123) Then Exit Sub 'ce n'est pas un caractère A-Z a-z (à affiner pour les caractères accentués) strList = strList & Chr(KeyCode) 'ajoute la touche pressée For i = 0 To Me.Modifiable1.ListCount - 1 'parcours les items If Me.Modifiable1.Column(1, i) Like "*" & strList & "*" Then 'l'item correspond Me.Modifiable1.ListIndex = i 'on s'y positionne Exit For 'et on sort End If Next End Subdonne la valeur de la colonne 2 de la ligne i.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Column(1, i)
est un opérateur logique commun à SQL et VBA.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Like "*" & strList & "*"
Par sécurité on vide les caractères saisis sur la prise et la perte du focus.
Comme vous le voyez, rien de complexe, on utilise juste les nombreuses possibilités d’ACCESS pour contourner le problème. Il va sans dire que l’auto complétion classique de la liste fonctionne toujours.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Sub Modifiable1_GotFocus() strList = "" 'perte du focus on vide la liste de touche End Sub Private Sub Modifiable1_LostFocus() strList = "" 'perte du focus on vide les keycode End Sub
N’hésitez pas à affiner le contrôle des touches tapées, en effet, dans cet exemple seul l’alphabet classique est pris en compte, il manque les caractères accentués, les chiffres…
D'autres astuces sur mon blog.
Partager