Ouvrir plusieurs fois le même formulaire – Episode 2

Dans l’épisode précédent – Ouvrir plusieurs fois le même formulaire -, on a pu voir quelques bases permettant d’ouvrir plusieurs instances du même formulaire, par exemple pour comparer deux fiches Produits ou Clients à l’écran. Mais il restait plusieurs défauts, du fait de la gestion de nos variables. Cet article va les régler…

Instances multiples du même formulaire

Le principe

Si nécessaire, relisez l’article précédent de cette série pour voir les principes et les défauts. En gros, la plupart des problèmes viennent du fait que la variable frm qui nous servait à ouvrir une copie du formulaire se trouve dans le formulaire lui-même. D’où deux limites principales :

  • un formulaire ne peut ouvrir qu’une seule copie de lui-même ;
  • la durée de vie de la copie (l’autre instance) est limitée à celle du formulaire de départ : si vous fermez celui-ci, vous fermez sa copie (et donc toutes les suivantes).

Pour lever ces limites, on va apporter ces 2 nouveautés :

  • on va stocker les copies de formulaires dans une variable globale, ce qui va régler le problème de la durée de vie ;
  • on va remplacer la variable frm (qui était de type Access.Form, valeur unique) par une variable de type Collection, qui permettra de stocker plusieurs copies.

La collection

  1. Créez un nouveau module standard (que vous pouvez appeler mod Forms, par exemple).
  2. Ajoutez ces déclarations en début de module :

Comme indiqué plus haut, la variable colForms est de type Collection, elle va pouvoir stocker plusieurs formulaires. Une collection est une liste de « clefs / valeurs ». Chaque formulaire devra donc être identifié par une clef unique pour pouvoir être stocké dans la collection.

Gestion de la collection

Il s’agit maintenant d’ajouter des nouveaux formulaires à la collection, et de gérer également leur suppression. Ajoutez ces deux fonctions à votre module :

  • La première fonction crée un nouveau formulaire frm Personnes, comme dans l’article précédent. La nouveauté, ici, est que le formulaire est ensuite ajouté à la collection globale colForms, pour qu’il persiste en mémoire.
  • Pour ajouter un objet à une collection, vous invoquez la méthode Add, à laquelle vous passez l’objet à stocker, et sa clef unique (une chaîne de caractères). Pour faire rapide, la clef utilisée ici est l’identifiant de fenêtre (Hwnd) donné par Access. Il s’agit d’une valeur de type Long, transformée en chaîne par Str().
  • La deuxième fonction fait l’inverse : elle retire un objet de la collection. Pour retirer un formulaire, il faudra donc fournir sa clef (son identifiant Hwnd).
Info
Les fonctions (Function) pourraient en fait être des procédures (Sub). Mais on s’en servira précisément comme fonctions dans un prochain article. Ceci explique cela…

Gestion du formulaire

Notre infrastructure est en place, il reste à adapter le formulaire pour ajouter ses copies à notre collection globale, et pour retirer les copies lorsque le formulaire est fermé.

Ouvrir plusieurs instances du même formulaire Access

  1. Adaptez le code de votre bouton (btnAutreFiche, dans l’article précédent), pour obtenir ceci :

  1. Alimentez également l’événement Sur fermeture du formulaire (dans les propriétés du formulaire), de cette manière :

Vous pouvez maintenant tester…
(argh : vos formulaires s’affichent toujours en superposition, encore une chose à améliorer ?)

Vous aimerez aussi...

Laisser un commentaire

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