Sélectionner un valeur connue dans une liste

Autant la sélection automatique d’un item dans une liste modifiable est facile grâce à une simple affectation, autant avec une liste classique c’est plus compliqué.

Je vous livre l’astuce consistant à mettre un peu de code dans une liste déroulante reprenant les valeurs de la liste.

Dans l’événement Après MAJ de la liste déroulante ou d’une zone de texte mettre le code VBA ci-dessous :

Dim i As Long
Dim i_save As Long  
Me.lstMultiple.Selected(0) = True    
'désélection de la liste multiple 
For i = 1 To Me.lstMultiple.ListCount - 1  'parcours la liste multiple
   Me.lstMultiple.Selected(i) = False      
   'déselection de l'élement courant   
   If (Me.lstMultiple.ItemData(i) = CStr(Nz(Me.lstRecherche, ""))) Then   
      's'il est identique à ce que je cherche        
      i_save = i  'je repère la ligne     
   End If 
Next 
Me.lstMultiple.Selected(i_save) = True  'en sortant je sélectionne la liste

lstMultiple est la liste classique et lstRecherche est la liste modifiable ou la zone de texte ou vous sélectionnez la valeur à trouver.

L’astuce consiste à parcourir la liste à la recherche de la valeur, d’en capter l’indice de la ligne pour l’affecter à cette même liste.

2 réflexions sur « Sélectionner un valeur connue dans une liste »

  1. Bonjour,
    Votre blog m’a vraiment aide dans les recherches de données.
    En ce moment, je m’intéresse au filtre (FilterOn et Filter).
    Pourriez vous m’en dire un plus ?
    Cordialement.

    • Bonjour,

      Filter et FilterOn sont 2 propriétés qui comme leur nom l’indique permettent de filtrer le enregistrement de la source d’un formulaire ou un état.
      A noter que Filter existe également dans les objets requête mais pas le FilterOn.
      Pour en revenir à nos 2 propriétés, Filter permet de définir un filtre au format SQL tandis FilterOn permet de l’activer/désactiver via une valeur booléenne.

      En VBA on définira d’abord le Filter avant de l’activer avec FilterOn pour la simple raison qu’activation (FilterOn) comme à la définition (Filter) le recordset (la source de données) est réinterrogé.


      'Mauvaise solution
      FilterOn = True 'interrogation du recordset, appel à la table, déclenchement d'une instruction SQL Select à destination du moteur SGBD
      Filter = "monchamp Like ""mavaleur*""" 'Nouvelle interrogation

      'Bonne solution
      ' avec un FilterOn=False
      Filter = "monchamp Like ""mavaleur*""" 'rien
      FilterOn = False 'Interrogation du recordset

      Vous trouverez un complément d’information ici :
      https://docs.microsoft.com/fr-fr/office/vba/api/Access.Form.Filter(property)

      Bonne lecture.

Laisser un commentaire

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