Module standard, module de classe et Userform - VB/VBA/VBS - Programmation
Marsh Posté le 16-03-2022 à 22:46:35
Ca vient de la portée des variables et des fonctions. C'est tout à fait normal.
UserForm est un objet qui instancie une classe. Les méthodes d'une classe ne peuvent être appelées sans qu'une la classe soit instanciée via un objet sauf si les méthodes sont "static".
Si tu n'as aucune notion de POO (programmation orientée objet), tu vas bien galérer pour comprendre qu'est-ce qui est accessible depuis où.
Marsh Posté le 16-03-2022 à 23:27:09
Merci pour ta réponse.
Le problème, c'est de savoir si un userform est une classe, ou un objet.
Dans la fenêtre exécution, si je tape
Code :
|
j'obtiens
Code :
|
Donc UserForm1 se comporte comme un objet.
Si je tape
Code :
|
j'obtiens
Code :
|
et là, UserForm1 se comporte comme une classe.
Marsh Posté le 17-03-2022 à 07:56:39
VBA étant un langage mal branlé, UserForm1 est peut-être à la fois une classe et un objet. Il est au moins une classe vu que tu peux faire un New.
J'ai un projet en VBA sous Outlook avec un UserForm : je vais regarder aujourd'hui.
Marsh Posté le 17-03-2022 à 19:11:30
ReplyMarsh Posté le 19-03-2022 à 06:53:06
Salut, si cela peut aider :
Office et les modules de classes
https://tissotemmanuel.developpez.c [...] de-classe/
Marsh Posté le 16-03-2022 à 09:37:02
Bonjour.
Dans un document Word, je crée un module standard nommé Module1, une UserForm nommée UserForm1 et un module de classe nommé Classe1.
Dans Module1, j'écris la procédure
Dans UserForm1, j'écris la procédure
et dans Classe1 la procédure
1. Dans l'éditeur VBE, si je mets le curseur dans la procédure MdCoucou, et tape F5, le message attendu s'affiche normalement dans la fenêtre Exécution.
2. Pour la procédure UFCoucou, la méthode précédente échoue.
Je vais maintenant dans la fenêtre Exécution, et je tape
Le message attendu s'affiche.
3. Pour la procédure ClCoucou, la première méthode échoue, et si je tape
dans la fenêtre exécution, un message me dit
Erreur dexécution '424' :
Objet requis
Je tape donc
puis
et là, ça fonctionne.
Voici mes questions :
Comment expliquer ces différences de comportements ?
Pour le module de classe, il faut instancier la Classe1 pour utiliser la procédure ClCoucou.
Je croyais que les UserForm étaient des modules de classe spéciaux. Mais la méthode 2 montre que je suis dans l'erreur puisque l'instruction UserForm1.UFCoucou fonctionne sans avoir à instancier un objet Userform1.
Quelle est la nature exacte des UserForm ? Classe ou objet ?
Merci d'avance pour vos réponses