VBA d'Excel 2003 : Module de classe, Private Sub() : ?

VBA d'Excel 2003 : Module de classe, Private Sub() : ? - VB/VBA/VBS - Programmation

Marsh Posté le 02-12-2006 à 01:23:41    

Bonjour à tous :)  
 
En VBA d'Excel 2003,
 
Quelqu'un sait-il la différence entre un module standard et un module de classe ?
 
De même, quelqu'un connaît-il la différence entre une procédure de type Private Sub() et une procédure de type Sub() ?
 
Je devine que ce sont des questions idiotes, mais elles sont importantes pour moi   :ange:  
 
Voilà, si les réponses sont simples, et que vous les connaissez, vos bonnes infos seront bien appréciées :)


Message édité par O_oO le 02-12-2006 à 01:24:04
Reply

Marsh Posté le 02-12-2006 à 01:23:41   

Reply

Marsh Posté le 02-12-2006 à 07:27:33    

Reply

Marsh Posté le 03-12-2006 à 12:48:21    

C'est une page très intéressante, je vais essayer de la comprendre entièrement
Merci :)

Reply

Marsh Posté le 03-12-2006 à 15:07:03    

Un module standard va contenir des procédures et/ou des fonctions utilisées par le programme.
Ces modules permettent de classer les procédures/fonctions selon leur utilisation dans le programme par exemple. On peut, par exemple regrouper dans un module appelé "Cherche", toutes les procédures afférant à la rechecherche de données en vue de les traiter, puis dans un module "Affichage", on regroupera les procédures qui gèrent les différents affichages des User Forms, dans un module "Calcul", on y effectuera les opérations mathématiques, dans un module "VarPublic", on y regroupera les déclarations des variables publiques utilisées dans le programme, etc., etc.
 
Remarque : les noms que je donne aux modules sont libres, on peut les nommer comme on veut !
 
Un module de classe va contenir des "Classes" (catégories, sortes) d'objets que l'utilisateur veut créer. Il existe de nombreuses classes existantes déjà créées dans VBA.
Une d'elle est celle qui permet de contrôler l'affichage de l'objet créé. Quand tu veux créer un formulaire, tu demandes au système d'ajouter un formulaire. Sur la droite de la fenêtre de travail apparaît un cadre qui regroupe toute une série d'éléments que tu peux modifier : la couleur du cadre, sa forme, la piloce de caractère, sa taille, sa couleur, la couleur du fond, etc.
La CLASSE "formulaire" contient toute la liste de ces variables modifiables ainsi que le format de la valeur attendue pour chaque variable (integer, long, word, color, etc...) et éventuellement une valeur initiale (la taille du formulaire de départ sera de : longueur 125 pixels et hauteur 100 pixels. On retrouve ici deux variables : "longueur" qui contient une valeur de type entier et une variable "hauteur" qui contient une valeur également de type entier).
On y trouvera également la position x y du coin supérieur gauche, etc...
 
L'utilité de créer des classes pour de nouveaux objets que l'on crée est d'être certain, à tout moment, d'utiliser les bonnes valeurs pour configurer l'objet quand on en a besoin.
 
Exemple :
Tu crées une classe "Automobile" et tu définis certains critères qui vont définir le contenu de cette "automobile" :
 
Variable "Couleur"      contient une valeur de type integer ==> couleur(int)
 
Variable "Type"      contient une valeur de type string ==> Type (string) pour y introduire un type de véhicule : auto, moto, camion, etc...)
 
Une variable "Poids" contient une valeur de type long  ==> Poids(long)
 
Lorsque tu voudras utiliser une "Automobile", tu créera ton objet, par exemple "Choupette" et tu la "formateras" selon la classe "Automobile" à laquelle tu passeras les valeurs nécessaires pour compléter les différentes variables contenues dans la classe et pour correspondre au type d'automobile que te veux créer.
 
Cet exemple est simpliste (car peu de variables), mais si tu crées des classes qui vont contenir quelques dizaines de paramètres, tu sauras apprécier cette catégorie de variables. En effet, il te sera impossible d'envoyer une couleur dans la variable Poids et un message d'erreur te sera présenté.
Lors de la création d'une classe et de la création des paramètres qui entreront dans sa composition, tu peux aussi créer des variables dans lequelles tu devras obligatoirement introduire une valeur et d'autres facultatives.
 
Pour encore compliquer les choses, il est possible de créer des classes qui contiennent des classes ;-/
 
J'espère avoir été clair.
A+


Message édité par Papy Octet le 03-12-2006 à 15:08:02
Reply

Marsh Posté le 06-12-2006 à 11:29:28    

Papy Octet, merci beaucoup, c'est très clair !  :)  
 
Les modules de classe je crois que j'ai bien compris maintenant  :sol:  
 
Par contre, je n'ai encore réussi à trouver la différence entre une procédure Sub() et une procédure Private Sub()
 
Je crois savoir que les deux procédures n'ont pas la même portée dans le code,
 
mais je n'ai pas trouvé quelle sont les différences de portée entre ces deux types de procédure
 
Voilà, si quelqu'un connait la différence, ses bonnes infos seront bien appréciées :)


Message édité par O_oO le 06-12-2006 à 11:30:02
Reply

Marsh Posté le 06-12-2006 à 11:45:18    

Les procédures peuvent être déclarées, soit Private, soit Public, soit Friend (Static aussi en plus des précédents).
Si la procédure ne comporte pas cette déclaration, alors elle est considérée comme déclarée avec Public, ce qui rend cette procédure accessible en tout point du projet en cours et disponible pour les projets extérieurs aussi.
 
Extraits de l'aide en anglais.
«
Public : Optional. Indicates that the Sub procedure is accessible to all other procedures in all modules. If used in a module that contains an Option Private statement, the procedure is not available outside the project.  
Private : Optional. Indicates that the Sub procedure is accessible only to other procedures in the module where it is declared.  
Friend : Optional. Used only in a class module. Indicates that the Sub procedure is visible throughout the project, but not visible to a controller of an instance of an object.  
Static : Optional. Indicates that the Sub procedure's local variables are preserved between calls. The Static attribute doesn't affect variables that are declared outside the Sub, even if they are used in the procedure.  
 
If not explicitly specified using Public, Private, or Friend, Sub procedures are public by default. If Static isn't used, the value of local variables is not preserved between calls. The Friend keyword can only be used in class modules. However, Friend procedures can be accessed by procedures in any module of a project. A Friend procedure doesn't appear in the type library of its parent class, nor can a Friend procedure be late bound.
»

Reply

Marsh Posté le 06-12-2006 à 13:03:17    

Ce n'est pas possible, mon fichier d'aide doit être mal installé  :fou:  
 
Merci pour la réponse, merci beaucoup beaucoup beaucoup  :love:


Message édité par O_oO le 06-12-2006 à 13:12:22
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed