Manipuler les colonnes d’une liste

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 :

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 :

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).
Rappel
La constante vbCrLf provoque un retour à la ligne dans la boîte MsgBox.

Vous aimerez aussi...

2 réponses

  1. Hervé Inisan dit :

    wiiking73 > Le champ Texte23 est vide à l’ouverture du formulaire, j’imagine ?

  2. wiiking73 dit :

    Bonjour Hervé,

    Je reviens à la charge avec un nouveau souci.
    Cette fois ci cela concerne une zone de liste fixe dans un formulaire. Celle ci me permet d’afficher un choix de taches de maintenance que je selectionne pour pouvoir acceder à la fiche de gamme détaillée de ces taches.
    Chaque tache à un niveau (1,2 ou 3) qui définit sa difficulté.
    quand l’intervenant se connecte, il correspond lui aussi à un niveau (définit par une variable public que j’appelle varniveau) qui va de 1 à 3.
    J’ai donc reussi par l’intermédiaire d’une requete dans ma liste :
    SELECT T_Taches.N°Taches, T_Machine.[Nom Machine], T_Taches.[Nom tache], T_Taches.Niveau
    FROM T_Machine INNER JOIN T_Taches ON T_Machine.N°Machine = T_Taches.[N° Machine]
    GROUP BY T_Taches.N°Taches, T_Machine.[Nom Machine], T_Taches.[Nom tache], T_Taches.Niveau
    HAVING (((T_Taches.Niveau)<=[Formulaires]![Maintenance préventive]![Texte23]))
    ORDER BY T_Machine.[Nom Machine];
    à faire apparaitre uniquement les taches de niveau inférieur ou égal au niveau de l’intervenant.
    Mon problème est que lorsque j’ouvre mon formulaire, la liste est vide et je dois passer par le mode création puis revenir au mode formulaire pour que ma liste soit remplie.
    Je ne comprend pas ce qui se passe alors un peu d’aide serai la bienvenue
    merci

Laisser un commentaire

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