Posez votre question Signaler

Comment créer une classe d'ojet en vba

frédéric - Dernière réponse le 28 juil. 2010 à 23:44
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
Lire la suite 

Comment créer une classe d'ojet en vba »

19 réponses
Réponse
+8
moins plus
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 :)
Micha - 24 avril 2010 à 19:09
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
Ajouter un commentaire
Réponse
+4
moins plus
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
Ajouter un commentaire
Réponse
+2
moins plus
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
Ajouter un commentaire
Réponse
+2
moins plus
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.
Ajouter un commentaire
Réponse
+1
moins plus
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 ?
Ajouter un commentaire
Réponse
+1
moins plus
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 ?
gpc - 27 juil. 2010 à 15:18
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?)
micha - 28 juil. 2010 à 13:47
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...)
micha - 28 juil. 2010 à 13:53
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
Ajouter un commentaire
Réponse
+1
moins plus
et oui, la vie est belle lorsque l'on peut compter sur la solidarité de professionnels.

Un tout grand merci.
Ajouter un commentaire
Réponse
+1
moins plus
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)
Ajouter un commentaire
Réponse
+1
moins plus
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+
Micha - 28 juil. 2010 à 20:36
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
lermite222- 28 juil. 2010 à 21:24
Désolé.. j'ai pas vu !
Et tu pourrais être plus heu... Tout le monde n'a pas d'aussi bonne lunette que toi
Micha - 28 juil. 2010 à 23:44
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
Ajouter un commentaire
Réponse
+0
moins plus
oui, mais comment creer une classe?
merci
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
Complètement impossible en vba à ma connaissance

Qui va en mer pour son plaisir,
irait en enfer pour ses vacances
Ajouter un commentaire
Ce document intitulé « comment créer une classe d'ojet en vba » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?