OVH Cloud OVH Cloud

Module de classe

6 réponses
Avatar
Gege
Bonjour,
Pouvez m'expliquer la diff=E9rence entre un module et un=20
module de classe.
Merci
Gege

6 réponses

Avatar
Maxence HUBICHE
Bonjour
Allez, va pour un mini cours.
T'es prêt ?

==> Un module est destiné à contenir:
- des instructions (sub)
- des fonctions (function)
- des constantes, et enumérations de constantes (const / enum)
- des variables (dim / private / public)
- des types (type)
- des déclarations d'API (declare)

==> Un module de classe est un 'moule à objet'. Il doit donc définir l'ensemble des méthodes, propriétés ... qui seront propre à tous les objets émergeants de cette classe.
Prenons un exemple.
imaginons que nous ayons besoin d'un objet employé.
Cet objet aura des caractéristiques (Nom, Prénom, date de naissance, date d'embauche, ancienneté)
Cet objet pourra envisager des actions (Travailler)
Et même des évènements pourront survenir (s'endormir) ;)


Mise en application :

Tu crées une classe EMPLOYES
Dedans, tu peux te copier le code suivant :


'===ÞBUT DU CODE D'EXEMPLE
Option Explicit

'--> Déclaration d'un évènement possible :
Public Event Sendormir()

'--> Définir des variables pour le module de classe, pour son fonctionnement interne
Private m_bDormant As Boolean

'-->Pour définir des propriété simplement, tu peux faire des variable publiques
Public Nom as String
Public Prenom as String
Public DateNaissance as Date
Public DateEmbauche as Date

'-->Pour définir des propriété un peu plus compliquées
' (moi, je fais simple, mais par contre, toi
' tu rechercheras plus d'infos dans l'aide hein ;))
Public Property get Anciennete() as Double
Anciennete=(Date()-DateEmbauche)/365.25
End Property

'--> Pour définir une méthode, tu fais une Function ou une Sub
Public Sub Travailler(NbHeures as Long)
Static NbTotal as Long
if m_bDormant then
m_bDormantúlse
NbTotal=0
Else
NbTotal = NbTotal + NbHeures
End if
If NbHeures > 12 then
m_bDormant=True
RaiseEvent Sendormir()
ELse
MsgBox Nom & " " & Prenom &" en est maintenant à " & NbHeures de travail !"
End if
End Sub
'=====FIN DU CODE D'EXEMPLE

Maintenant, si tu veux l'utiliser, tu peux dans un module standard faire :

'===ÞBUT DU CODE D'EXEMPLE
Sub Test ()
Dim x as new EMPLOYE
Dim i as Long
x.DateNaissanceÚteSerial(1960,7,14)
x.DateEmbaucheÚteSerial(1983,9,1)
x.Nom="Dupont"
x.Prenom="Jean"
For i = 1 to 12
x.travailler i
Next
End Sub
'=====FIN DU CODE D'EXEMPLE
Voilà ...

Maintenant, si tu voulais utiliser l'évènement, tu devrais déclarer, dans la zone de déclarations d'un module de classe (UserForm / Sheet / ThisWorkBook / ...) ta variable comme suit :

Public WithEvents x as EMPLOYE

et à un moment donné, initialiser ta variable x en faisant :

Set x=New EMPLOYE


Ca ira ?
Avatar
Alpha
vraiment costaud Maxence.
Bonnes fêtes.
Alpha

"Maxence HUBICHE" a écrit dans le message de news:

Bonjour
Allez, va pour un mini cours.
T'es prêt ?

==> Un module est destiné à contenir:
- des instructions (sub)
- des fonctions (function)
- des constantes, et enumérations de constantes (const / enum)
- des variables (dim / private / public)
- des types (type)
- des déclarations d'API (declare)

==> Un module de classe est un 'moule à objet'. Il doit donc définir
l'ensemble des méthodes, propriétés ... qui seront propre à tous les objets

émergeants de cette classe.
Prenons un exemple.
imaginons que nous ayons besoin d'un objet employé.
Cet objet aura des caractéristiques (Nom, Prénom, date de naissance, date
d'embauche, ancienneté)

Cet objet pourra envisager des actions (Travailler)
Et même des évènements pourront survenir (s'endormir) ;)


Mise en application :

Tu crées une classe EMPLOYES
Dedans, tu peux te copier le code suivant :


'===ÞBUT DU CODE D'EXEMPLE
Option Explicit

'--> Déclaration d'un évènement possible :
Public Event Sendormir()

'--> Définir des variables pour le module de classe, pour son
fonctionnement interne

Private m_bDormant As Boolean

'-->Pour définir des propriété simplement, tu peux faire des variable
publiques

Public Nom as String
Public Prenom as String
Public DateNaissance as Date
Public DateEmbauche as Date

'-->Pour définir des propriété un peu plus compliquées
' (moi, je fais simple, mais par contre, toi
' tu rechercheras plus d'infos dans l'aide hein ;))
Public Property get Anciennete() as Double
Anciennete=(Date()-DateEmbauche)/365.25
End Property

'--> Pour définir une méthode, tu fais une Function ou une Sub
Public Sub Travailler(NbHeures as Long)
Static NbTotal as Long
if m_bDormant then
m_bDormantúlse
NbTotal=0
Else
NbTotal = NbTotal + NbHeures
End if
If NbHeures > 12 then
m_bDormant=True
RaiseEvent Sendormir()
ELse
MsgBox Nom & " " & Prenom &" en est maintenant à " & NbHeures de
travail !"

End if
End Sub
'=====FIN DU CODE D'EXEMPLE

Maintenant, si tu veux l'utiliser, tu peux dans un module standard faire :

'===ÞBUT DU CODE D'EXEMPLE
Sub Test ()
Dim x as new EMPLOYE
Dim i as Long
x.DateNaissanceÚteSerial(1960,7,14)
x.DateEmbaucheÚteSerial(1983,9,1)
x.Nom="Dupont"
x.Prenom="Jean"
For i = 1 to 12
x.travailler i
Next
End Sub
'=====FIN DU CODE D'EXEMPLE
Voilà ...

Maintenant, si tu voulais utiliser l'évènement, tu devrais déclarer, dans
la zone de déclarations d'un module de classe (UserForm / Sheet /

ThisWorkBook / ...) ta variable comme suit :

Public WithEvents x as EMPLOYE

et à un moment donné, initialiser ta variable x en faisant :

Set x=New EMPLOYE


Ca ira ?


Avatar
Maxence HUBICHE
Ben ...
c'est dommage qu'Emcy ne soit pas repassé pour dire ce qu'il en pensait ...
J'ai l'impression d'avoir bossé pour rien :(

Merci à toi ;) ça fait du bien !

--
----------------------------------------------------------------------------
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"Alpha" a écrit dans le message de news:
#Cz2A$
vraiment costaud Maxence.
Bonnes fêtes.
Alpha

"Maxence HUBICHE" a écrit dans le message de news:

Bonjour
Allez, va pour un mini cours.
T'es prêt ?

==> Un module est destiné à contenir:
- des instructions (sub)
- des fonctions (function)
- des constantes, et enumérations de constantes (const / enum)
- des variables (dim / private / public)
- des types (type)
- des déclarations d'API (declare)

==> Un module de classe est un 'moule à objet'. Il doit donc définir
l'ensemble des méthodes, propriétés ... qui seront propre à tous les

objets

émergeants de cette classe.
Prenons un exemple.
imaginons que nous ayons besoin d'un objet employé.
Cet objet aura des caractéristiques (Nom, Prénom, date de naissance,
date


d'embauche, ancienneté)
Cet objet pourra envisager des actions (Travailler)
Et même des évènements pourront survenir (s'endormir) ;)


Mise en application :

Tu crées une classe EMPLOYES
Dedans, tu peux te copier le code suivant :


'===ÞBUT DU CODE D'EXEMPLE
Option Explicit

'--> Déclaration d'un évènement possible :
Public Event Sendormir()

'--> Définir des variables pour le module de classe, pour son
fonctionnement interne

Private m_bDormant As Boolean

'-->Pour définir des propriété simplement, tu peux faire des variable
publiques

Public Nom as String
Public Prenom as String
Public DateNaissance as Date
Public DateEmbauche as Date

'-->Pour définir des propriété un peu plus compliquées
' (moi, je fais simple, mais par contre, toi
' tu rechercheras plus d'infos dans l'aide hein ;))
Public Property get Anciennete() as Double
Anciennete=(Date()-DateEmbauche)/365.25
End Property

'--> Pour définir une méthode, tu fais une Function ou une Sub
Public Sub Travailler(NbHeures as Long)
Static NbTotal as Long
if m_bDormant then
m_bDormantúlse
NbTotal=0
Else
NbTotal = NbTotal + NbHeures
End if
If NbHeures > 12 then
m_bDormant=True
RaiseEvent Sendormir()
ELse
MsgBox Nom & " " & Prenom &" en est maintenant à " & NbHeures de
travail !"

End if
End Sub
'=====FIN DU CODE D'EXEMPLE

Maintenant, si tu veux l'utiliser, tu peux dans un module standard faire
:



'===ÞBUT DU CODE D'EXEMPLE
Sub Test ()
Dim x as new EMPLOYE
Dim i as Long
x.DateNaissanceÚteSerial(1960,7,14)
x.DateEmbaucheÚteSerial(1983,9,1)
x.Nom="Dupont"
x.Prenom="Jean"
For i = 1 to 12
x.travailler i
Next
End Sub
'=====FIN DU CODE D'EXEMPLE
Voilà ...

Maintenant, si tu voulais utiliser l'évènement, tu devrais déclarer,
dans


la zone de déclarations d'un module de classe (UserForm / Sheet /
ThisWorkBook / ...) ta variable comme suit :

Public WithEvents x as EMPLOYE

et à un moment donné, initialiser ta variable x en faisant :

Set x=New EMPLOYE


Ca ira ?






Avatar
Monique Brunel
Mais non, Maxence, tu n'as pas bossé pour rien...
Si le destinataire principal n'a pas (encore - il est peut-être en
vacances) lu ton cours, d'autres l'ont remarqué et apprécié :-)

Bonne fêtes

--
Amicalement,
Monique (la Wallonne) - (remplacer mpfe par skynet.be)
en campagne pour des sites conformes aux standards et accessibles...
http://www.webmaster-hub.com/
et pour les amateurs d'athlétisme... http://users.skynet.be/osga/


Ben ...
c'est dommage qu'Emcy ne soit pas repassé pour dire ce qu'il en pensait ...
J'ai l'impression d'avoir bossé pour rien :(

Merci à toi ;) ça fait du bien !



