Propriétés d"une classe

sousou

XLDnaute Barbatruc
Bonjour à tous.
Pensez-vous qu'il soit possible de lister (dans une boucle par itération), les propriétés d'une class?
En fait je shouaite faire une procédure qui va remplir les propiétés d'un objet d'une class, et je ne connais pas le nombre de propiétés.

pour faire plus simple il me faudrait quelque chose comme cela:
for each p in maclass.properties
p=une valeur
next

Merci
 

laurent950

XLDnaute Accro
Bonjour Dranred,
J'ai bien appris sur les classes, mais il y a une choses que je ne comprend pas et que je n'arrive pas a appliquer dans
cette exemple de cours sur les modules de classes la Hiérarchie.
le liens du cour : https://sinarf.developpez.com/access/vbaclass/#L0 (Poste : 2.5. La propriété Parent)
2.5. La propriété Parent
Lorsque vous créez une hiérarchie entre vos objets, il peut être interessant de pouvoir remonter la hiérarchie, c'est le rôle de la propriété Parent. Vous pouvez d'ailleurs l'appeler autrement mais ce serait juste totalement stupide car cela rendrait votre code un peu plus obscur.
Propriété Parent
Sélectionnez
Property Set Parent(ByRef objPersons As Persons)
If objPersons Is Nothing Then
mobjParent = objPersons
End If
End Property

Property Get Parent() As Persons
Parent = mobjParent
End Property

Vous remarquerez que la propriété Parent ne peut être affectée qu'une seule fois (write once).
Pour renseigner cette propriété, il nous faudra, dans l'objet Parent, ajouter la ligne de code suivante :
Affectation de la propriété Parent
Sélectionnez
Set mobjPerson.Parent = Me

J'ai ajouté le fichier excel aussi du cours jusqu'a parent !
les évenement cela fonctionne pas car c'est pour du Access
Mais parents cela doit fonctionner
je ne sais pas faire j'y arrive pas je trouve pas l'astuce

Merci si vous avez la solution Dranred

cdt
laurent
 

Pièces jointes

  • Parent avec Modules de classes.xlsm
    163.5 KB · Affichages: 8

laurent950

XLDnaute Accro
Dranred,
J'ai trouver un exemple sur un Forum d'entre aide, C'est vraiment pas intuitif, le cours est assez complet mais impossible à mettre en Oeuvre selon mon Poste #31

Je ne suis pas resté sans rien faire et j'ai mis en Oeuvre une : remonter de la hiérarchie avec ce que j'ai pu comprendre (bien sur le code n'est pas de moi mais j'ai commenté se que je sais :
Voici le lien du site : https://www.generation-nt.com/reponses/vba-collections-entraide-870811.html
et le fichier excel avec le code qui fonctionne en message joint.

sur ce dernier Poste #32 et cette solution avec le fichier excel ci-joint qui fonctionne Bien : Remonter la hierarchie Module de Classe.xlsm

Qu'elle est le soucis avec celui du Poste #31 qui selon le cour n'est pas en relation avec la solution du Poste #32
Comment Intégré dans le fichier excel du Poste #31 la relation avec 2.5 de la propriété Parent

Je suis un peux Perdu Dranred et puis cela alimente ce Poste d'une Propriété d'une classe (Bien complexe quand même)

Merci

Cdt Laurent
 

Pièces jointes

  • Remonter la hierarchie Module de Classe.xlsm
    21.2 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Bonjour.
Dans le classeur du poste #31 il y a une erreur de compilation Type non défini à Property Set Parent(ByRef objPersons As Persons) parce qu'il n'existe pas de classe Persons. (Remarque: il y a une Person, sans s). ByRef ne m'y semble pas correct parce que vous ne faites pas dedans de Set objPersons =.
Dans celui du poste #32 il y a une erreur dans la Sub class_Terminate() de NomClasseFille (qui ne sert à rien de toute façon à mon avis) parce que vous affectez Nothing à une propriété String en lecture/écriture.

Édition: Souvent dans mes modules de classe enfants j'ai une méthode Init et j'y initialise une Private Parent à partir du 1er argument, passé Me par la classe parente. Mais je m'en sert seulement pour en appeler des méthodes lors des évènement du contrôle géré.
 
Dernière édition:

laurent950

XLDnaute Accro
Grand Merci Dranred,
Pour le Poste #31 vous pouvez me corrigé le fichier pour pour un exemple que je n'arrive pas à conceptualisé sans le fichier corrigé qui peux me servir de base, Bien sur si vous le voulez bien, cela dit je vais essayé de mon côté, je suis dans beaucoup de test que je n'arrive pas a compiler pour se fichier Poste #31
Désolé Dranred j'avance comme je peux et vous êtes un réel expert, je suis avec mes modeste moyen dans mes essaies.
laurent
 

Dranreb

XLDnaute Barbatruc
Enlevez déjà le s en trop dont je parlais, après voyez ce qu'il reste comme erreurs.
Remarque: j'en ai aperçu une en commençant à essayer de comprendre ce qu'on tente d'y faire (ce que j'ai renoncé à poursuivre): dans le module TestHierachieParent il y aura sûrement une Utilisation incorrecte du mot clé Me. Ce mot clé n'esrt utilisable que dans un module objet et il y désigne l'exemplaire qu'il est en train de traiter.
 

laurent950

