Salut
Je suggèrerais d'ajouter à la FAQ cette méthode qui n'est abordée qu'une seule fois me semble-t-il dans la forum et encore, c'est pas vraiment accessible pour quelqu'un qui n'a pas l'habitude de la programmation objet et de sa syntaxe.
Je suggèrerais donc une explication dans ce goût-là :
VBA permet d'ouvrir une seconde (ou plus) instance d'un même formulaire (ou d'un état).
Cette nouvelle instance sera indépendante du formulaire original mais aura une durée de vie liée à la portée de l'objet dans laquelle elle aura été déclarée (function, sub ou le formulaire original à partir duquel elle sera créée). Ex: si la déclarée est au niveau d'une sub, l'instance sera supprimée après l'exécution de End Sub. Donc en règle général, il vaut mieux la déclarer au niveau du formulaire.
Aucune des modifications apportées à la nouvelle instance n'aura d'impact sur le formulaire (état) original.
Par contre, cette méthode ne permet pas de passer d'argument du formulaire original vers la nouvelle instance en utilisant la propriété OpenArgs (cf. méthode Docmd.OpenForm). Aussi passer par l'enregistrement de ce paramètre dans une table.
Pour créer une nouvelle instance, il suffit donc de :
- Déclarer la variable correspondant à la nouvelle instance de formulaire au niveau de l'en-tête du formulaire original
Bien accoler Form_ au nom du formulaire original
Code : Sélectionner tout - Visualiser dans une fenêtre à part Dim MonNouveauFormulaire as Form_NomFormulaireOriginal
Pour un état, utiliser la syntaxe suivant :
Dim MonNouvelEtat as Report_NomEtatOriginal
- Instancier dans le code le nouveau formulaire à l'endroit où on en a besoin et le rendre visible
Donc, pas besoin d'ouvrir ce nouveau formulaire avec Docmd.OpenForm
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Set MonNouveauFormulaire = New Form_NomFormulaireOriginal MonNouveauFormulaire.Visible=True
Pour un état, utiliser la syntaxe suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim MonNouvelEtat = New Report_NomEtatOriginal MonNouvelEtat.Visible = True
Merci
Partager