Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1072 connectés 

 



Dernière réponse
Sujet : Module standard, module de classe et Userform
jpl38 Merci pour ta réponse très matinale

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
jpl38 Merci pour ta réponse très matinale
kiki29 Salut, si cela peut aider :
Office et les modules de classes
https://tissotemmanuel.developpez.c [...] de-classe/
jpl38 Eureka !
https://docs.microsoft.com/en-us/pr [...] 3(v=vs.60)
rufo 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.
jpl38 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 :
  1. UserForm1.UFCoucou

j'obtiens

Code :
  1. Coucou de UserForm1

Donc UserForm1 se comporte comme un objet.
 
Si je tape

Code :
  1. set uf = new UserForm1
  2. uf.UFCoucou

j'obtiens

Code :
  1. Coucou de UserForm1

et là, UserForm1 se comporte comme une classe.

rufo 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ù. :/
jpl38 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

Code :
  1. Sub MdCoucou()
  2.   Debug.Print "Coucou de Module1"
  3. End Sub


Dans UserForm1, j'écris la procédure  

Code :
  1. Sub UFCoucou()
  2.   Debug.Print "Coucou de UserForm1"
  3. End Sub


et dans Classe1 la procédure  

Code :
  1. Sub ClCoucou()
  2.   Debug.Print "Coucou de Classe1"
  3. End Sub


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  
 

Code :
  1. UserForm1.UFCoucou


   Le message attendu s'affiche.
3. Pour la procédure ClCoucou, la première méthode échoue, et si je tape  
 

Code :
  1. Classe1.ClCoucou


   dans la fenêtre exécution, un message me dit  
      Erreur dexécution '424' :
      Objet requis
   Je tape donc  
 

Code :
  1. Set cl = New Classe1


   puis
 

Code :
  1. cl.clCoucou


   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


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR