Bonjour,
On connaît tous les instructions Show et Load qui chargent un formulaire en mémoire et l'instruction Unload pour le décharger.
Cependant, certaines instructions chargent implicitement le formulaire en mémoire sans qu'on ne s'en aperçoive. Et si un code est placé dans l'évènement "Initialise", il sera exécuté lors de la 1ère instruction. L'évènement "Activate", quant à lui, ne sera pas appelé.
Pour exemple, l'instruction suivante, qui extrait le contenu du "Label1" du formulaire "UserForm1"
Charge le formulaire en mémoire. Il y restera tant qu'un "Unload" n'aura pas été effectué (explicite ou via un QueryClose).
Selon l'application et le nombre de formulaires utilisés, la mémoire peut, à un certain moment, être bien occupée.
Ce n'est pas un problème en soi ; la mémoire sera vidée, de toute façon, à la fermeture du classeur.
Cependant, il faudra être vigilant sur l'exécution du code placé dans l'évènement "Initialise" (si code présent).
En reprenant l'exemple :
...
Plus loin dans l'application
...
Pour que le code d'initialisation soit réexécuté, il faudra le décharger de la mémoire avant (Unload UserForm1 avant le Show).
Un autre souci peut également survenir :
Si l'on souhaite enregistrer en "Dur" des données dans un formulaire, pour les récupérer à la prochaine ouverture du classeur, une erreur 91 "Variable objet ou variable de bloc With non définie" sera générée si celui-ci est en mémoire.
Il faudra s'assurer qu'il est bien déchargé avant d'exécuter l'instruction.
(L'usage d'un formulaire dédié, pour stocker des informations peut s'avérer très utile (Paramètres, dernières saisies, données diverses, etc.))
Dans le classeur joint, vous trouverez plusieurs macros explicatives sur le maniement des formulaires.
Exécutez le code en mode "Pas à Pas" en commençant par la procédure Test1.
J'espère que cela vous sera utile, surtout si vous débutez en VBA.
Eric
Ps : Pensez à débloquer le classeur après téléchargement.
On connaît tous les instructions Show et Load qui chargent un formulaire en mémoire et l'instruction Unload pour le décharger.
Cependant, certaines instructions chargent implicitement le formulaire en mémoire sans qu'on ne s'en aperçoive. Et si un code est placé dans l'évènement "Initialise", il sera exécuté lors de la 1ère instruction. L'évènement "Activate", quant à lui, ne sera pas appelé.
Pour exemple, l'instruction suivante, qui extrait le contenu du "Label1" du formulaire "UserForm1"
VB:
a$ = UserForm1.Label1.Caption
Selon l'application et le nombre de formulaires utilisés, la mémoire peut, à un certain moment, être bien occupée.
Ce n'est pas un problème en soi ; la mémoire sera vidée, de toute façon, à la fermeture du classeur.
Cependant, il faudra être vigilant sur l'exécution du code placé dans l'évènement "Initialise" (si code présent).
En reprenant l'exemple :
Code:
a$ = UserForm1.Label1.Caption ' 1er appel au formulaire ; il est chargé en mémoire et l'Initialise est exécuté
Plus loin dans l'application
...
Code:
UserForm1.Show ' Affiche le Formulaire. Seul l'évènement "Activate" est exécuté.
Pour que le code d'initialisation soit réexécuté, il faudra le décharger de la mémoire avant (Unload UserForm1 avant le Show).
Un autre souci peut également survenir :
Si l'on souhaite enregistrer en "Dur" des données dans un formulaire, pour les récupérer à la prochaine ouverture du classeur, une erreur 91 "Variable objet ou variable de bloc With non définie" sera générée si celui-ci est en mémoire.
Il faudra s'assurer qu'il est bien déchargé avant d'exécuter l'instruction.
(L'usage d'un formulaire dédié, pour stocker des informations peut s'avérer très utile (Paramètres, dernières saisies, données diverses, etc.))
Dans le classeur joint, vous trouverez plusieurs macros explicatives sur le maniement des formulaires.
Exécutez le code en mode "Pas à Pas" en commençant par la procédure Test1.
J'espère que cela vous sera utile, surtout si vous débutez en VBA.
Eric
Ps : Pensez à débloquer le classeur après téléchargement.