laurent950
XLDnaute Barbatruc
Bonjour Le Forum,
J'ai réalisé un Module de classe (CPays) avec une Variable de Type Collection (Coll) qui inclut dans le Module de classe.
Le Principe avec une boucle For je viens Créer une nouvelle instance à chaque itération
de l'objet Pays, dont je me sers pour remplir cette classe.
Je souhaite une fois cette classe remplie consigner cette classe dans la collection qui elle est incluse dans le module de classe.
Par la suite je souhaite appeler cette collection depuis le module standard, car cette collection se trouve dans le module de classe, avec un code pour y retrouver la photocopie de la classe correspondante a ce qui a était précédemment enregistré et remplis !
J'ai réalisé la macro, mais cela ne fonctionne pas.
En Exemple :
j'ai écrit le code, dans la zone de texte sur la Feuil à côté du tableau structurée.
la collection se situe dans le module standard, et cela me renvois les bon résultat.
je souhaite l'inverse la collection dans le module de classe et aucune collection dans le module standard.
Je poste le code qui ne fonctionne pas ci-dessous avec le fichier joint.
Si vous avez l'explication et même la solution je vous remercie car je ne trouve pas la solution après plusieurs recherches ?
Module Standard : Ci-Dessous
Module De Classe(ClsPays) : Ci-Dessous
J'ai réalisé un Module de classe (CPays) avec une Variable de Type Collection (Coll) qui inclut dans le Module de classe.
Le Principe avec une boucle For je viens Créer une nouvelle instance à chaque itération
de l'objet Pays, dont je me sers pour remplir cette classe.
Je souhaite une fois cette classe remplie consigner cette classe dans la collection qui elle est incluse dans le module de classe.
Par la suite je souhaite appeler cette collection depuis le module standard, car cette collection se trouve dans le module de classe, avec un code pour y retrouver la photocopie de la classe correspondante a ce qui a était précédemment enregistré et remplis !
J'ai réalisé la macro, mais cela ne fonctionne pas.
En Exemple :
j'ai écrit le code, dans la zone de texte sur la Feuil à côté du tableau structurée.
la collection se situe dans le module standard, et cela me renvois les bon résultat.
je souhaite l'inverse la collection dans le module de classe et aucune collection dans le module standard.
Je poste le code qui ne fonctionne pas ci-dessous avec le fichier joint.
Si vous avez l'explication et même la solution je vous remercie car je ne trouve pas la solution après plusieurs recherches ?
Module Standard : Ci-Dessous
VB:
Sub CollectionDansModuleDeClasse()
Dim data As Variant ' ............................................................. 1)
data = Sheets("Collections").ListObjects(1).DataBodyRange.Value2 ' ................ 1)
Dim i As Long ' ................................................................... 1)
Dim PaysGlobal As New ClsPays ' ................................................... 2)
Dim Pays As ClsPays ' ............................................................. 3)
For i = 1 To UBound(data, 1) ' .................................................... 1)
Set Pays = PaysGlobal.Item(data(i, 1))
Set Pays = Pays
Pays.Code = data(i, 1) ' ...................................................... 4)
Pays.Nom = data(i, 2) ' ....................................................... 4)
Pays.Capitale = data(i, 3) ' .................................................. 4)
Next i
For i = 1 To UBound(data, 1)
Set Pays = Pays.TransferCollection(data(i, 1)) ' .............................. Bloque) Un seule Item est remplis avec mauvais code !
Debug.Print Pays.Code, Pays.Nom, Pays.Capitale
Next i
End Sub
Module De Classe(ClsPays) : Ci-Dessous
Code:
Private mCode As String
Private mNom As String
Private mCapitale As String
Private mCLn As Collection
'
Property Get Code() As String
Code = mCode
End Property
Property Let Code(ByVal NewValue As String)
mCode = NewValue
End Property
'
Property Get Nom() As String
Nom = mNom
End Property
Property Let Nom(ByVal NewValue As String)
mNom = NewValue
End Property
'
Property Get Capitale() As String
Capitale = mCapitale
End Property
Property Let Capitale(ByVal NewValue As String)
mCapitale = NewValue
End Property
'
Property Get PhtosCopieClassWithKey() As String
Capitale = mCapitale
End Property
'
Public Function TransferCollection(ByVal NewValue As String) As ClsPays
Set TransferCollection = mCLn(NewValue)
End Function
Private Sub Class_Initialize()
Set mCLn = New Collection
End Sub
Public Function Item(ByVal NewValue As String) As ClsPays
On Error Resume Next
Set Item = mCLn(NewValue)
If Err Then
Set Item = New ClsPays
Set Item = Me
mCLn.Add Item, NewValue
End If
End Function
Pièces jointes
Dernière édition: