Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" a écrit dans le message de news:
Bonjour,
J'ai créé un objet dans un module de classe. J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Merci pour votre aide.
-- Patrick
Jacques93
Bonjour michdenis: A moins d'avoir loupé une marche l'exemple que tu cites permet de faire une boucle For I=x To x.Count mais pas For Each ... In ... Non ...? et ça je ne vois toujours pas en VBA Peux tu nous éclairer ? Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" a écrit dans le message de news:
Bonjour,
J'ai créé un objet dans un module de classe. J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Merci pour votre aide.
-- Cordialement,
Jacques.
Bonjour michdenis:
A moins d'avoir loupé une marche l'exemple que tu cites permet de faire
une boucle For I=x To x.Count mais
pas For Each ... In ...
Non ...?
et ça je ne vois toujours pas en VBA
Peux tu nous éclairer ?
Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" <nospam_patrick.fredin@iquebec.com> a écrit dans le message de news:
54FA65F6-56C7-4E57-BBD5-5C5334D0756A@microsoft.com...
Bonjour,
J'ai créé un objet dans un module de classe.
J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet
ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Bonjour michdenis: A moins d'avoir loupé une marche l'exemple que tu cites permet de faire une boucle For I=x To x.Count mais pas For Each ... In ... Non ...? et ça je ne vois toujours pas en VBA Peux tu nous éclairer ? Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" a écrit dans le message de news:
Bonjour,
J'ai créé un objet dans un module de classe. J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Merci pour votre aide.
-- Cordialement,
Jacques.
michdenis
Bonjour Jacques93,
Ce fichier exemple est expliqué dans le chapitre VI du bouquin suivant : "Excel 2003 VBA Programmer's Reference" dont les auteurs sont : Paul Kimmel, Stephen Bullen, John Green, Rob Bovey, Robert Rosenberg
Je n'ai pas l'intention de reprendre les explications du bouquin et de les traduire ici !
Si tu observes le contenu du module de classe : clsEmployees les 4 méthodes y sont définies.
Tu as accès à la bouche for each c in collection.items à cause de ceci : '--------------- Public Property Get Items() As Collection Set Items = colEmployees End Property '--------------- colEmployees est défini dans le haut du module comme étant une collection.
Dans le module standard, la procédure "AddEmployees" fait une démonstration assez éloquente de la boucle sur chacun des éléments de la collection. Observe bien les dernières lignes de code de la procédure et la manière dont il a défini "Items" dans "Public Property Get Items() As Collection" un peu plus haut dans le module de classe. '--------------- For Each Employee In Employees.Items MsgBox Employee.Name & " earns $" & Employee.WeeklyPay Next Employee '---------------
La lecture et l'explication du code inscrit dans un module de classe ne sont pas toujours évidentes. Il faut s'y adonner régulièrement pour saisir toute la mécanique dernière et les concepts afférents.
Salutations!
"Jacques93" a écrit dans le message de news: % Bonjour michdenis: A moins d'avoir loupé une marche l'exemple que tu cites permet de faire une boucle For I=x To x.Count mais pas For Each ... In ... Non ...? et ça je ne vois toujours pas en VBA Peux tu nous éclairer ? Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" a écrit dans le message de news:
Bonjour,
J'ai créé un objet dans un module de classe. J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Merci pour votre aide.
-- Cordialement,
Jacques.
Bonjour Jacques93,
Ce fichier exemple est expliqué dans le chapitre VI du bouquin suivant :
"Excel 2003 VBA Programmer's Reference" dont les auteurs sont :
Paul Kimmel, Stephen Bullen, John Green, Rob Bovey, Robert Rosenberg
Je n'ai pas l'intention de reprendre les explications du bouquin et de les traduire ici !
Si tu observes le contenu du module de classe : clsEmployees
les 4 méthodes y sont définies.
Tu as accès à la bouche for each c in collection.items à cause de ceci :
'---------------
Public Property Get Items() As Collection
Set Items = colEmployees
End Property
'---------------
colEmployees est défini dans le haut du module comme étant une collection.
Dans le module standard, la procédure "AddEmployees" fait une démonstration assez éloquente de la boucle sur chacun des éléments de
la collection. Observe bien les dernières lignes de code de la procédure et la manière dont il a défini "Items" dans "Public
Property Get Items() As Collection" un peu plus haut dans le module de classe.
'---------------
For Each Employee In Employees.Items
MsgBox Employee.Name & " earns $" & Employee.WeeklyPay
Next Employee
'---------------
La lecture et l'explication du code inscrit dans un module de classe ne sont pas toujours évidentes. Il faut s'y adonner
régulièrement pour saisir toute la mécanique dernière et les concepts afférents.
Salutations!
"Jacques93" <jacques@NoSpam> a écrit dans le message de news: %23NtlX7R0FHA.2064@TK2MSFTNGP09.phx.gbl...
Bonjour michdenis:
A moins d'avoir loupé une marche l'exemple que tu cites permet de faire
une boucle For I=x To x.Count mais
pas For Each ... In ...
Non ...?
et ça je ne vois toujours pas en VBA
Peux tu nous éclairer ?
Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" <nospam_patrick.fredin@iquebec.com> a écrit dans le message de news:
54FA65F6-56C7-4E57-BBD5-5C5334D0756A@microsoft.com...
Bonjour,
J'ai créé un objet dans un module de classe.
J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet
ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Ce fichier exemple est expliqué dans le chapitre VI du bouquin suivant : "Excel 2003 VBA Programmer's Reference" dont les auteurs sont : Paul Kimmel, Stephen Bullen, John Green, Rob Bovey, Robert Rosenberg
Je n'ai pas l'intention de reprendre les explications du bouquin et de les traduire ici !
Si tu observes le contenu du module de classe : clsEmployees les 4 méthodes y sont définies.
Tu as accès à la bouche for each c in collection.items à cause de ceci : '--------------- Public Property Get Items() As Collection Set Items = colEmployees End Property '--------------- colEmployees est défini dans le haut du module comme étant une collection.
Dans le module standard, la procédure "AddEmployees" fait une démonstration assez éloquente de la boucle sur chacun des éléments de la collection. Observe bien les dernières lignes de code de la procédure et la manière dont il a défini "Items" dans "Public Property Get Items() As Collection" un peu plus haut dans le module de classe. '--------------- For Each Employee In Employees.Items MsgBox Employee.Name & " earns $" & Employee.WeeklyPay Next Employee '---------------
La lecture et l'explication du code inscrit dans un module de classe ne sont pas toujours évidentes. Il faut s'y adonner régulièrement pour saisir toute la mécanique dernière et les concepts afférents.
Salutations!
"Jacques93" a écrit dans le message de news: % Bonjour michdenis: A moins d'avoir loupé une marche l'exemple que tu cites permet de faire une boucle For I=x To x.Count mais pas For Each ... In ... Non ...? et ça je ne vois toujours pas en VBA Peux tu nous éclairer ? Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" a écrit dans le message de news:
Bonjour,
J'ai créé un objet dans un module de classe. J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Merci pour votre aide.
-- Cordialement,
Jacques.
anonymousA
Bonjour,
Ce qui suit est un extrait traduit que j'ai légèrement adapté ( mais à peine) du livre "Professional Excel Development" de Bullen, Green, Bovey) ouvrage extrêmement riche , mais pas traduit en Français ( du moins pour l'instant).
La collection est déclarée comme Private de niveau module et est instanciée lors du déclenchment de la procedure Initialize du module de classe. En raison du fait que l'objet collection est caché de l'extérieur en effet il est déclaré dans le module de classe) , il est nécéssaire d'écrire des méthodes add,count,item,remove propres au module de classe pour permettre que cette collection ait le même comportement qu'une collection habituelle.
La collection en question n'a pas de propriété par défaut.En conséquence , on ne peut court-circuiter la propriété Item en utilisant le classique Nomdecollection(1) p.e. On doit spécifier explicitement la proprété Item dans le code.Par ailleurs, il n'est pas possible sauf à utiliser les explications ci-dessous de faire un for each sur les membres de la collection.
Pour pouvoir créer une possibilité de for each ou créer une propriété item par défaut, il faut utiliser l'une des 2 possibilités suivantes:
On exporte le module de classe de VBA
1-par VB6, on travaille ce module de classe en déclarant la propriété Item comme étant la propriété par défaut(c'est possible qous VB6 mais pas sous VBA) .Puis on crée une fonction
Public function NewEnumGet NewEnum() As IUnknown set NewEnum=nomdelacollection.[_NewEnum] end function
Cette procédure doit avoir l'attribut -4, ce qu'on peut réaliser avec VB6. On sauvegarde ce qu'on a fait dans VB6, puis on importera le module de classe travaillé ainsi sous VBA.
-Avec un éditeur de texte On modifie le code du module de classe de la manière suivante
Property Get Item(ByVAal vID as variant) as "quelquechose" Attribute Item.VB_UserMemId=0 SetItem=nomdelacollection(vID) End Property
Public function NewEnum() As IUnknown Attribute NewEnum.VB_UserMemId=-4 set NewEnum=nomdelacollection[._NewEnum] end function
On sauvegarde ce qu'on a fait dans l'éditeur de texte, puis on importera le module de classe travaillé ainsi sous VBA.
A noter que les lignes commencant par Attribute ne seront pas visibles dans l'éditeur VBE.
Une fois qu'on a réalisé l'une des 2 possibilités ci-dessus, il devient possible sous VBA de faire une boucle For each c in nomdelacollection ou d'ailleurs de désigner un membre de celle-ci une fois constituée par nomdelacollection(1) p.e
Cordialement,
A+
Bonjour michdenis: A moins d'avoir loupé une marche l'exemple que tu cites permet de faire une boucle For I=x To x.Count mais pas For Each ... In ... Non ...? et ça je ne vois toujours pas en VBA Peux tu nous éclairer ? Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" a écrit dans le message de news: Bonjour,
J'ai créé un objet dans un module de classe. J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Merci pour votre aide.
Bonjour,
Ce qui suit est un extrait traduit que j'ai légèrement adapté ( mais à
peine) du livre "Professional Excel Development" de Bullen, Green,
Bovey) ouvrage extrêmement riche , mais pas traduit en Français ( du
moins pour l'instant).
La collection est déclarée comme Private de niveau module et est
instanciée lors du déclenchment de la procedure Initialize du module de
classe. En raison du fait que l'objet collection est caché de
l'extérieur en effet il est déclaré dans le module de classe) , il est
nécéssaire d'écrire des méthodes add,count,item,remove propres au module
de classe pour permettre que cette collection ait le même comportement
qu'une collection habituelle.
La collection en question n'a pas de propriété par défaut.En conséquence
, on ne peut court-circuiter la propriété Item en utilisant le classique
Nomdecollection(1) p.e. On doit spécifier explicitement la proprété Item
dans le code.Par ailleurs, il n'est pas possible sauf à utiliser les
explications ci-dessous de faire un for each sur les membres de la
collection.
Pour pouvoir créer une possibilité de for each ou créer une propriété
item par défaut, il faut utiliser l'une des 2 possibilités suivantes:
On exporte le module de classe de VBA
1-par VB6, on travaille ce module de classe en déclarant la propriété
Item comme étant la propriété par défaut(c'est possible qous VB6 mais
pas sous VBA) .Puis on crée une fonction
Public function NewEnumGet NewEnum() As IUnknown
set NewEnum=nomdelacollection.[_NewEnum]
end function
Cette procédure doit avoir l'attribut -4, ce qu'on peut réaliser avec VB6.
On sauvegarde ce qu'on a fait dans VB6, puis on importera le module de
classe travaillé ainsi sous VBA.
-Avec un éditeur de texte
On modifie le code du module de classe de la manière suivante
Property Get Item(ByVAal vID as variant) as "quelquechose"
Attribute Item.VB_UserMemId=0
SetItem=nomdelacollection(vID)
End Property
Public function NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId=-4
set NewEnum=nomdelacollection[._NewEnum]
end function
On sauvegarde ce qu'on a fait dans l'éditeur de texte, puis on importera
le module de classe travaillé ainsi sous VBA.
A noter que les lignes commencant par Attribute ne seront pas visibles
dans l'éditeur VBE.
Une fois qu'on a réalisé l'une des 2 possibilités ci-dessus, il devient
possible sous VBA de faire une boucle For each c in nomdelacollection ou
d'ailleurs de désigner un membre de celle-ci une fois constituée par
nomdelacollection(1) p.e
Cordialement,
A+
Bonjour michdenis:
A moins d'avoir loupé une marche l'exemple que tu cites permet de faire
une boucle For I=x To x.Count mais
pas For Each ... In ...
Non ...?
et ça je ne vois toujours pas en VBA
Peux tu nous éclairer ?
Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait
t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" <nospam_patrick.fredin@iquebec.com> a écrit dans le
message de news: 54FA65F6-56C7-4E57-BBD5-5C5334D0756A@microsoft.com...
Bonjour,
J'ai créé un objet dans un module de classe.
J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui
permet
ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Ce qui suit est un extrait traduit que j'ai légèrement adapté ( mais à peine) du livre "Professional Excel Development" de Bullen, Green, Bovey) ouvrage extrêmement riche , mais pas traduit en Français ( du moins pour l'instant).
La collection est déclarée comme Private de niveau module et est instanciée lors du déclenchment de la procedure Initialize du module de classe. En raison du fait que l'objet collection est caché de l'extérieur en effet il est déclaré dans le module de classe) , il est nécéssaire d'écrire des méthodes add,count,item,remove propres au module de classe pour permettre que cette collection ait le même comportement qu'une collection habituelle.
La collection en question n'a pas de propriété par défaut.En conséquence , on ne peut court-circuiter la propriété Item en utilisant le classique Nomdecollection(1) p.e. On doit spécifier explicitement la proprété Item dans le code.Par ailleurs, il n'est pas possible sauf à utiliser les explications ci-dessous de faire un for each sur les membres de la collection.
Pour pouvoir créer une possibilité de for each ou créer une propriété item par défaut, il faut utiliser l'une des 2 possibilités suivantes:
On exporte le module de classe de VBA
1-par VB6, on travaille ce module de classe en déclarant la propriété Item comme étant la propriété par défaut(c'est possible qous VB6 mais pas sous VBA) .Puis on crée une fonction
Public function NewEnumGet NewEnum() As IUnknown set NewEnum=nomdelacollection.[_NewEnum] end function
Cette procédure doit avoir l'attribut -4, ce qu'on peut réaliser avec VB6. On sauvegarde ce qu'on a fait dans VB6, puis on importera le module de classe travaillé ainsi sous VBA.
-Avec un éditeur de texte On modifie le code du module de classe de la manière suivante
Property Get Item(ByVAal vID as variant) as "quelquechose" Attribute Item.VB_UserMemId=0 SetItem=nomdelacollection(vID) End Property
Public function NewEnum() As IUnknown Attribute NewEnum.VB_UserMemId=-4 set NewEnum=nomdelacollection[._NewEnum] end function
On sauvegarde ce qu'on a fait dans l'éditeur de texte, puis on importera le module de classe travaillé ainsi sous VBA.
A noter que les lignes commencant par Attribute ne seront pas visibles dans l'éditeur VBE.
Une fois qu'on a réalisé l'une des 2 possibilités ci-dessus, il devient possible sous VBA de faire une boucle For each c in nomdelacollection ou d'ailleurs de désigner un membre de celle-ci une fois constituée par nomdelacollection(1) p.e
Cordialement,
A+
Bonjour michdenis: A moins d'avoir loupé une marche l'exemple que tu cites permet de faire une boucle For I=x To x.Count mais pas For Each ... In ... Non ...? et ça je ne vois toujours pas en VBA Peux tu nous éclairer ? Merci.
Bonjour Patrick,
Voici un fichier exemple de l'excellent John Green (MVP) qui pourrait t'aider ...!
http://cjoint.com/?kpaWuRTsp7
Salutations!
"Patrick Fredin" a écrit dans le message de news: Bonjour,
J'ai créé un objet dans un module de classe. J'ai créé aussi une autre classe qui est une collection de mon objet.
Est-il possible de créer une propriété dans la classe Collection qui permet ensuite de l'utiliser pour faire un "For Each ... in ..." ?
Merci pour votre aide.
Jacques93
Bonjour michdenis et anonymousA,
Merci de vos explications :-) L'absence du choix Outils / Attributs de procédure ... présent dans VB6, devait pertuber quelque peu mon raisonnement...
-- Cordialement,
Jacques.
Bonjour michdenis et anonymousA,
Merci de vos explications :-)
L'absence du choix Outils / Attributs de procédure ... présent dans VB6,
devait pertuber quelque peu mon raisonnement...