VBA class problème code
bonjour je cherche à résoudre ce problème mais j'y arrive pas je comprend pas trop ou est mon erreur pouvez vous m'aider s'il vous plait ?
je veux créer une classe VBA qui s'appellera CBasket avec les deux propriétés suivantes : iCount et dPrice. La première propriété stocke le nombre d'articles dans le panier. La deuxième propriété stocke le prix de chaque article. La classe doit également me permettre de pour calculer la valeur totale du panier. Ensuite, je dois créer une sous procédure pour tester la classe.<br>jai fais le code suivant déjà mais je sais s'il est bon ?Option Explicit
Dim icount As String
Dim dprice As String
Public Property Get count() As String
count = icount
End Property
Public Property Let icount(ByVal icount As String)
icount = count
End Property
Public Property Get price() As String
price = dprice
End Property
Public Property Let price(ByVal price As String)
dprice = price
End Property
Public Sub showinfo()
MsgBox icount " " & dprice &" "
End Sub
Sub cbasket()
End Submerci beaucoup d'avance de votre aide .
Bonjour,
Non le code n'est pas bon, l'avez vous tapé dans l'éditeur VBA?
Car vous auriez déjà dû voir cette ligne en rouge:
MsgBox icount " " & dprice & " "car il manque un & entre icount et " ".
Pour stocker les prix je ne recommande pas d'utiliser une variable texte, mais plutôt un Double, autant rester sur des nombres, pour la quantité, utiliser un Double aussi.
Je créerais aussi une méthode pour ajouter un article en lui fournissant son prix, elle incrémenterait de 1 icount à chaque fois, et augmenterais dPrice en fonction de la valeur donnée. Elle pourrait être améliorée en donnant le nombre d'articles qu'on prend (par exemple 2 bouteilles de lait), avec leur prix unitaire, ou alors leur prix total, et ainsi incrémenter icount en fonction de la quantité, et si on choisit la solution du prix unitaire, augmenter dprice de la quantité * prix unitaire.
Je laisserais les propriétés icount et dprice en lecture seule car leur écriture serait gérée par la méthode ajoutArticle(prixUnitaire as Double, quantité as Double)
Je mettrais les propriétés icount et dprice en privée car sinon les propriétés Get et Let ne servent à rien.
Et plutôt que d'utiliser une procédure showInfo, j'utiliserais une fonction retournant les infos du produit sous forme de chaine de texte, ça donne la possibilité d'en faire ce qu'on veut, et surtout laisse le travail de savoir quoi en faire au code utilisant l'objet, si on veut l'afficher dans une msgbox ce n'est pas le problème de la classe.
Si le but est de stocker la quantité de chaque article et son prix correspondant, plutôt passer par des Collections.
oui je le tape dans vba
super je vais changer ca et je vais essayer encore
j'ai corriger ca mais j'ai pas compris comment insérer et attribuer les valeurs pour le prix et la quantité des articles , pouvez me montrer comment faire ? cordialement .
Option Explicit
Dim icount As Double
Dim dprice As Double
Private Property Get count() As Double
count = icount
End Property
Private Property Let icount(ByVal icount As String)
icount = count
End Property
Private Property Get price() As Double
price = dprice
End Property
Private Property Let price(ByVal price As Double)
dprice = price
End Property
Private Sub showinfo()
MsgBox icount & " " & dprice & " "
End Sub
Sub cbasket()
End SubVoici le module de classe nommé "Basket" et son code:
Private icount As Double
Private dprice As Double
Public Enum typePrix
eUnitaire = 0
eTotal = 1
End Enum
Property Get count() As Double
count = icount
End Property
Property Get price() As Double
price = dprice
End Property
Sub ajoutArticle(quantite As Double, typeDuPrix As typePrix, prix As Double)
icount = icount + quantite
If typeDuPrix = eTotal Then
dprice = dprice + prix
ElseIf typeDuPrix = eUnitaire Then
dprice = dprice + prix * quantite
End If
End Sub
Function getInfo() As String
getInfo = icount & " " & dprice & " "
End Function
Private Sub Class_Initialize()
icount = 0
dprice = 0
End Subet un module de test:
Sub testClasse()
Dim MonPanier As New Basket
MonPanier.ajoutArticle 1, eTotal, 10
MonPanier.ajoutArticle 2, eTotal, 6
MonPanier.ajoutArticle 10, eUnitaire, 1
MsgBox MonPanier.getInfo
End Submerci beaucoup , pourquoi avez vous utilisé private au debut ? j'aimerais bien comprendre . Cordialement
'Module1
Sub cbasket()
Dim P As New Panier
P.AddArticle "toto", 0.5, 1
P.AddArticle "toto", 0.5, 1
P.AddArticle "TITI", 1, 2
Debug.Print P.count, P.price
End Subc
Bonjour,
j'ai une classe pour l'article
Private Reff_ As String, Prix_ As Double, Qts_ As Integer
Public Property Let REFF(Value As String)
ref = Value
End Property
Public Property Get REFF() As String
REFF = Reff_
End Property
Public Property Let QTS(Value As Integer)
Qts_ = Value
End Property
Public Property Get QTS() As Integer
QTS = Qts_
End Property
Public Property Let PRIX(Value As Double)
Prix_ = Value
End Property
Public Property Get PRIX() As Double
PRIX = Prix_
End Property
Public Property Get price() As String
price = Prix_ * Qts_
End Propertyj'ai une classe pour le Panier
Private Aritcles As Collection, Existe As String
Public Property Get price() As Double
Dim I As Integer
For I = 1 To Aritcles.count
price = price + Aritcles(I).price
Next
End Property
Public Property Get count() As Integer
Dim I As Integer
For I = 1 To Aritcles.count
count = count + Aritcles(I).QTS
Next
End Property
Public Sub AddArticle(REFF As String, PRIX As Double, QTS As Integer)
If Not CBool(InStr(1, "®" & Existe & "®", "®" & CStr(REFF) & "®")) Then
Aritcles.Add New ClsArticle, CStr(REFF)
Existe = Existe & "®" & CStr(REFF) & "®"
End If
With Aritcles(CStr(REFF))
.REFF = REFF
.QTS = .QTS + QTS
.PRIX = PRIX
End With
End Sub
Private Sub Class_Initialize()
Set Aritcles = New Collection
End Sub
Private Sub Class_Terminate()
Set Aritcles = Nothing
End SubVoici le fichier avec le code que j'ai montré:
