Classe super-collection "multi-itérable"
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:
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:
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:
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:
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 !