{"id":92,"date":"2025-06-14T15:59:15","date_gmt":"2025-06-14T15:59:15","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=92"},"modified":"2025-07-30T21:39:22","modified_gmt":"2025-07-30T21:39:22","slug":"access-se-positionner-sur-litem-dune-liste-deroulante-en-entrant-une-partie-du-texte","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/14\/access-se-positionner-sur-litem-dune-liste-deroulante-en-entrant-une-partie-du-texte\/","title":{"rendered":"ACCESS : Se positionner sur l&rsquo;item d&rsquo;une liste d\u00e9roulante en entrant une partie du texte."},"content":{"rendered":"\n<p>Derni\u00e8rement, un internaute me demandait s&rsquo;il \u00e9tait possible de modifier le fonctionnement de l&rsquo;auto compl\u00e9tion dans les listes d\u00e9roulante. S&rsquo;agissant d&rsquo;une fonctionnalit\u00e9 interne d&rsquo;Access, il est \u00e9vident que ce n&rsquo;est pas possible nativement.<\/p>\n\n\n\n<p>Par contre on peut toujours contourner le probl\u00e8me \u00e0 l&rsquo;aide du code VBA. Voici cette astuce bas\u00e9e sur l&rsquo;utilisation de l&rsquo;\u00e9v\u00e8nement <strong>KeyPress<\/strong> (touche press\u00e9e) de la liste.<\/p>\n\n\n\n<p>On commence par cr\u00e9er une variable globale dans le formulaire pour stocker les touches press\u00e9es.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Compare Database \nOption Explicit \n\nDim strList As String 'stocke les keycode<\/pre>\n\n\n\n<p>A chaque touche tap\u00e9e par l&rsquo;utilisateur, on parcourt la liste \u00e0 la recherche du premier item correspondant aux caract\u00e8res saisis.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Private Sub Modifiable1_KeyPress(KeyAscii As Integer) \n   Dim i As Long 'contr\u00f4le les touches \n   If KeyAscii = 27 Then strList = \"\"  'Sur Echap vide le contenu \n   If Not (KeyAscii > 64 And KeyAscii &lt; 123) Then \n      Exit Sub 'ce n'est pas un caract\u00e8re A-Z a-z (\u00e0 affiner) \n   End if\n   strList = strList &amp; Chr(KeyAscii) 'ajoute la touche press\u00e9e \n   For i = 0 To Me.Modifiable1.ListCount - 1 'parcours les items \n      If Me.Modifiable1.Column(1, i) Like \"*\" &amp; strList &amp; \"*\" Then \n         'l'item correspond \n         'pour un liste  Me.Modifiable1.ListIndex = i 'on s'y positionne \n         'pour une liste d\u00e9roulante \n         Me.Modifiable1 = Me.Modifiable1.Column(0, i) \n         Exit For 'et on sort \n      End If \n   Next \nEnd Sub<\/pre>\n\n\n\n<p>La m\u00e9thode suivante donne la valeur de la colonne 2 de la ligne i.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Column(1, i)<\/pre>\n\n\n\n<p>Like est un op\u00e9rateur logique commun \u00e0 SQL et VBA.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Like \"*\" &amp; strList &amp; \"*\"<\/pre>\n\n\n\n<p>Par s\u00e9curit\u00e9 on vide les caract\u00e8res saisis sur la prise et la perte du focus.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Private Sub Modifiable1_GotFocus() \n   strList = \"\" 'perte du focus on vide la liste de touche \nEnd Sub \n\nPrivate Sub Modifiable1_LostFocus() \n   strList = \"\" 'perte du focus on vide les keycode \nEnd Sub<\/pre>\n\n\n\n<p>Comme vous le voyez, rien de complexe, on utilise juste les nombreuses possibilit\u00e9s d&rsquo;Access pour contourner le probl\u00e8me. Il va sans dire que l&rsquo;autocompl\u00e9tion classique de la liste fonctionne toujours.<\/p>\n\n\n\n<p>N&rsquo;h\u00e9sitez pas \u00e0 affiner le contr\u00f4le des touches tap\u00e9es, en effet, dans cet exemple seul l&rsquo;alphabet classique est pris en compte, il manque les caract\u00e8res accentu\u00e9s, les chiffres &#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Avertissement<\/h2>\n\n\n\n<p>L&rsquo;utilisation de like successif, 1 like par touche press\u00e9e, est tr\u00e8s consommatrice pour la base de donn\u00e9es. Il peut y avoir de tr\u00e8s fort ralentissement sur de gros volumes de donn\u00e9es. A vous de juger si il est vraiment opportun d&rsquo;utiliser cette m\u00e9thode.<\/p>\n\n\n\n<p>Bonne utilisation !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Derni\u00e8rement, un internaute me demandait s&rsquo;il \u00e9tait possible de modifier le fonctionnement de l&rsquo;auto compl\u00e9tion dans les listes d\u00e9roulante. S&rsquo;agissant d&rsquo;une fonctionnalit\u00e9 interne d&rsquo;Access, il est \u00e9vident que ce n&rsquo;est pas possible nativement. Par contre on peut toujours contourner le &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/14\/access-se-positionner-sur-litem-dune-liste-deroulante-en-entrant-une-partie-du-texte\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,6],"tags":[11,7],"class_list":["post-92","post","type-post","status-publish","format-standard","hentry","category-access","category-code-vba","tag-access","tag-code-vba"],"_links":{"self":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/92","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/comments?post=92"}],"version-history":[{"count":6,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/92\/revisions"}],"predecessor-version":[{"id":272,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/92\/revisions\/272"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=92"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=92"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}