XLDnaute Accro
emarque: j'en ai aperçu une en commençant à essayer de comprendre ce qu'on tente d'y faire (ce que j'ai renoncé à poursuivre): dans le module TestHierachieParent
C'est juste une procédure qui va écrire dans le module de classe l'adresse de la feuille. j'ai effacer tous ce qui est en trop pour laissé juste l'exemple
en fichier joint : Exemple Modules de classes - ClasseFeuille.xlsm
Je suis encore sur le Poste #31 Dranred

Toujours pour le Poste #31 (TestHierachieParent il y aura sûrement une Utilisation incorrecte du mot clé Me = je savais que c'est faut, mais je sais pas ou placer cette instruction avec Parent selon le cour en lien internet du Poste #31)
 

Pièces jointes

  • Exemple Modules de classes - ClasseFeuille.xlsm
    16.2 KB · Affichages: 6

laurent950

XLDnaute Accro
Merci Dranred, encore des questions !
Correctif du Poste #31
j'ai corrigé le code, mais je n'arrive pas a faire apparaitre le nom complet de cette classe Person depuis la classe Persons !
' classe lier a Person
Set objPersons = New Persons
MsgBox objPersons.Item.NomComplet
OU
MsgBox objPersons.Item(3).NomComplet

J'ai bien lu tous vos poste et c'est comme cela que je progresse, vous voyer une incohérence quelque Part ?

Encore merci
 

Pièces jointes

  • 31-1_Parent avec Modules de classes.xlsm
    28.5 KB · Affichages: 5
Dernière édition:

laurent950

XLDnaute Accro
Autres test, impossible a faire hérité une classe a partir d'une autre comme indiqué dans le cour, aussi c'est quoi ADD = je pensé que c'était la classe entière en héritage ?
Je comprend pas vraiment car a la suite du point de MsgBox objPersons.Item . NomComplet (la liste compléte de la classe enfants apparait) mais impossible d'avoir la source (le résultat)

J'ai encore passé du temps sur le fichier : 31-3_Parent avec Modules de classes.xlsm
 

Pièces jointes

  • 31-3_Parent avec Modules de classes.xlsm
    28.8 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
J'ai bien du mal à comprendre où vous voulez en venir.
Ce sera à la procédure d'application de fabriquer le Person qui sera ajouté à la collection ? Pourquoi pas après tout.
Pour votre test, à quel moment ajoutez vous un 3ième Person à la collection ? J'ai peut être mal vu mais il me semble que vous n'en ajoutez aucun vu que vous n'utilisez pas la méthode Add de Persons.
 

laurent950

XLDnaute Accro
Je suis un peux perdu,
Mais l'idée est la suivante, imaginons qu'il y est un fichier excel avec deux classe, la A et la B.
alors que je suis dans la classe A j'ai besoin pour une raison quelconque de faire une action précise
Imaginons que j'ai (une variable tableau dans la classe A), dont je doit extraire toutes les lignes de la troisièmes colonne.
Bon justement la méthode existe bien mais elle se trouve dans la Classe B

Alors ma question et la suivante, comment faire pour appeler cette procédure depuis la classe A (sachant qu'elle se trouve dans la classe B)

C'est un exemple mais ces cette idée de me servir de ce qui existe (alors effectivement j'ai pas envie de refaire le code mais juste de me servir de ce qui est déjà existant /// alors justement les ajouts par collections ? L'objet Parent ? Add (J'avoue je suis perdu)

Difficile de faire passer une idée, mais j'essaie au mieux Dranred, c'est pour cette raison que j'ai envie de comprendre ce que le cours au poste 2.5 explique par rapport à mon poste #31 (sur ce fils) essaie d'expliquer : (Mais cette exemple excel est pas bon)
Extrait du cour.
- Lorsque vous créez une hiérarchie entre vos objets, il peut être intéressant de pouvoir remonter la hiérarchie, c'est le rôle de la propriété Parent.Vous pouvez d'ailleurs l'appeler autrement mais ce serait juste totalement stupide car cela rendrait votre code un peu plus obscur.

Très franchement je sais pas mettre en application et j'ai des bouts de code mais pas un fichier avec un exemple.

Merci Dranred pour votre écoute et patience, vous êtes fort de conseilles et j'essaie de les suivre (en faite je les suis mes pas assez fort je fait des erreurs bien sur malgré moi)

Cdt
Laurent
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
J'ai une variable Private Parent As ComboBoxLiées dans le module de classe ComboBoxMmbr et As ControlsAssociés dans les CAsso spécifiques. J'en ai besoin pour appeler des méthodes du parent lors d'évènements du contrôle MSForms pris en charge. Il sont initialisés par la méthode Init invoquée par la méthode Add de ce parent, qui y transmet Me comme 1er argument.
 
Dernière édition:

laurent950

XLDnaute Accro
J'ai compris se que vous avez dit est aussi réalisé, cela serait mentir de dire que je serais le refaire c'est très astucieux votre programme et code.
j'ai une question (Sub Init) = Init "C'est un mot réservé en VBA / Add = C'est aussi des Mots réservé (qui font partie de la programmation)

Il faudrait juste un petite exemple tous simple pour que je puisse comprendre, votre code est vraiment très bien fait, mais j'ai du mal à reconstitué les chemins, c'est complexe. mais le principe est vraiment au top (j'aimerais maîtriser aussi)

en attendant je suis entrain de lire pour comprendre, si vous avez un fichier (avec un exemple mais vraiment très simple) je suis preneur
Merci Dranred
 

Discussions similaires

Réponses
3
Affichages
327
Réponses
2
Affichages
553

Statistiques des forums

Discussions
312 322
Messages
2 087 285
Membres
103 507
dernier inscrit
tapis23