Les UserForms et la mémoire

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Eric_49

XLDnaute Junior
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"
VB:
a$ = UserForm1.Label1.Caption
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 :
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.
 

Pièces jointes

Bonjour.
En fait c'est toute mention externe du UserForm pour quelque raison que ce soit qui provoque son chargement et son initialisation, comme s'il existait dans un module standard une déclaration Public UserForm1 As New UserForm1
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

V
Réponses
2
Affichages
2 K
VOILLOT
V
D
Réponses
11
Affichages
8 K
D
P
Réponses
14
Affichages
3 K
T
Réponses
2
Affichages
1 K
Tsoin42
T
J
Réponses
4
Affichages
2 K
Jonathan1986
J
J
Réponses
2
Affichages
2 K
jimmy59940
J
Retour