Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Ouvrir et fermer automatiquement un formulaire
Pour améliorer l'ergonomie des
applications Access, nous proposons de voir comment il est possible d'enclencher l'
ouverture et la fermeture automatiques de
formulaires complémentaires.
Sur l'exemple illustré par la capture, l'utilisateur travaille sur un
formulaire affichant les informations et résultats des commerciaux qu'il peut faire défiler. Dès lors qu'il survole la
zone de l'identifiant, un
formulaire annexe apparaît aussitôt et isole les données du commercial en cours de consultation. Il s'agit donc d'une
ouverture automatique ciblée. Ce
second formulaire est voué à modifier l'objectif fixé au salarié pour le
changer en base de données. Et dès que l'utilisateur clique sur un emplacement vide de ce second formulaire, celui-ci se
ferme automatiquement et rend la main au formulaire principal.
Base de données Access à télécharger
Pour la mise en place de ce mécanisme, nous suggérons d'appuyer l'étude sur une
base de données offrant ces deux
formulaires.
Le
volet de navigation sur la gauche de l'écran, accueille une table, une requête et deux formulaires. Le
formulaire f_com est le formulaire principal de consultation.
- Double cliquer sur le formulaire f_com pour l'exécuter,
Il restitue les informations de la
table Commerciaux que l'utilisateur peut faire défiler avec la petite barre de navigation placée en bas à gauche du formulaire.
L'enjeu ici est d'ouvrir le
formulaire f_valid au survol de la zone de l'identifiant par la souris. Et à l'ouverture, ce formulaire complémentaire doit être calé sur le numéro d'enregistrement qui était en cours de consultation depuis le formulaire principal.
- Double cliquer sur le formulaire f_valid pour l'ouvrir,
Il est lui aussi construit sur la table des commerciaux. Il s'affiche en
mode fenêtre. Lorsqu'il est appelé indépendamment comme ici, il se cale sur le premier enregistrement. C'est ce que nous devrons corriger lors de l'appel pour faire coïncider les identifiants.
Il est destiné à recalibrer l'
objectif du commercial dans la dernière zone de saisie, celle qui est vide. C'est d'ailleurs la seule zone de ce formulaire qui peut être modifiée. Après saisie du nouvel objectif et clic sur le
bouton Valider, c'est une
macro tout à fait fonctionnelle qui réalise la
mise à jour dans la
table Commerciaux pour l'enregistrement concerné.
Ouvrir un formulaire en VBA
Nous l'avons déjà démontré à maintes reprises, l'
objet DoCmd est quasiment incontournable en
VBA Access. Il offre de nombreuses
propriétés et
méthodes pour manipuler les
objets de la base de données. Et précisément, sa
méthode OpenForm permet d'organiser l'appel d'un formulaire.
- Fermer le formulaire f_valid en cliquant sur la croix de sa fenêtre,
- A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans les propositions, choisir le mode Création,
- Sur le formulaire en conception, sélectionner la première zone de texte nommée com_id,
- Activer ensuite l'onglet Evénement de sa feuille de propriétés,
- Cliquer dans la zone de son événement Sur souris déplacée pour l'activer,
- Dès lors, cliquer sur le petit bouton situé à l'extrémité droite,
- Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
De fait, nous basculons dans l'
éditeur VBA Access, plus précisément dans les bornes de la
procédure événementielle com_id_MouseMove. Son code se déclenchera au
survol de la souris de la
zone com_id, celle de l'identifiant. C'est sur cette action simple et ergonomique que nous souhaitons en effet proposer l'affichage du
formulaire complémentaire, le
formulaire f_valid.
- Dans les bornes de la procédure, ajouter l'instruction VBA suivante :
DoCmd.OpenForm "f_valid"
En paramètre de la
méthode OpenForm, nous indiquons naturellement le
nom du formulaire à ouvrir.
- Enregistrer les modifications (CTRL + S) et revenir sur le formulaire en conception (ALT + Tab),
- L'enregistrer à son tour puis l'exécuter avec la touche F5 du clavier,
- Avec la barre de navigation en bas à gauche, atteindre par exemple le sixième commercial,
- Puis, survoler la zone de son identifiant,
Le formulaire secondaire apparaît aussitôt en effet. Mais à ce stade et fort naturellement, il ne correspond pas avec le premier. Il ne restitue pas les informations du commercial appelé.
Ouvrir un formulaire sur un enregistrement précis
Pour
ouvrir un formulaire sur un emplacement précis, nous devons régler une
clause Where dans l'un des
paramètres de la
méthode OpenForm. Cette
clause Where doit établir la jonction entre l'
identifiant appelant du formulaire f_com et l'
identifiant appelé du formulaire f_valid.
- Revenir dans l'éditeur VBA Access,
- Puis, adapter la précédente syntaxe comme suit :
DoCmd.OpenForm "f_valid", , , "[com_id]=" & Me.com_id
Nous ignorons les deux paramètres suivants pour atteindre celui de la
clause Where (Where Condition). Nous établissons la correspondance entre l'identifiant à rejoindre ("[com_id]=") et celui en cours de consultation sur le
formulaire appelant (& Me.com_id). Me désigne en effet l'objet actif au moment de l'appel. En l'occurrence ici, il s'agit du
formulaire f_com.
Cette fois et comme vous le constatez, la jonction est établie. Le
formulaire appelé restitue bien les informations du
formulaire appelant.
Fermeture automatique du formulaire
Toujours pour des raisons d'ergonomie mais aussi d'originalité, nous souhaitons maintenant entreprendre la
fermeture de ce formulaire de modification, au clic sur une zone vide de son arrière-plan. C'est toujours l'
objet DoCmd qui intervient mais cette fois avec sa
méthode Close.
- Fermer le formulaire f_valid pour revenir sur le formulaire f_com,
- Dans le volet de navigation, cliquer droit sur le formulaire f_navig,
- Dans le menu contextuel, choisir le mode Création,
- Cliquer sur l'entête de la zone Détail pour la sélectionner explicitement,
De cette manière, l'entête du formulaire restera indifférent aux actions de la souris entreprises par l'utilisateur.
- Activer l'onglet Evénement de sa feuille de propriétés,
- Cliquer sur le petit bouton de son événement Sur souris appuyée,
- Dans la boîte de dialogue, choisir le Générateur de code et valider par Ok,
Nous revenons ainsi dans l'
éditeur VBA Access mais cette fois entre les bornes de la
procédure événementielle Détail_MouseDown. Son
code VBA se déclenchera
au clic de l'utilisateur sur une zone vide du formulaire. Il est question de le fermer pour revenir sur le formulaire principal.
- Dans les bornes de cette procédure, ajouter l'instruction VBA suivante :
DoCmd.Close acForm, Me.Name
Très simplement, nous exploitons donc la
méthode Close de l'
objet DoCmd. En premier paramètre, nous lui indiquons la nature de l'objet à fermer, soit un
formulaire. En second paramètre, nous renseignons le
nom de ce formulaire à fermer, grâce à la
propriété Name de l'
objet contextuel Me.
- Enregistrer les modifications et basculer sur le formulaire,
- L'enregistrer à son tour puis basculer sur le formulaire f_com toujours en exécution,
- Atteindre par exemple le huitième commercial avec la barre de navigation,
- Survoler la zone de l'identifiant pour afficher le formulaire f_valid,
Si vous cliquez sur une
zone vide du formulaire, il se ferme et l'affichage est rendu au
formulaire principal f_com.
Si vous définissez un nouvel objectif, que vous le validez et que vous fermez le formulaire, vous constatez que le montant n'est pas pris en compte sur le formulaire parent. L'affichage est simplement conservé en mémoire malgré la mise à jour de l'information dans la table source. Nous verrons comment
actualiser les enregistrements d'un formulaire avec la prochaine astuce.