Comment créer une classe d'ojet en vba

frédéric -  
 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

11 réponses

Micha
 
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 :)
22
Micha
 
Si la propriété varvoit est de type référence (par exemple varvoit est un humain au lieu d'être un integer) alors il faut remplacer Let par Set, concrètement il faut remplacer

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
0
Micha
 
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
5
toubiloup Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   6
 
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
3
frédéric
 
et oui, la vie est belle lorsque l'on peut compter sur la solidarité de professionnels.

Un tout grand merci.
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
random Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention   155
 
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 ?
2
frédéric
 
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.
2
Degroland
 
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)
2
random Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention   155
 
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 ?
1
Micha
 
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.
0
gpc
 
qu'elle est la difference? puisque certe la variable est privée mais grace a l'accèsseur on en fait ce qu'on veut non? je saisis pas la nuance entre directement objet.pvardit et objet.vardit
si la classe possède des classe derivé le private ne va pas posé probleme ( protected existe en vba?)
0
micha
 
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...)
0
micha
 
petite précision : quand j'écris ''alors la propritété privée de la classe de base (qui est A) sera accessible par B" il faut comprendre que cette propriété privée de A sera accessible via l'accesseur public de B
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
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

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+
1
Micha
 
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
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Désolé.. j'ai pas vu !
Et tu pourrais être plus heu... Tout le monde n'a pas d'aussi bonne lunette que toi
0
Micha
 
j'ai pas eu besoin de lunette pour lire le post.vu que c'est moi qui l'ai écrit ;-)
...par contre t'aurais gagné à revisser tes lentilles pour le lire lol
0
frédéric
 
oui, mais comment creer une classe?
merci
0
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Salut,
Complètement impossible en vba à ma connaissance

Qui va en mer pour son plaisir,
irait en enfer pour ses vacances
0