Scénario

Dans l'article Ajouter un élément dans une liste déroulante, j'avais déjà traité une première technique proposée par Access, technique qui utilise l'événement VBA NotInList (Sur absence dans liste). Cette méthode a des avantages et des inconvénients :

  • Avantage : l'élément est ajouté directement dans la liste déroulante, et dans la table sous-jacente. L'opération est transparente pour l'utilisateur, pas de manipulation complexe.
  • Inconvénient : la technique ne permet d'alimenter qu'un seul champ de table (la valeur qui a été tapée par l'utilisateur dans la liste déroulante). En conditions réelles, il y a souvent plus d'une valeur à renseigner.

Dans ce nouvel article, nous allons voir une méthode pour résoudre cet inconvénient, quelle que soit la version d'Access, et quel que soit le scénario. Les Access 2007 et suivants proposent une variante supplémentaire, qui repose sur le même principe mais qui simplifie encore les choses ; attendez le prochain article !

Au départ, je dispose d'une table simple :

tbl_personnes.png

J'ai aussi préparé un formulaire qui contient une liste déroulante (ComboBox). Quelques infos sur cette liste, que vous pouvez construire à l'aide de l'Assistant Liste déroulante :

  • Elle est construite "sur" la table des personnes.
  • Elle reprend les 3 premiers champs de la table Personnes, mais le champ est masqué.
  • Elle est triée sur le nom puis le prénom.
  • Elle s'appelle cmbPersonnes (propriété Nom).

Formulaire

On va construire ensemble le bouton Ajouter (nommé techniquement btnAjouterPersonne) qui va justement permettre... d'ajouter une personne dans la liste.

Le formulaire

Dans Access, la logique veut que, pour alimenter une table, vous prépariez un formulaire dédié. C'est sur ce formulaire que l'opérateur aura tous les champs de saisie, et que vous pourrez gérer la validation des données.

Par conséquent, vous devez dans un premier temps construire un formulaire pour la saisie des personnes, formulaire basé sur la table tbl Personnes donnée plus haut. En voici un exemple :

Formulaire de saisie des personnes

Le bouton

Vous avez donc maintenant 2 formulaires dans votre base :

  • le formulaire avec la liste déroulante de personnes ;
  • le formulaire de consultation et de mise à jour des personnes.
  1. Rouvrez le premier formulaire (en mode Création), c'est lui qui doit recevoir notre bouton "Ajouter".
  2. Cliquez sur l'icône Bouton du ruban (onglet Création). Pour les versions d'Access plus anciennes, pas de ruban, mais l'icône existe également.
  3. Cliquez sur le fond du formulaire pour placer votre bouton. Ceci a en principe pour effet de démarrer l'Assistant Bouton de commande.
  4. Choisissez la catégorie Opérations sur formulaire, et l'action Ouvrir un formulaire. Cliquez sur le bouton Suivant.
    bouton_ouvrir_formulaire.png
  5. Choisissez ensuite le formulaire à ouvrir (dans mon cas : frm Personnes ; celui où la saisie des personnes devra se faire). Cliquez encore sur Suivant.
  6. Conservez l'option proposée : "Ouvrir le formulaire et afficher tous les enregistrements", et validez par Suivant.
  7. Choisissez ensuite un texte ou une image pour votre bouton. Dans mon cas, j'ai préféré un texte.
    bouton_ouvrir_texte.png
  8. Enfin, donnez un nom à votre bouton. Il s'agit du nom technique, utilisé notamment côté programmation : btnAjouterPersonne.

Normalement, à ce stade, si vous testez votre formulaire, le bouton ouvre bien le formulaire de saisie de personnes. Mais il reste 2 défauts à régler :

  1. Comme tout formulaire Access, le formulaire de personnes s'ouvre sur la première ligne de table saisie (la première personne). Dans notre cas, il serait plus pratique de se positionner sur une fiche vierge.
  2. Si vous saisissez une nouvelle personne, puis que vous fermez le formulaire de saisie, la liste déroulante ne contient pas cette personne. Il va falloir aider un peu Access pour que cela se fasse automatiquement !

Améliorer l'ouverture du formulaire de saisie

On a donc décidé que le formulaire de saisie se positionnerait sur un enregistrement vide, à l'ouverture. Ceci peut se régler de plusieurs manières. Ici, on va le faire par le code du bouton.

Si vous êtes sur un Access récent (2010 ou plus), ce code est en fait une macro :

  1. Faites apparaître les propriétés du bouton, onglet Événement.
  2. Cliquez sur les points de suspension à droite de l'événement Sur clic (donc à droite de [Macro incorporée]).
  3. Modifiez la propriété Mode Données (qui doit être vide pour l'instant), en y mettant la valeur Ajout.
    macro_ouvrir_formulaire.png
  4. Fermez la fenêtre de macro, en acceptant les changements.

Si vous avez un Access plus ancien, le code du bouton est écrit en VBA. Dans ce cas :

  1. Reprenez les étapes 1 et 2 précédentes, sachant que la mention [Macro incorporée] sera remplacée par [Procédure événementielle].
  2. Modifiez la ligne DoCmd.OpenForm... comme ceci :
DoCmd.OpenForm stDocName, acNormal, ,,acFormAdd

Repassez en mode Formulaire, et cliquez sur le bouton Ajouter. Vérifiez que ce formulaire est bien vide à l'ouverture.

Info
Par contre, lorsque vous ouvrez le formulaire frm Personnes directement (par un double-clic), on est toujours positionné sur le premier enregistrement (c'est normal également : c'est le bouton qui modifie le comportement à l'ouverture).

Actualiser la liste déroulante

L'aller fonctionne (ouvrir le formulaire de saisie). Il nous reste à régler le retour : l'actualisation de la liste déroulante :

  1. Ouvrez le premier formulaire en mode Création.
  2. Faites apparaître ses propriétés.
    event_activate.png
  3. Vérifiez que la sélection en cours est bien Formulaire (cf. repère 1 sur l'illustration).
  4. Activez l'onglet Événement (repère 2 sur l'illustration).
  5. Réglez l'événement sur Procédure événementielle (repère 3).
  6. Cliquez sur les points de suspension (repère 4).
  7. Dans le code Visual Basic, tapez ceci (rappelez-vous que cmbPersonnes est le nom de la liste déroulante)  :
Private Sub Form_Activate()
    On Error Resume Next
    Me.cmbPersonnes.Requery
End Sub

Tester !

  1. Passez en mode Formulaire.
  2. Cliquez sur le bouton Ajouter.
  3. Créez une personne (et validez-la, bien sûr : tant que la saisie n'est pas terminée, les données du formulaire ne sont pas transférées dans la table, et elle ne peuvent donc pas s'afficher dans la liste déroulante... C'est normal).
  4. Fermez le formulaire de saisie (ou revenez simplement sur le formulaire initial).
  5. Déroulez la liste : les nouvelles personnes y figurent. Pratique, non ?