Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modules

6 réponses
Avatar
Jacky
Bonsoir à tous

Quelqu'un pourrait m'expliquer la différence entre un Module et un Module de
classe.

Merci
JJ

6 réponses

Avatar
Pierre Fauconnier
Bonsoir

Un module ( ou module standard ) est un module contenant des procédures et
des macros générales. Un module de classe est un module contenant les
méthodes, propriétés et évènements d'un objet exploitable par l'application.
Ainsi, Les modules de feuille, de classeur et de userform permettent de
gérer ces objets.

Tu peux te créer toi-même un objet personnalisé, lui créer des méthodes,
propriétés et évènements permettant d'utiliser cet objet dans ton code...

Souhaites-tu un exemple concret ?

Pierre


Jacky wrote:
Bonsoir à tous

Quelqu'un pourrait m'expliquer la différence entre un Module et un
Module de classe.

Merci
JJ


Avatar
Jacky
Bonsoir Pierre

Souhaites-tu un exemple concret ?
Oui SVP


Merci
JJ

"Pierre Fauconnier" a écrit dans le message
news: #
Bonsoir

Un module ( ou module standard ) est un module contenant des procédures et
des macros générales. Un module de classe est un module contenant les
méthodes, propriétés et évènements d'un objet exploitable par
l'application.

Ainsi, Les modules de feuille, de classeur et de userform permettent de
gérer ces objets.

Tu peux te créer toi-même un objet personnalisé, lui créer des méthodes,
propriétés et évènements permettant d'utiliser cet objet dans ton code...

Souhaites-tu un exemple concret ?

Pierre


Jacky wrote:
Bonsoir à tous

Quelqu'un pourrait m'expliquer la différence entre un Module et un
Module de classe.

Merci
JJ






Avatar
Misange
Bonjour,
Question rituelle...
Tu trouveras des explications à la page lexique d'excelabo
http://www.excelabo.net/xl/lexique.htm#module
avec un classeur exemple à télécharger
et des explications complémentaires plus rigolotes ici :
http://www.excelabo.net/mpfe/lecon1.htm


Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


Jacky wrote:
Bonsoir à tous

Quelqu'un pourrait m'expliquer la différence entre un Module et un Module de
classe.

Merci
JJ




Avatar
Jacky
Merci,
j'ai fait un tour, très intéressent, je vais aussi télécharger.
Bonne journée
JJ


"Misange" a écrit dans le message news:
#yTCq$
Bonjour,
Question rituelle...
Tu trouveras des explications à la page lexique d'excelabo
http://www.excelabo.net/xl/lexique.htm#module
avec un classeur exemple à télécharger
et des explications complémentaires plus rigolotes ici :
http://www.excelabo.net/mpfe/lecon1.htm


Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


Jacky wrote:
Bonsoir à tous

Quelqu'un pourrait m'expliquer la différence entre un Module et un
Module de


classe.

Merci
JJ







Avatar
Pierre Fauconnier
Voici un exemple créant un objet avec une méthode, deux propriétés en
lecture - écriture, une propriété en lecture seule, un évènement utilisant
des paramètres et un évènement sans paramètres.

Pour faire fonctionner cet exemple, il faudra créer un userform avec trois
textboxes et deux boutons. Les textboxes seront nommés TxtNom, TxtPrenom et
TxtNomComplet. Les boutons seront appelés
cmdCreer et cmdAffecter.

Les codes se trouvent sous ma signature
Un fichier est téléchargeable sur
www.pfi.be/excel/telechargements/module_de_classe.zip

--
Cela convient-il?
----
Pierre Fauconnier
"C'est lorsqu'il y a un temps mort qu'il faut tuer le temps..."
(remplacer NOSPAM par pfi pour me répondre. Merci)


---
Le code suivant doit être copié dans un module de classe nommé oContact (
dans la fenêtre de propriétés du module, propriété Name )

***** Début de code *****
Option Explicit

Private mNom As String ' Reçoit la valeur privée du nom
Private mPrenom As String ' Reçoit la valeur privée du prénom
Private mNomComplet
' Déclaration de l'évènement qui sera appelé avant l'affectation
Public Event AvantAffectation(ByRef Cancel As Boolean, Cellule As Range)
' Déclaration de l'évènement qui sera appelé après l'affectation
Public Event ApresAffectation()
Private mNoUpdate As Boolean ' Variable qui déterminera l'affectation


' Les propriétés Nom et Prénom sont en lecture (Get)
' et en écriture (Let)
Property Get Nom() As String
' Nom récupère la variable privée mNom
Nom = mNom
End Property

Property Let Nom(Nom As String)
' mNom reçoit la valeur passée par le code externe
mNom = Nom
' Le nom complet est reconstitué au changement de nom
mNomComplet = IIf(mNom = "", mPrenom, mPrenom & " " & mNom)
End Property

Property Get Prenom() As String
Prenom = mPrenom
End Property

Property Let Prenom(Prenom As String)
mPrenom = Prenom
' Le nom complet est reconstitué au changement de prénom
mNomComplet = IIf(mNom = "", mPrenom, mPrenom & " " & mNom)
End Property

' La propriété NomComplet est en lecture seule
' Elle ne peut être créée telle quelle de l'extérieur
' et dépend des propriétés Nom et Prénom, au travers de la variable
' privée mNomComplet, modifiée lorsque Nom ou Prénom sont modifiés

Property Get NomComplet() As String
NomComplet = mNomComplet
End Property

' La procédure AffecterContact va
' passer le nom du contact à Cellule
' et le prénom à la cellule(1,2), c-à-d la cellule
' directement à droite de la cellule renseignée

Sub AffecterContact(Cellule As Range)
' Initialisation de la valeur passée à l'évènement via Cancel
mNoUpdate = False
' On appelle l'évènement AvantAffectation. Si dans la
' procédure externe, cet évènement est géré par un code,
' ce code sera exécuté.
' La variable mNoUpdate est passée, ainsi que Cellule
RaiseEvent AvantAffectation(mNoUpdate, Cellule)
' Si la gestion de l'évènement a renvoyé Cancel = true,
' c-à-d la variable nNoUpdate passée en référence,
' l'affectation n'a pas lieu
If mNoUpdate = True Then Exit Sub
'Si Cancel(mNoUpdate) = False, l 'affectation a lieu
Cellule = mNom
Cellule(1, 2) = mPrenom
Cellule(1, 3) = mNomComplet
' On génère l'évènement AprèsAffectation. Si cet évènement
' est géré dans la procédure externe, le code de gestion
' de l'évènement sera exécuté
RaiseEvent ApresAffectation
' Fin de la procédure d'affecation
End Sub
***** Fin de code *****

Le code suivant doit être placé dans le module du userform. Il sert à
exploiter l'objet.
***** Début de code *****
Option Explicit

' Déclaration de l'objet MonContact
' WithEvents permet de gérer les évènements de cet objet
Private WithEvents MonContact As oContact

Private Sub cmdAffecter_Click()
' Lorsque l'on clique sur ce bouton,
' la méthode AffecterContact de l'objet MonContact
' est appelée. Elle demande un argument de type Range
MonContact.AffecterContact ActiveCell
End Sub

Private Sub cmdCreer_Click()
' Création de l'objet MonContact. On affecte
' à cet objet les valeurs des textboxes.
' Un textbox reçoit la valeur de la propriété
' NomComplet de l'objet
Set MonContact = New oContact
With MonContact
.Nom = txtNom
.Prenom = txtPrenom
txtNomComplet = .NomComplet
End With
End Sub

Private Sub MonContact_ApresAffectation()
' On gère l'évènement ApresAffecaction
' pour signaler que l'affectation s'est bien déroulée
MsgBox "Le contact a été affecté correctement", _
vbOKOnly + vbExclamation, "Affection du contact"
End Sub

Private Sub MonContact_AvantAffectation(Cancel As Boolean, Cellule As Range)
' On gère l'évènement AvantAffecation pour vérifier
' que l'utilisateur est conscient que des cellules
' seront modifiées
Dim Reponse As VbMsgBoxResult
Dim Adresse As String
' On utilise l'objet Cellule passé par l'évènement
' pour donner à l'utilisateur l'adresse de la plage
' qui sera modifiée
Adresse = Range(Cellule, Cellule(1, 2)).Address(0, 0, xlA1, True)
Reponse = MsgBox("Les données de la plage " & Chr(13) & _
Adresse & _
Chr(13) & "seront remplacées. Voulez-vous continuer?", _
vbQuestion + vbYesNo, "Affectation du nom")
' Si on ne veur pas affecter, on répond Non,
' et Cancel ( c-a-d mNoUpdate de notre objet passé en
' référence ( ByRef ) reçoit True. On veut donc "effacer"
' l'évènement
If Reponse = vbNo Then Cancel = True
' Si Cancel = False, l'évènement a lieu et
' l'affectation est réalisée
End Sub
***** Fin de code *****
Avatar
Jacky
Bonjour Pierre

Cela convient-il?


Oui parfaitement, de quoi passer le Week-end

Merci beaucoup
JJ

"Pierre Fauconnier" a écrit dans le message
news:
Voici un exemple créant un objet avec une méthode, deux propriétés en
lecture - écriture, une propriété en lecture seule, un évènement utilisant
des paramètres et un évènement sans paramètres.

Pour faire fonctionner cet exemple, il faudra créer un userform avec trois
textboxes et deux boutons. Les textboxes seront nommés TxtNom, TxtPrenom
et

TxtNomComplet. Les boutons seront appelés
cmdCreer et cmdAffecter.

Les codes se trouvent sous ma signature
Un fichier est téléchargeable sur
www.pfi.be/excel/telechargements/module_de_classe.zip

--
Cela convient-il?
----
Pierre Fauconnier
"C'est lorsqu'il y a un temps mort qu'il faut tuer le temps..."
(remplacer NOSPAM par pfi pour me répondre. Merci)


---
Le code suivant doit être copié dans un module de classe nommé oContact (
dans la fenêtre de propriétés du module, propriété Name )

***** Début de code *****
Option Explicit

Private mNom As String ' Reçoit la valeur privée du nom
Private mPrenom As String ' Reçoit la valeur privée du prénom
Private mNomComplet
' Déclaration de l'évènement qui sera appelé avant l'affectation
Public Event AvantAffectation(ByRef Cancel As Boolean, Cellule As Range)
' Déclaration de l'évènement qui sera appelé après l'affectation
Public Event ApresAffectation()
Private mNoUpdate As Boolean ' Variable qui déterminera l'affectation


' Les propriétés Nom et Prénom sont en lecture (Get)
' et en écriture (Let)
Property Get Nom() As String
' Nom récupère la variable privée mNom
Nom = mNom
End Property

Property Let Nom(Nom As String)
' mNom reçoit la valeur passée par le code externe
mNom = Nom
' Le nom complet est reconstitué au changement de nom
mNomComplet = IIf(mNom = "", mPrenom, mPrenom & " " & mNom)
End Property

Property Get Prenom() As String
Prenom = mPrenom
End Property

Property Let Prenom(Prenom As String)
mPrenom = Prenom
' Le nom complet est reconstitué au changement de prénom
mNomComplet = IIf(mNom = "", mPrenom, mPrenom & " " & mNom)
End Property

' La propriété NomComplet est en lecture seule
' Elle ne peut être créée telle quelle de l'extérieur
' et dépend des propriétés Nom et Prénom, au travers de la variable
' privée mNomComplet, modifiée lorsque Nom ou Prénom sont modifiés

Property Get NomComplet() As String
NomComplet = mNomComplet
End Property

' La procédure AffecterContact va
' passer le nom du contact à Cellule
' et le prénom à la cellule(1,2), c-à-d la cellule
' directement à droite de la cellule renseignée

Sub AffecterContact(Cellule As Range)
' Initialisation de la valeur passée à l'évènement via Cancel
mNoUpdate = False
' On appelle l'évènement AvantAffectation. Si dans la
' procédure externe, cet évènement est géré par un code,
' ce code sera exécuté.
' La variable mNoUpdate est passée, ainsi que Cellule
RaiseEvent AvantAffectation(mNoUpdate, Cellule)
' Si la gestion de l'évènement a renvoyé Cancel = true,
' c-à-d la variable nNoUpdate passée en référence,
' l'affectation n'a pas lieu
If mNoUpdate = True Then Exit Sub
'Si Cancel(mNoUpdate) = False, l 'affectation a lieu
Cellule = mNom
Cellule(1, 2) = mPrenom
Cellule(1, 3) = mNomComplet
' On génère l'évènement AprèsAffectation. Si cet évènement
' est géré dans la procédure externe, le code de gestion
' de l'évènement sera exécuté
RaiseEvent ApresAffectation
' Fin de la procédure d'affecation
End Sub
***** Fin de code *****

Le code suivant doit être placé dans le module du userform. Il sert à
exploiter l'objet.
***** Début de code *****
Option Explicit

' Déclaration de l'objet MonContact
' WithEvents permet de gérer les évènements de cet objet
Private WithEvents MonContact As oContact

Private Sub cmdAffecter_Click()
' Lorsque l'on clique sur ce bouton,
' la méthode AffecterContact de l'objet MonContact
' est appelée. Elle demande un argument de type Range
MonContact.AffecterContact ActiveCell
End Sub

Private Sub cmdCreer_Click()
' Création de l'objet MonContact. On affecte
' à cet objet les valeurs des textboxes.
' Un textbox reçoit la valeur de la propriété
' NomComplet de l'objet
Set MonContact = New oContact
With MonContact
.Nom = txtNom
.Prenom = txtPrenom
txtNomComplet = .NomComplet
End With
End Sub

Private Sub MonContact_ApresAffectation()
' On gère l'évènement ApresAffecaction
' pour signaler que l'affectation s'est bien déroulée
MsgBox "Le contact a été affecté correctement", _
vbOKOnly + vbExclamation, "Affection du contact"
End Sub

Private Sub MonContact_AvantAffectation(Cancel As Boolean, Cellule As
Range)

' On gère l'évènement AvantAffecation pour vérifier
' que l'utilisateur est conscient que des cellules
' seront modifiées
Dim Reponse As VbMsgBoxResult
Dim Adresse As String
' On utilise l'objet Cellule passé par l'évènement
' pour donner à l'utilisateur l'adresse de la plage
' qui sera modifiée
Adresse = Range(Cellule, Cellule(1, 2)).Address(0, 0, xlA1, True)
Reponse = MsgBox("Les données de la plage " & Chr(13) & _
Adresse & _
Chr(13) & "seront remplacées. Voulez-vous continuer?", _
vbQuestion + vbYesNo, "Affectation du nom")
' Si on ne veur pas affecter, on répond Non,
' et Cancel ( c-a-d mNoUpdate de notre objet passé en
' référence ( ByRef ) reçoit True. On veut donc "effacer"
' l'évènement
If Reponse = vbNo Then Cancel = True
' Si Cancel = False, l'évènement a lieu et
' l'affectation est réalisée
End Sub
***** Fin de code *****