Salut
Dans le code que tu donnes, tu crées une instance implicite au moment de l'ouverture du classeur avec la déclaration qui est faite dans le module (à cause de l'utilisation de mot clé "new").
Puis quand l'événement Open est appelé, tu détruits cette instance et tu en crées une nouvelle.
Donc, soit dans le code du module tu te contentes de déclarer le type d'objet mais sans créé une instance
Puis dans le open tu crées l'instance
Soit tu te contente de la déclaration
Dans le module et tu ne met rien dans le Open.
Dans le principe c'est fonctionnel maintenant je sais que si Pierre Fauconnier passe ici, il te dirait sans doute qu'il vaut mieux gérer ta variable avec une fonction et une variable static. J'espère qu'il interviendra sur cette discussion, j'utilise souvant les classes pas souvent de cette façon, alors la compréhension que j'ai de cette méthode n'est peut-être pas complète.
Dans un Module
1 2 3 4 5
| Public Function Book as book
Static statBook as CBook
If statBook is nothing then set statBook = new CBook
Set Book = statBook
End if |
N'importe où dans le code
Book.titre = "Les Mots sont des fenêtre. Et parfois se sont des murs"
Cette ligne de code crée une instance et renseigne le titre de l'ouvrage.
Quand dans ton code tu fais appelles à Book, il vérifie systématiquement que statBook est bien instancié. Si ça n'est pas le cas, il crée une nouvelle instance.
Bien sûr si tu détruits ou si ton instance se plante*, les données que tu as stocké dedans sont perdues et lors du prochain appel à Book, tu vas te retrouver avec une nouvelle instance "vierge".
Je dirais que ça dépend de ce que tu souhaites faire.
Quand je vois une classe Book, je me dis qu'il doit y avoir une classe Books pour collectionner les Book. Dans ce cas la, l'instance Book sera créée, puis passée à books qui assurera sa destruction. Dans ce cas de figure C'est la classe Books qui sera public (ou static).
Si tu veux plus d'info sur l'utilisation des classes dans VBA tu as le tuto de Pierre F. sur le sujet (il n'y aborde pas la méthode "Static"). Pierre avait donné un exemple dans une discussion mais je ne remet pas la main dessus...
* :S'agissant de ton problème de perte d'instance, la comme ça je dirais que si tu es en phase de tests et que lors d'une erreur si à un moment donné tu choisis de terminer l'exécution du code.
- soit avec le bouton "Fin" dans le message d'erreur
- soit après avoir choisi débogage puis avoir arrêté l'exécution avec le bouton réinitialiser [le carrè comme sur les lecteur audio])
Alors les variables sont réinitialisées et ton instance de classe est détruite... d’où l'importance de bien faire sa gestion d'erreur pour éviter que l'utilisateur ne se retrouve fasse à la fenêtre proposant de mettre fin ou de déboguer.
++
Qwaz
Partager