IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer des objets imbriqués


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut Créer des objets imbriqués
    Bonjour,

    Je suis un peu newbie en programmation objet et j'ai besoin d'aide

    Je cherche à créer des objets imbriqués un peu du même type (pour faire simple) que "workbook.sheet.Cells.value"

    Et je n'y arrive pas !!!

    Ce dont j'ai besoin est du type :

    Etablissement(W).Secteur(X).Periode(Y).Nom(Z).Valeur

    Etablissement étant déclaré en integer
    Secteur en string
    Periode en string
    Nom en string
    et valeur en integer

    Voilà,

    HELP !!!!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Salut et merci de ta réponse !!

    Malheureusement je ne crois pas que la solution réside dans un tableau (enfin pas totalement)...

    Ce dont j'ai besoin serais plutot du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Type Serie
        Type Etablissement as Integer
            Type Secteur as String
                Type Periode as String
                    Type Nom as String
                        Valeur As Variant
                    End Type
                End Type
            End Type
        End Type
    End Type
    Sachant que ceci n'est pas du tout exact....

  3. #3
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    ben non, tu dois définir des classes pour faire ce que tu veux

    une classe etablissement contenant une classe secteur ... etc

    mais bon je suis pas sur que cela te sera vraiment utile ( si ce n'est apprendre à créer des classes d'objet )

    quel est ton but, explique nous bien, et l'on pourra mieux t'aiguiller dvers la bonne solutioin.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    C'est exactement ça (enfin je pense)

    Depuis hier donc je zone entre les type utilisateurs et les classes d'objets (que ne sait pas créer)

    j'ai donc trouvé le tuto de Michel Blavin (très bien fait) mais je pense qu'il s'arrête là où je veux aller....

    Pour prendre un autre exemple j'ai besoin d'une classe Grand-Parent contenant une classe Parent contenant une classe Enfant, etc...

    Pour pouvoir gérer des hierarchie telles que :

    GrandParent("Louis").Parent("Claude").Fils("Kevin").Age = 9

  5. #5
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    ben en fait, il explique tout

    tu dois juste imbriquer les classes
    c'est a dire un objet grand parent doit être composé d'un objet parent qui lui même contient un objet fils qui posede la proprieté age.

    donc en gros, définir une variable de type parent dans grand parent par exemple

    ce tuto est très bien fait inspire toi en!

    :p)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Bon, alors voilà ou j'en suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'Classe cl_Fils
    Public Age as Variant
     
    'Classe cl_Parent
    Public Fils as cl_Fils
    Et dans le Module normal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Test()
    Dim Parent As cl_Parent
    Set Parent = New cl_Parent
     
    Parent.Fils.Age = 9
     
    End Sub
    Et là ça plante : "Variable Objet ou variable de bloc with non définie"
    idem si j'ajoute Set Fils = New cl_Fils

  7. #7
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    noublie pas que fils doit etre une propriété de parent
    que tu dois creer cette propriete dans la classe parent et l'initialiser lorsque tu en cree une nouvelle

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Ok, j'avance petit à petit

    A la classe Parent, j'ai ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub class_Initialize()
        Set Fils = New cl_Fils
    End Sub
    Et ça marche ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub Test()
    Dim Parent As cl_Parent
    Set Parent = New cl_Parent
    Parent.Fils.Age = 9
    End Sub
    Bon, maintenant niveau 2

    Remplacer :
    Parent.Fils.Age = 9

    Par :
    Parent("Martin").Fils("Kevin").Age = 9

    Penses-tu que je puisse y arriver en utilisant les Collection d'objets ?

  9. #9
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    le réponse est dans la question!


  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Je prends ça comme un OUI...

    Le probleme c'est que là je sèche sur l'implementation...

  11. #11
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    Allez, je te file un lien


    How to create a collection of object

  12. #12
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    tiens un autre
    Help

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    MERKI !

    Je vais voir... (ch'ui au bouot et a priori le firewall bloque l'acces à ces liens...)

  14. #14
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir


    as tu consulté ce lien ?

    http://www.developpez.net/forums/sho...d.php?t=534502


    bonne soirée
    michel

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    C'est exactement ça !

    Sauf que moi je cherche à faire comme lui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne("TOTO").Visage.Cheveux.Couleur="Blond"
    Or dans l'exemple fourni on ne peut a priori faire que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Quidam.Visage.Cheveux.Couleur = "Blond"
    La dénomination d'un objet "TOTO" est très importante pour ce dont j'ai besoin...

  16. #16
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    inspire toi de ceci

    Template Classe with collection

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Désolé,

    Je vois pas très bien ou tu veux en venir...
    L'exemple reprends a peu pres celui du tuto de Michel Blavin avec cette fonction en plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ' Implement support for enumeration (For Each)
     
    Function NewEnum() As IUnknown
    Attribute NewEnum.VB_UserMemId = -4
    Attribute NewEnum.VB_MemberFlags = "40"
        ' delegate to the private collection
        Set NewEnum = m_PrivateCollection.[_NewEnum]
    End Function
    Et j'arrive pô a la faire marcher sous VBA...

  18. #18
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    en résumé, il faut que ta classe soit une collection

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    OK mais dans ce cas le seul moyen d'accéder à un item est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne.Item(1).Visage.Cheveux.Couleur="Blond"
    Est-il possible d'avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne.Item("TOTO").Visage.Cheveux.Couleur="Blond"
    Ou encore mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne("TOTO").Visage.Cheveux.Couleur="Blond"
    C'est ce dont parle Michel Blavin quand il dis :
    Du fait que notre objet Collection est encapsulé, il perd certaines fonctionnalités comme la propriété par defaut qui n'existe pas.
    Il n'y a pas de méthode par défaut !
    colPersons.Item(i).NomComplet ' Correct
    colPersons(i).NomComplet ' Incorrect renvoie une erreur.


    Il existe un "workaround" pour simuler la propriété par défaut mais la solution ne me plaisant pas, je ne vous la montrerai pas, na ! (Pour les tordus, vous la trouverez dans les liens, en cherchant bien...)

  20. #20
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    attention on parle de collection et pas de tableau
    donc on peux appeller l'item par son nom ou son id, les deux sont valables

Discussions similaires

  1. créer des objets "User" personalisés
    Par watcha2020 dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 29/04/2007, 02h48
  2. Réponses: 2
    Dernier message: 05/02/2007, 10h12
  3. Travailler / Créer des objets complexes
    Par Ekinoks dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/08/2005, 15h38
  4. [C#] Créer des objets Winform personnalisés
    Par KibitO dans le forum Windows Forms
    Réponses: 8
    Dernier message: 31/05/2005, 18h09
  5. Créer des objets sur la pile ?
    Par Cornell dans le forum Langage
    Réponses: 8
    Dernier message: 03/03/2003, 12h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo