Ajouter un élément statique à une liste déroulante
Dans un formulaire, j’ai une liste déroulante indépendante (basée sur une liste de valeurs tapées manuellement, et non pas basée sur une table). Je souhaiterais en VBA ajouter des éléments à cette liste. Comment faire ?
A partir d’Access 2002
Depuis Access 2002, les listes déroulante disposent d’une nouvelle instruction – AddItem
– qui permet d’ajouter un élément à une liste déroulante.
A supposer que la liste déroulante ci-dessus se nomme cmbListe
, que vous avez créé un bouton de commande nommé btnTest
, et que c’est ce bouton qui doit ajouter les éléments « Lundi » et « Mardi » dans la liste (ça en fait des conditions !), vous programmerez l’événement Sur clic
du bouton btnTest
comme suit :
1 2 3 4 |
Private Sub btnTest_Click() Me!cmbListe.AddItem "Lundi" Me!cmbListe.AddItem "Mardi" End Sub |
Avant Access 2002
Access 97 et 2000 ne disposent pas de l’instruction AddItem
. Il faut alors redéfinir entièrement la propriété Contenu
(en anglais : RowSource
) de la liste déroulante. Pour obtenir le même résultat que précédemment (une liste contenant Essai 01, Essai 02, Essai 03, Lundi, Mardi), vous définirez l’événement Sur clic
du bouton btnTest
comme ceci :
1 2 3 |
Private Sub btnTest_Click() Me!cmbListe.RowSource = "Essai 01;Essai 02;Essai 03;Lundi;Mardi" End Sub |
Et si ma liste déroulante comporte 2 colonnes ?
Dans ce cas, la propriété Contenu
(RowSource
) vaut au départ quelque chose comme :
ABC;Essai 01;DEF;Essai 02;GHI;Essai 03
(ABC
, DEF
et GHI
sont les éléments de la 1ère colonne, tandis que les 'Essai 0x'
sont les éléments de la seconde colonne).
Le code Access 2002+ devient alors :
1 2 3 4 |
Private Sub btnTest_Click() Me!cmbListe.AddItem "UVW;Lundi" Me!cmbListe.AddItem "XYZ;Mardi" End Sub |
Le code Access 97/2000 devient :
1 2 3 4 |
Private Sub btnTest_Click() Me!cmbListe.RowSource = _ "ABC;Essai 01;DEF;Essai 02;GHI;Essai 03;UVW;Lundi;XYZ;Mardi" End Sub |
Et si je souhaite supprimer un élément de la liste ?
Z’en avez des questions, dites donc ! En repartant de l’exemple ci-dessus (liste à 2 colonnes), voici deux variantes pour supprimer la 1ère ligne (ABC;Essai
) de la liste. On utilise la méhode RemoveItem
, apparue uniquement depuis Access 2002, en lui transmettant soit le numéro de la ligne à supprimer, soit la clef qui identifie la ligne :
1 2 3 |
Private Sub btnTest2_Click() Me!cmbListe.RemoveItem(0) End Sub |
Notez que la 1ère ligne est numérotée 0.
On peut aussi écrire :
1 2 3 |
Private Sub btnTest2_Click() Me!cmbListe.RemoveItem("ABC") End Sub |
Dans Access 97/2000, pas de RemoveItem
. Il faut donc redéfinir à nouveau la propriété RowSource
, en « oubliant » un élément. Ce qui donne :
1 2 3 |
Private Sub btnTest_Click() Me!cmbListe.RowSource = "DEF;Essai 02;GHI;Essai 03;UVW;Lundi;XYZ;Mardi" End Sub |
- soit ajouter ses valeurs en mode Création ;
- soit la baser sur une table.
Merci Hervé
est que existe une solution en VBA pour récupérée la liste des valeur d’une liste déroulant d’une table pour alimentée la liste d’un formulaire, je précise la liste des valeur pas les élément saisie car la liste de table peut reçois plusieurs valeurs hors liste , je veut un code comme
Me.cboCommune.RowSource = fld.RowSource « Apres avoir instancie la base et la table » et Merci d’avance
Je ne vois pas l’utilisation de la liste. Si le formulaire est basé sur la table, la liste déroulante de la table devrait être reprise automatiquement sur le formulaire.
Ou bien il s’agit d’autre chose ?
Merci bien les amis
dominique > Effectivement, la syntaxe est moins cohérente que sous .NET ! On peut effectivement boucler sur les éléments de la liste et invoquer des
RemoveItem
, mais il est aussi possible de faire ça :Me.NomDeLaListe.RowSource = ""
Et si je souhaite effacer une liste entière ?
je pensais que le .cls ou .clear existerait et bien c’est raté.
Il ne faut quand même pas, j’espère, boucler sur tous les items et faire un RemoveItem ??
Ah!! quand on a gouté au vb.net et que l’on revient sur Access !!
Merci pour l’info 🙂