Bonjour,
Je sais comment faire en sorte qu'une classe soit itérable en VBA ; c'est-à-dire en rajoutant la propriété suivante :
Où pNodes est une collection privée de la classe clsNodes.
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
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 :
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
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
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 ?
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
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 :
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.
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
Merci par avance !
Partager