Dans un formulaire, j'ai une liste (déroulante ou non). Comment obtenir des informations sur la ligne sélectionnée ?
La liste
Voici un formulaire contenant une liste d'acteurs.
Lorsqu'on clique sur le bouton Afficher, on obtient une boîte avec certaines informations données par la liste.

La liste est un objet Zone de liste, ou ListBox ; on aurait pu aussi utiliser un objet Liste déroulante, ou ComboBox (le principe est le même). La liste se nomme lstActeurs, et elle a été construite via l'Assistant Zone de liste. Pour information, la requête SQL qui l'alimente est :
SELECT [tbl Acteurs].[Numéro Acteur],
[tbl Acteurs].[Nom Acteur],
[tbl Acteurs].[Prénom Acteur],
[tbl Acteurs].Sexe
FROM [tbl Acteurs]
ORDER BY [tbl Acteurs].[Nom Acteur],
[tbl Acteurs].[Prénom Acteur];
Toujours pour info, voici quelques autres propriétés typiques de la liste :
Nom = lstActeurs
Nbre colonnes = 4
En-têtes colonnes = Non
Largeurs colonnes = 0cm;3cm;3.5cm;1cm
La première colonne - [Numéro Acteur] - a une taille de 0 cm, elle est donc masquée.
Origine source = Table/Requête
Contenu = SELECT ... (la requête SQL ci-dessus)
Colonne liée = 1
Ceci implique que, lorsqu'on sélectionne un acteur, la liste prend pour valeur le numéro de cet acteur (soit le 1er champ de la requête SQL).
Le bouton
Le bouton placé sous la liste affiche les informations sélectionnées dans la liste. Voici le code de son événement Sur clic :
Private Sub btnAffichage_Click()
' Vérifier si un acteur a bien été sélectionné
If Me.lstActeurs.ListIndex = -1 Then
MsgBox "Aucune ligne n'a été sélectionnée !", vbInformation
Exit Sub
End If
' Afficher quelques infos sur l'acteur
MsgBox "Ligne sélectionnée : " & Me.lstActeurs.ListIndex & vbCrLf _
& "Nombre de lignes : " & Me.lstActeurs.ListCount & vbCrLf _
& "Numéro de l'acteur : " & Me.lstActeurs.Column(0) & vbCrLf _
& "Nom de l'acteur : " & Me.lstActeurs.Column(1) & vbCrLf _
& "Prénom de l'acteur : " & Me.lstActeurs.Column(2)
End Sub
Un peu d'explications
- Si aucune ligne n'est sélectionnée, la propriété
ListIndex de la liste vaut -1 (on en profite ici pour sortir de la procédure).
Sinon, elle donne le numéro de la ligne sélectionnée, sachant que la première ligne est numérotée 0.
- La propriété
ListCount, elle, donne le nombre de lignes dans la liste. Vous avez également une propriété ColumnCount qui donne... le nombre de colonnes (dingue, non ?).
- La propriété
Column(x) renvoie la valeur de la colonne x, pour la ligne sélectionnée, sachant que x démarre également à 0. Donc lstActeurs.Column(0) donne le numéro de l'acteur sélectionné (même si cette colonne est masquée). Et ainsi de suite...
Column() peut s'écrire également avec 2 paramètres au lieu d'un seul. Dans ce cas, le premier paramètre est toujours le numéro de colonne, le second est le numéro de la ligne. Donc l'instruction MsgBox Me.lstActeurs.Column(1, 3) afficherait le nom (2ème colonne) de l'acteur numéro 4 dans la liste.
- Vous pouvez en fait simplifier
Me.lstActeurs.Column(0) en écrivant seulement Me.lstActeurs. Vous obtiendrez la même valeur, du fait que la première colonne - donc la colonne 0 ! - donne sa valeur à la liste (rappelez-vous de la propriété Colonne liée, plus haut).
La constante vbCrLf provoque un retour à la ligne dans la boîte MsgBox.
Derniers commentaires