Je progresse à petits pas dans l'utilisation des classes, méthodes etc.
J'ai une classe qui me permet d'afficher différents éléments.
Je voudrais convertir certains de ces éléments "à la volée" lors de l'affichage.
Par exemple
Article est une classe
Dans Article, j'ai les propriétés suivantes :
- Article.Nom
- Article.Prix
- Article.Poids
etc...
je souhaite créer une méthode que j'appellerais en la rajoutant en suffixe à Article.Prix ou à Article.Poids, et qui multiplierait cette valeur par 1000.
Exemple : Article.Prix.MultiplieParMille aurait pour valeur : 1000*Article.Prix
idem pour: Article.Poids.MultiplieParMille aurait pour valeur : 1000*Article.Poids
L'idée c'est que la méthode MultiplieParMille puisse s'appliquer à n'importe quelle propriété numérique de Article. Et je voudrais pouvoir l'appeler en la mettant en "second suffixe" à la propriété de l'objet.
Est-ce possible (je sais que oui) ? et comment (ça je sais pas...) ?
Merci !
ps : en réalité mon projet est un brin plus complexe, et je suis entrain de passer d'une programmation en procédures à une programmation utilisant les classes, alors je susi parfois un peu perdu.
Private nomArticle As String
Private prixArticle As Double
Private poidsArticle As Double
'# Set / Let
Property Let Nom(nomS)
nomArticle = nomS
End Property
Property Let Prix(PrixD)
prixArticle = PrixD
End Property
Property Let Poids(PoidsD)
poidsArticle = PoidsD
End Property
'# Get
Property Get Nom()
Nom = nomArticle
End Property
Property Get Prix()
Prix = prixArticle
End Property
Property Get Poids()
Poids = poidsArticle
End Property
'# Méthodes
Public Function MultiplieParMille(valeur As Double) As Double
MultiplieParMille = valeur * 1000
End Function
Code dans un module normal :
VB:
Sub Test()
Dim monArticle As CLS_Article
Set monArticle = New CLS_Article
monArticle.Nom = "test"
monArticle.Poids = 120
monArticle.Prix = 25
MsgBox monArticle.MultiplieParMille(monArticle.Poids)
MsgBox monArticle.MultiplieParMille(monArticle.Prix)
End Sub
En effet, c'est ainsi que je procède pour mes calculs. Mais je me suis sans doute mal exprimé.
Je voudrais créer une "méthode de classes" qui multiplierait par mille tout ce que je lui donne à multiplier et qui s'utilise en tant que suffixe de l'appel de l'objet.
je voudrais lors de l'appel pouvoir l'utiliser de la manière suivante :
Je ne sais pas comment dire, disons "en second suffixe". Faut-il définir une classe de classes pour cela ? Mais dans ce cas je ne sais pas comment faire.
Dans VBA il existe déjà ce genre de choses, par exemple :
Code:
Feuille.Range("A1:A7").EntireRow.Copy
Par ailleurs, le site de JB est une vraie mine d'or !
c'est pourquoi, je viens d'essayer de créer des méthodes pour Poids mais je ne sais finalement pas comment faire.
Classe Article :
Code:
Dim pNom As String
Dim pPrix As Single
[b][color=red]Dim pPoids As CPoids[/color][/b]
Public Property Get Nom()
Nom = pNom
End Property
Public Property Let Nom(value)
pNom = value
End Property
Public Property Get Poids()
Poids = pPoids.Valeur
End Property
Public Property Let Poids(value)
pPoids.Valeur = value
End Property
Classe CPoids :
Code:
Dim pValeur As Single
Public Property Get Valeur()
Valeur = pValeur
End Property
Public Property Let Valeur(value)
pValeur = value
End Property
> dans un premier Module de Classe (CLS_AttributMultipliable) :
VB:
Option Explicit
Private val As Double
Public Property Get Valeur()
Valeur = val
End Property
Public Property Let Valeur(laValeur)
val = laValeur
End Property
Public Function MultiplieParMille() As Double
MultiplieParMille = val * 1000
End Function
> dans un second Module de Classe (CLS_Article) :
VB:
Option Explicit
Private leNom As String
Private lePoids As CLS_AttributMultipliable
Private lePrix As CLS_AttributMultipliable
'# constructeur
Private Sub Class_Initialize()
Set lePoids = New CLS_AttributMultipliable
Set lePrix = New CLS_AttributMultipliable
End Sub
'# Let / Set
Public Property Let Nom(nomS)
leNom = nomS
End Property
Public Property Let Poids(poidsD)
lePoids.Valeur = poidsD
End Property
Public Property Let Prix(prixD)
lePrix.Valeur = prixD
End Property
'# Get
Public Property Get Nom()
Nom = leNom
End Property
Public Property Get Poids()
Set Poids = lePoids
End Property
Public Property Get Prix()
Set Prix = lePrix
End Property
> dans un Module :
VB:
Sub test()
Dim monArticle As CLS_Article
Set monArticle = New CLS_Article
monArticle.Nom = "test"
monArticle.Poids = 17
monArticle.Prix = 12.5
MsgBox monArticle.Poids.MultiplieParMille
MsgBox monArticle.Prix.MultiplieParMille
End Sub
a+
Edit :
Par contre, si tu veux la vrai valeur du poids, tu devras écrire
exactement ce que je cherchais, mais je n'en connais pas assez sur la théorie pour trouver cela seul. Merci infiniment, je vais pouvoir maintenant aller chercher dans mes bouquins pour comprendre exactement commetn tout cela fonctionne, je ne suis pas familier avec ce genre de notation : Private Sub Class_Initialize()
Mais je vais trouver.
Merci, tu me simplifies énormément la vie, en plus j'apprends. Ce forum est vraiment très utile.