Ouvrir plusieurs fois le même formulaire

Parfois, il peut être pratique d’ouvrir plusieurs fois le même formulaire. Par exemple, pour comparer les fiches de deux clients, ou de trois produits. Ceci est possible depuis Access 97, mais nécessite un peu de VBA. Dans cet article, on va tâcher de voir le principe…

Instances multiples du même formulaire

Mise en place

Je dispose d’un formulaire simple, appelé frm Personnes. L’idée est d’ajouter un bouton, sur ce formulaire, pour ouvrir le même formulaire une nouvelle fois.

Ouvrir plusieurs instances du même formulaire Access

  1. Ouvrez votre formulaire en mode Création (je suppose que vous avez déjà placé un bouton dessus, en annulant l’Assistant Bouton de commande qui ne servira pas ici).
  2. Faites un clic du bouton droit sur votre bouton, et choisissez Propriétés.
  3. Dans le volet Propriétés, à droite de votre écran sur les Access récents, activez l’onglet Autres, et donnez un nom (propriété Nom, donc) à votre bouton. Le mien s’appelle btnAutreFiche.
  4. Activez ensuite l’onglet Événement.
  5. Cliquez sur les points de suspension à droite de l’événement Sur clic, et choisissez Générateur de code.
  6. Adaptez l’événement Sur clic pour qu’il ressemble à ceci (Form_frm_Personnes est le nom du formulaire, il va être proposé dans une liste par Access) :

Important

La variable frm doit être déclarée hors du bloc Sub / End Sub, donc en tout début de module.

Si elle était déclarée dans le bloc Sub / End Sub, le bouton ouvrirait une copie du formulaire, stockerait cette copie dans frm… puis libèrerait aussitôt la variable frm, puisque le End Sub est atteint. Le nouveau formulaire serait donc fermé… à peine ouvert !

En plaçant la variable hors procédure, vous garantissez que le formulaire copie existe… au moins tant que le formulaire de départ est ouvert.

Quelques imperfections

Hop, vous pouvez tester ! Tel que le système est en place pour l’instant, il y a encore quelques défauts (normaux). En effet, dans chaque nouveau formulaire ouvert se trouve une variable frm (de type Form), et une seule. Ceci veut dire que :

  • Chaque formulaire ne peut lui-même ouvrir qu’une copie de frm Personnes (cette copie étant « stockée » dans la variable frm). Concrètement, si vous ouvrez un Form1, celui-ci a une variable frm, et un bouton pour ouvrir un Form2. Le Form2 aura sa propre variable frm, et un bouton pour ouvrir Form3… Et ainsi de suite.
  • Par conséquent, les différents formulaires doivent pour l’instant s’ouvrir en cascade : Form1 ouvre Form2, qui ouvre Form3, etc.
  • Si vous appuyez sur le bouton de Form1, alors que Form2 et Form3 ont déjà été ouverts, vous allez – logiquement aussi – réinitialiser la variable frm du Form1, donc refermer Form2 et Form3.. Et ouvrir un Form2 tout neuf !
  • De la même manière, comme chaque formulaire maintient un lien vers sa copie, si vous fermez le tout premier formulaire, vous fermez toute la série.
Info
Les différentes instances de formulaires s’ouvrent les unes par-dessus les autres. Pensez à les déplacer pour vérifier que tout fonctionne !

Malgré ces défauts, c’est le principe qui est intéressant ici. Mais bon, on a encore du boulot pour améliorer ça ! Un autre article bientôt… 🙂

Vous aimerez aussi...

Laisser un commentaire

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