cs_TomC
Messages postés42Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention17 mai 2006
-
13 févr. 2006 à 19:05
cs_TomC
Messages postés42Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention17 mai 2006
-
14 févr. 2006 à 11:43
Bonjour tout le monde.
Je débute avec les modules de classes en vba et je suis confronté à un problème.
Mon code est composé de 2 modules de classes et d'un module qui fait appel à ces modules de classe.
Le problème est le suivant:
J'instancie mesModeles et je lui ajoute une instance de monModele avec la methode addModele(m as monModele). Par la suite je cherche a récupérer cet objet avec la methode getModele( i as integer) de mesModeles, mais cela ne fonctionne pas.
J'ai testé un peu tout, donc si quelqu'un pouvait me donner un pti coup de pouce.
merci d'avance.
Tom
-------
module
-------
Public mon As New monModele
Public mon2 As New monModele
Public mes As New mesModeles
Public Sub init()
mon.setA 3
mon.setBeta 4
mon.setNom "test"
mon.setTxMarque 10
mon.setTxModele 20
mon.setTxParticulier 30
mon.setTxSegment 40
mon.afficher
Debug.Print "mon:"
mes.addModele mon
Set mon2 = mes.getModele(0)
Debug.Print "mon2:"
mon2.afficher
End Sub
-------------
MonModele
-------------
Private nom As String
Private modele As modele
Private rng As Range
Private a As Integer
Private beta As Integer
Private volumes As Variant
Private lois As Variant
Private tailleVolumes As Integer
Private tailleLois As Integer
Private Sub Class_Initialize()
tailleVolumes = 0
tailleLois = 0
End Sub
Public Function getNom() As String
getNom = nom
End Function
Public Sub setNom(n As String)
nom = n
End Sub
Public Function getRng() As Range
getRng = rng
End Function
Public Sub setRng(rng1 As Range)
Set rng = rng1
End Sub
Public Function getA() As Integer
getA = a
End Function
Public Sub setA(a1 As Integer)
a = a1
End Sub
Public Function getBeta() As Integer
getBeta = beta
End Function
Public Sub setBeta(Beta1 As Integer)
beta = Beta1
End Sub
Public Function getTxParticulier() As Double
getTxParticulier = modele.txParticulier
End Function
Public Function setTxParticulier(t As Double)
modele.txParticulier = t
End Function
Public Function getTxSegment() As Double
getTxSegment = modele.txSegment
End Function
Public Function setTxSegment(t As Double)
modele.txSegment = t
End Function
Public Function getTxMarque() As Double
getTxMarque = modele.txMarque
End Function
Public Function setTxMarque(t As Double)
modele.txMarque = t
End Function
Public Function getTxModele() As Double
getTxModele = modele.txModele
End Function
Public Function setTxModele(t As Double)
modele.txModele = t
End Function
Public Function getVolumes() As Variant
getVolumes = volumes
End Function
Public Sub setVolumes(v As Variant)
volumes = v
tailleVolumes = UBound(volumes) - LBound(volumes)
End Sub
Public Function getLois() As Variant
getLois = lois
End Function
Public Sub setLois(l As Variant)
lois = l
tailleLois = UBound(lois) - LBound(lois)
End Sub
Public Sub afficher()
Debug.Print "------------------------------------------------"
Debug.Print nom
Debug.Print "................................................."
'Debug.Print "Range=" & rng.Address
Debug.Print "txParticulier=" & modele.txParticulier
Debug.Print "txSegment=" & modele.txSegment
Debug.Print "txMarque=" & modele.txMarque
Debug.Print "txModele=" & modele.txModele
Debug.Print "a=" & a
Debug.Print "beta=" & beta
Debug.Print "------------------------------------------------"
End Sub
Private Sub Class_Terminate()
End Sub
-------------
mesModeles
-------------
Private nbModeles As Integer
Private modeles() As New monModele
Private volumes As Variant
Private lois As Variant
Private tailleMax As Integer
Private Sub Class_Initialize()
nbModeles = 0
End Sub
Public Function getNbModeles() As Integer
getNbModeles = nbModeles
End Function
Public Function getModele(k As Integer) As monModele
getModele = modeles(k)
End Function
Public Sub addModele(m As monModele)
If Not m Is Nothing Then
nbModeles = nbModeles + 1
ReDim Preserve modeles(nbModeles)
Set modeles(nbModeles - 1) = m
If Module2.debuged Then
Debug.Print "modele ajouté a mesModeles"
Debug.Print "nbModeles=" & nbModeles
Debug.Print "modeles(" & nbModeles - 1&; ") :"
modeles(nbModeles - 1).afficher
End If
End If
End Sub
Private Sub Class_Terminate()
Set modeles = Nothing
End Sub
kalobit
Messages postés169Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention 7 avril 20082 14 févr. 2006 à 10:29
salut,
visiblement, tu n'utilise pas les syntaxes de module de classe mais ça ne semble pas être la source de ton problème.
Si j'ai bien compris, tu utilise deux classes Modeles et modele.
En toute logique, la classe modeles est une collection d'objets de classe modele.
Pour bien faire, il faudrait que ta classe modeles soit une classe collection.
Pour ça, tu déclare une collection privée dans modeles.
Ensuite tu code les propriétés et méthodes d'une collection dans cette classe en utilisant les instruction s suivantes :
property get
property let
et property set
Voici un exemple de classe collection :
ici, il s'agit d'une collection d'objet immeule, correspondant à une autre classe
' déclaration de la collection
Private Immcol As Collection
Public Function Add(Imm As Immeuble, Optional sKey As String) As Immeuble
'Ajoute l'opération à la collection
If Len(sKey) = 0 Then
Immcol.Add Imm, Imm.Nom
Else
Immcol.Add Imm, sKey
End If
'renvoyer l'objet créé
Set Add = Imm
make_moyenne
End Function
Public Property Get Item(vntIndexKey As Variant) As Immeuble
'renvoie une opération de la collection
Set Item = Immcol(vntIndexKey)
End Property
Public Property Get Count() As Long
'utilisée pour lire le nombre d'éléments dans la collection.
Count = Immcol.Count
End Property
Public Sub Remove(vntIndexKey As Variant)
'utilisée lors de la suppression d'un élément de la collection
'vntIndexKey contient l'index ou la clé, il est donc
'déclaré en tant que Variant
Immcol.Remove vntIndexKey
End Sub
Private Sub Class_Initialize()
'Crée la collection lorsque cette classe est créée
Set Immcol = New Collection
End Sub
Private Sub Class_Terminate()
'Détruit la collection lorsque cette classe est détruite
Set Immcol = Nothing
End Sub
Voilà, bon courage à toi
et n'hésite pas si tu à encore des questions