Bonjour,
J'apprends le VBA depuis quelques mois, en grande partie grâce aux tutos trouvés ici, et dans le but d'automatiser des tâches sous Excel.
Depuis peu j'utilise des UserForms.
Pour passer des informations à la procédure ou à la fonction qui appelle le UserForm, j'utilise la propriété Tag du UserForm.
Ce qui m'a étonné dans le tuto que j'ai trouvé sur les UserForm, c'est qu'il était conseillé de le détruire dès l'appui sur les boutons de validation ou d'annulation. Et pourtant, après ça, la propriété monUserForm.Tag est toujours accessible pour la procédure appelante. Ca m'a étonné, mais je suis programmeur débutant, et le nettoyage de la mémoire n'est pas le premier de mes soucis (j'ai tort, je sais), donc j'ai laissé tomber.
Là où ça m'embête, c'est que dans mes différents tests en cours d'écriture, j'ai pu accéder à UserForm.Tag alors que normalement plus aucun code ne devait continuer à s'exécuter. Donc ça pourrait interférer avec les procédures lancées ultérieurement, en donnant une valeur à une variable qui ne devrait pas encore en avoir.
Du coup, je me rends compte qu'on peut régler le problème avec
Set monUserForm = Nothing
Là, UserForm.Tag semble vide, en tout cas ça renvoie un champ vide dans la console de débug.
Pourtant sur les différents tutos que j'ai lus sur UserForm, aucun ne dit qu'il faut détruire l'objet en le mettant à Nothing. Et même, sur le tuto VBA venu d'ici, il est dit qu'il ne faut pas finaliser, vu qu'on ne crée rien, c'est Excel qui s'en charge.
Alors, quelle est la bonne pratique?
Est-ce que ma question a un lien avec la portée de mes procédures (je précise que les événements au sein du UserForm sont déclarées en Private, les procédures appelantes en Public)?
Merci pour vos réponses!
Partager