Bonjour,
je suis en train de faire un test avec des collections.
voilà, j'ai une classe "obj" toute simple sans truc particulier.
j'ai par exemple une methode "truc()".

Ensuite je veux créer une classe "Dossier" qui devra stocker des "obj".
et etre capable de m'en retrouner une collection. un peu comme le Folder.Files du FSO Folder etant le Dossier et Files me retourne une collection de file (obj chez moi)

voici donc comment j'ai commencé (je debute avec les collection )
code de la classe dossier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
' données membres
Private lstobj As Collection
 
' constructeur
Private Sub Class_Initialize()
  Set lstobj = New Collection
End Sub
 
' destructeur
Private Sub Class_Terminate()
  Set lstobj = Nothing
End Sub
 
' membres classiques... d'accés à la collection
Public Property Get Item(AValue As Variant) As Obj
  Set Item = lstobj.Item(AValue)
End Property
Public Property Get Count() As Long
  Count = lstobj.Count
End Property
Friend Sub Append(ByRef o As Obj)
  lstobj.Add o ' ajoute dans la collection
End Sub
 
' pour generer des membres...
Public Sub generer(ByVal n As Long)
Dim x As Obj
    For i = 1 To n
        Set x = New Obj
        x.nom = "généré " & i   'un exemple
        x.v = Sin(i)   'un exemple
        lstobj.Add x
    Next
End Sub
'Public Function GetObjs() as ....?
'???
'End function
voilà jusque là ca marche bien.
dans mon form, je fais ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Dim d As Dossier
Set d = New Dossier
d.generer 5
 
For Each bidule In d.GetObjs
 bidule.truc()
Next
Premiere question, comment je fait mon "GetObjs" ?
Deuxieme question, est-ce que je suis obligé de passer par un "GetObjs", n'est-il pas possible d'avoir un truc qui marche avec "For Each bidule in d" ?

pour info (mais ca ne sert a rien dans l'exemple) voici le code de la classe obj :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
'code bidon pour l'exemple
Public nom As String
Public x As Long
Public Function truc() As Long
    Debug.Print "truc! sur" & nom
    truc = 2 * x
End Function
Public Property Get v() As Long
    v = x
End Property
Public Property Let v(a As Long)
    x = Abs(a)
End Property
Merci.