ACCESS : Se positionner sur l’item d’une liste déroulante en entrant une partie du texte.

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 KeyPress (touche pressée) de la liste.

On commence par créer une variable globale dans le formulaire pour stocker les touches pressées.

Option Compare Database Option Explicit Dim strList As String 'stocke les keycode

A chaque touche tapée par l’utilisateur, on parcourt la liste à la recherche du premier item correspondant aux caractères saisis.

Private Sub Modifiable1_KeyPress(KeyAscii As Integer) 
   Dim i As Long 'contrôle les touches 
   If KeyAscii = 27 Then strList = ""  'Sur Echap vide le contenu 
   If Not (KeyAscii > 64 And KeyAscii < 123) Then 
      Exit Sub 'ce n'est pas un caractère A-Z a-z (à affiner) 
   End if
   strList = strList & Chr(KeyAscii) '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 
         'pour un liste  Me.Modifiable1.ListIndex = i 'on s'y positionne 
         'pour une liste déroulante 
         Me.Modifiable1 = Me.Modifiable1.Column(0, i) 
         Exit For 'et on sort 
      End If 
   Next 
End Sub

La méthode suivante donne la valeur de la colonne 2 de la ligne i.

Column(1, i)

Like est un opérateur logique commun à SQL et VBA.

Like "*" & strList & "*"

Par sécurité on vide les caractères saisis sur la prise et la perte du focus.

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

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.

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 …

Avertissement

L’utilisation de like successif, 1 like par touche pressée, est très consommatrice pour la base de données. Il peut y avoir de très fort ralentissement sur de gros volumes de données. A vous de juger si il est vraiment opportun d’utiliser cette méthode.

Bonne utilisation !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *