Comment créer une classe d'ojet en vba
frédéric
-
Micha -
Micha -
comment fait-on lorsqu'on programme en vb sur excel pour créer une classe objet?
en fait, j'ai trois fonction (fon1,fon2,fon3) que je voudrais intégréer a une classe d'objet (maclassedobjet).
quelqu'un peut me dire comment procéder?
Merci
Frédéric
en fait, j'ai trois fonction (fon1,fon2,fon3) que je voudrais intégréer a une classe d'objet (maclassedobjet).
quelqu'un peut me dire comment procéder?
Merci
Frédéric
11 réponses
Bonjour Fred,
Pour créer une classe en vba tu cliques sur "insertion Module de classe", tu renommes ensuite ton module de classe (c'est comme ca qu'on appelle une classe en vba), dans ton cas tu le renommes "humain".
Enfin dans l'éditeur de texte de ton module de classe "humain" tu écris :
'---------------------
' Classe humain
'---------------------
Dim pvardit As String
Dim pvarvoit As Integer
'--------------------------
'
' vardit
'
'--------------------------
Public Property Get vardit () As String
vardit = pvardit
End Property
Public Property Let vardit (Value As String )
pvardit = Value
End Property
'--------------------------
'
' varvoit
'
'--------------------------
Public Property Get varvoit () As Integer
varvoit = pvarvoit
End Property
Public Property Let varvoit (Value As Integer )
pvarvoit = Value
End Property
'--------------------------
'
' methode parler
'
'--------------------------
Sub parler()
MsgBox (vardit)
End Sub
'--------------------------
'
' methode regarder
'
'--------------------------
Sub regarder()
MsgBox (varvoit)
End Sub
Pour utiliser ton objet (par exemple dans un formulaire), tu écris :
Private Sub CommandButton1_Click()
dim fred as new humain
fred.vardit = "coucou"
fred.parler
End Sub
Voilà, c beau la vie quand on peut compter sur la solidarité des pros :)
Pour créer une classe en vba tu cliques sur "insertion Module de classe", tu renommes ensuite ton module de classe (c'est comme ca qu'on appelle une classe en vba), dans ton cas tu le renommes "humain".
Enfin dans l'éditeur de texte de ton module de classe "humain" tu écris :
'---------------------
' Classe humain
'---------------------
Dim pvardit As String
Dim pvarvoit As Integer
'--------------------------
'
' vardit
'
'--------------------------
Public Property Get vardit () As String
vardit = pvardit
End Property
Public Property Let vardit (Value As String )
pvardit = Value
End Property
'--------------------------
'
' varvoit
'
'--------------------------
Public Property Get varvoit () As Integer
varvoit = pvarvoit
End Property
Public Property Let varvoit (Value As Integer )
pvarvoit = Value
End Property
'--------------------------
'
' methode parler
'
'--------------------------
Sub parler()
MsgBox (vardit)
End Sub
'--------------------------
'
' methode regarder
'
'--------------------------
Sub regarder()
MsgBox (varvoit)
End Sub
Pour utiliser ton objet (par exemple dans un formulaire), tu écris :
Private Sub CommandButton1_Click()
dim fred as new humain
fred.vardit = "coucou"
fred.parler
End Sub
Voilà, c beau la vie quand on peut compter sur la solidarité des pros :)
Bon ca fait 5 ans que fred attend sa réponse... je pense qu'il a zappé depuis
Je fournis donc la réponse pour ceux que ca intéresse
Je fournis donc la réponse pour ceux que ca intéresse
salut essaye en creant un module de classe
sa va te creer classe1
et la tu cré ta classe
je ne suis pas sur mais ca ne coute rien dessayer
a+
toubiiiiiiiiiiiiloooooooooooooouuuuuuuuuuuuuuuuuuuuuupppp
sa va te creer classe1
et la tu cré ta classe
je ne suis pas sur mais ca ne coute rien dessayer
a+
toubiiiiiiiiiiiiloooooooooooooouuuuuuuuuuuuuuuuuuuuuupppp
et oui, la vie est belle lorsque l'on peut compter sur la solidarité de professionnels.
Un tout grand merci.
Un tout grand merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bien sur que si
il suffit de faire insertion module de classe
et tu declares des propriétes (variable typées)
et des méthodes qui vont prendre en charge tes fonctions
elle est pas belle, la vie ?
il suffit de faire insertion module de classe
et tu declares des propriétes (variable typées)
et des méthodes qui vont prendre en charge tes fonctions
elle est pas belle, la vie ?
Alors,
J’ai créer un module de classe « humain ».
J’y ai mis deux variable
Et deux fonctions :
Dim vardit As String
Dim varvoit As Integer
Sub parler()
MsgBox (vardit)
End Sub
Sub regarder()
MsgBox (varvoit)
End Sub
Mais lorsque je veux utiliser un objet
Private Sub CommandButton1_Click()
Set fred = New humain
fred.vardit = "coucou"
fred.parler
End Sub
J’ai un message disant : propriété ou methode non gérée par cet objet.
J’aurais du déclarer mes propriétés et mes méthodes différemment ?
Je vous remercie encore.
J’ai créer un module de classe « humain ».
J’y ai mis deux variable
Et deux fonctions :
Dim vardit As String
Dim varvoit As Integer
Sub parler()
MsgBox (vardit)
End Sub
Sub regarder()
MsgBox (varvoit)
End Sub
Mais lorsque je veux utiliser un objet
Private Sub CommandButton1_Click()
Set fred = New humain
fred.vardit = "coucou"
fred.parler
End Sub
J’ai un message disant : propriété ou methode non gérée par cet objet.
J’aurais du déclarer mes propriétés et mes méthodes différemment ?
Je vous remercie encore.
On a posé de bonnes questions, on a cru qu'on allait donner des réponses intéressantes , mais au final on ne sait pas créer un objet en vba (création de classe mais pas d'instanciation)
essaye de mettre en déclaration au début du module de classe
Public vardit As String
Public varvoit As Integer
elle est pas belle, la vie ?
Public vardit As String
Public varvoit As Integer
elle est pas belle, la vie ?
Surtout ne jamais faire çà en programmation objet, c'est une erreur de débutant
En déclarant la variable vardit avec le mot-clé Public, on rend son contenu directement accessible au-delà de la classe dont elle est une propriété. Du coup on ne respecte plus le principe d'encapsulation. De fait on sort du cadre de la programmation objet, et on fait de la programmation "à l'arrache", sans respecter les principes de la programmation orientée objet.
Pour bien faire il faut "encapsuler" la propriété vardit dans une variable privée à la classe, qu'on déclarera en début de module de classe par
Private pvardit as String
puis on accèdera cette variable privée en définissant un accesseur, c'est à dire une variable publique vardit qui permettra de récupérer la valeur de pvardit et de la modifier en écrivant classiquement :
'--------------------------
'
' vardit
'
'--------------------------
Public Property Get vardit () As String
vardit = pvardit
End Property
Public Property Let vardit (Value As String )
pvardit = Value
End Property
Et là on fait de la programmation objet.
En déclarant la variable vardit avec le mot-clé Public, on rend son contenu directement accessible au-delà de la classe dont elle est une propriété. Du coup on ne respecte plus le principe d'encapsulation. De fait on sort du cadre de la programmation objet, et on fait de la programmation "à l'arrache", sans respecter les principes de la programmation orientée objet.
Pour bien faire il faut "encapsuler" la propriété vardit dans une variable privée à la classe, qu'on déclarera en début de module de classe par
Private pvardit as String
puis on accèdera cette variable privée en définissant un accesseur, c'est à dire une variable publique vardit qui permettra de récupérer la valeur de pvardit et de la modifier en écrivant classiquement :
'--------------------------
'
' vardit
'
'--------------------------
Public Property Get vardit () As String
vardit = pvardit
End Property
Public Property Let vardit (Value As String )
pvardit = Value
End Property
Et là on fait de la programmation objet.
bjr gpc
non le private ne va pas causer problème justement parce que la propriété private est encapsulée dans sa classe (appelons-la A), donc si une classe B hérite de A, alors la propritété privée de la classe de base (qui est A) sera accessible par B, mais pas par les autres classes qui n'héritent pas de A.
La dualité d'une propriété (à savoir le fait qu'elle soit définie par 2 variables, l'une privée, l'autre publique) est un principe inhérent à la programmation orienté objet.
On pourrait accéder directement une propriété par sa variable privée, bien sur ça marche, mais le principe d'encapsulation est rompu si on fait ça...c'est une question de méthodologie, or dans le monde professionnel, s'il est fondamental qu'un programme fonctionne, ce qui est quand meme la priorité :) , il est presque aussi important de travailler avec méthode (problématique de travail en équipe, d'évolution de l'applicatif, maintenance, etc...)
non le private ne va pas causer problème justement parce que la propriété private est encapsulée dans sa classe (appelons-la A), donc si une classe B hérite de A, alors la propritété privée de la classe de base (qui est A) sera accessible par B, mais pas par les autres classes qui n'héritent pas de A.
La dualité d'une propriété (à savoir le fait qu'elle soit définie par 2 variables, l'une privée, l'autre publique) est un principe inhérent à la programmation orienté objet.
On pourrait accéder directement une propriété par sa variable privée, bien sur ça marche, mais le principe d'encapsulation est rompu si on fait ça...c'est une question de méthodologie, or dans le monde professionnel, s'il est fondamental qu'un programme fonctionne, ce qui est quand meme la priorité :) , il est presque aussi important de travailler avec méthode (problématique de travail en équipe, d'évolution de l'applicatif, maintenance, etc...)
Bonjour,
Y manque le principal...
Dans ton projet VBA faut créer une instance de ta classe et c'est avec celle la que tu peu travailler
A+
Y manque le principal...
Dans ton projet VBA faut créer une instance de ta classe et c'est avec celle la que tu peu travailler
Dans un Module, Public HumC as Humain et par exemnple dans une sub Sub Machin() Dim E Set HumC = New Humain vardit ="La donnée" HumC.Parler ... ....
A+
bonjour
il ne manque rien, prend juste le temps de lire avant de te précipiter à répondre, car j'ai déjà écrit dans le premier post qu'il fallait instancier la classe :
Pour utiliser ton objet (par exemple dans un formulaire), tu écris :
Private Sub CommandButton1_Click()
dim fred as new humain
fred.vardit = "coucou"
fred.parler
End Sub
il ne manque rien, prend juste le temps de lire avant de te précipiter à répondre, car j'ai déjà écrit dans le premier post qu'il fallait instancier la classe :
Pour utiliser ton objet (par exemple dans un formulaire), tu écris :
Private Sub CommandButton1_Click()
dim fred as new humain
fred.vardit = "coucou"
fred.parler
End Sub
Public Property Let varvoit (Value As Integer )
pvarvoit = Value
End Property
par :
Public Property Set varvoit (Value As humain)
Set pvarvoit = Value ' ne pas oublier le terme "Set" car pvarvoit est de type référence
End Property
Avec ca vous pouvez construire des classes encapsulant des classes, etc... les joies de la programmation objet en vba :-O