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 Sub

merci 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 Sub

Voici 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 Sub

et 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 Sub

merci beaucoup , pourquoi avez vous utilisé private au debut ? j'aimerais bien comprendre . Cordialement

capture d ecran le 2023 02 06 a 11 23 55

j'arrive pas à executer le code pour le test je crois qu'il y a une erreur 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
17cbasket.xlsm (17.92 Ko)

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 Property

j'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 Sub

Voici le fichier avec le code que j'ai montré:

17test-classe.xlsm (15.73 Ko)
Rechercher des sujets similaires à "vba class probleme code"