Avatar
Pascal Engelmajer
Salut Monique,
Bon Noël.
Pour le cas ou Emcy reviendrait ...
Voici un exemple commenté qui explique le pourquoi de "set ObjetClasse Nothing"
en complément du très didactique cours de Maxence.
http://www.ilyapa.net/excel/exempleEMCY.zip
J'ai essayé, et c'est difficile, d'être simple et clair ...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Monique Brunel" a écrit dans le message de news:

Mais non, Maxence, tu n'as pas bossé pour rien...
Si le destinataire principal n'a pas (encore - il est peut-être en
vacances) lu ton cours, d'autres l'ont remarqué et apprécié :-)

Bonne fêtes

--
Amicalement,
Monique (la Wallonne) - (remplacer mpfe par skynet.be)
en campagne pour des sites conformes aux standards et accessibles...
http://www.webmaster-hub.com/
et pour les amateurs d'athlétisme... http://users.skynet.be/osga/


Ben ...
c'est dommage qu'Emcy ne soit pas repassé pour dire ce qu'il en pensait
...


J'ai l'impression d'avoir bossé pour rien :(

Merci à toi ;) ça fait du bien !






Avatar
Monique Brunel
Le lien est noté, Pascal :-)

--
Amicalement,
Monique (la Wallonne) - (remplacer mpfe par skynet.be)
en campagne pour des sites conformes aux standards et accessibles...
http://www.webmaster-hub.com/
et pour les amateurs d'athlétisme... http://users.skynet.be/osga/


Salut Monique,
Bon Noël.
Pour le cas ou Emcy reviendrait ...
Voici un exemple commenté qui explique le pourquoi de "set ObjetClasse > Nothing"
en complément du très didactique cours de Maxence.
http://www.ilyapa.net/excel/exempleEMCY.zip
J'ai essayé, et c'est difficile, d'être simple et clair ...