Bonjour,

Je sais comment faire en sorte qu'une classe soit itérable en VBA ; c'est-à-dire en rajoutant la propriété suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
 
	Set NewEnum = pNodes.[_NewEnum]
 
End Property
Où pNodes est une collection privée de la classe clsNodes.

En fait, je traite des nomenclatures depuis CATIA, un node peut donc être un assemblage, un composant, une pièce et, bien d'autres choses. Pour ceux qui ne connaissent pas CATIA, ça revient au final à manipuler des dossiers et des fichiers.

J'ai déjà rajouté la fonction suivante à la classe clsNodes pour en quelque sorte filtrer sur les assemblages uniquement :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Public Function products() As clsNodes
 
    Set products = New clsNodes
 
    Dim node As clsNode: For Each node In pNodes
 
        If node.type  = "product" Then products.add node:=node
 
    Next node
 
End Function
Ainsi, je peux par exemple itérer et mettre à jour les assemblages :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Dim node As clsNode: For Each node In nodes.products
 
    node.update(...)
 
Next node
Par contre, ce qui m'inquiète un peu, c'est de savoir si j'itère sur nodes, est-ce que les node qui sont des assemblages tiendront bien compte de la mise à jour ?

Bien sûr, je passe tout par réfèrence et ça à l'air de fonctionner, mais je reste quand même dubitatif à cause du Set pNodes = New Collection à l'initialisation de clsNodes...

Par ailleurs, serait-ce possible d'itérer de la façon suivante, c'est-à-dire de passer un paramètre au NewEnum :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
For Each node In nodes(type :="product")
 
    node.update(...)
 
Next node
Bien sûr, il s'agit que de code illustrant les grandes lignes de ce que je souhaite faire, mais je pense que ça doit suffir à la compréhension.

Merci par avance !