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 :

Imbrication de classes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut Imbrication de classes
    Bonjour,
    je souhaiterais savoir s'il est possible, en vba excel, de définir une classe comme propriété d'une autre classe.
    Par exemple, j'ai créé un module de classe intitulé matériau, comprenant des propriétés telles qu'un module d'Young, etc... Ensuite j'ai créé un module de classe intitulé "plaque", auquel j'ai donné des propriétés telles que l'épaisseur,..., ainsi qu'une propriété "matériau". Malheureusement cette imbrication ne fonctionne pas.
    La question est donc : une telle imbrication est-elle réalisable en vba excel (et par conséquent je doit revoir mon programme), ou dois-je simplement oublier cette idée?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,
    plein d'excellents cours au sujet des modules de classe :

    http://sinarf.developpez.com/access/vbaclass/

    http://fauconnier.developpez.com/art...neral/classes/


    sinon, comment doit-on évaluer le "ne fonctionne pas" dans ton post stp ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut
    J'ai en effet commencé par regarder ces mêmes tutoriaux, seulement ils ne traitent pas le cas que j'essaye de résoudre.
    Pour être plus précis, voilà le test que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Sub test()
    Dim mat1 As New metal, tole1 As New Plaque
     
      With mat1
        .E = 74000
        .Sigr = 450
        .Sige = 385
        .mu = 0.33
        .Epsr = 0.05
        .Epse = 0.002
        .Rho = 2780
      End With
     
      With tole1
        .a = 450
        .b = 77
        .e = 1.8
        .K = 0.9
        .mat = mat1 '!!!! NE FONCTIONNE PAS
      End With
    L'erreur qu'excel me retourne (lorsqu'il arrive à la propriété .mat) est la suivante :
    Erreur d'exécution'91' :
    Variable objet ou variable de bloc With non définie

    Concrètement, il agit comme si cette propriété n'était pas définie, alors qu'elle l'a été au même titre, et de la même façon, que les autres propriétés.

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Je suis pas trop aguerrie dans le domaine objet de classe sur vba mais 2 choses
    -Il faudrait voir comment tu as déclaré mat dans ta classe taule.

    -Il faudrait peut être mettre
    Mais je n'ai aucune certitude sur ce point

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut
    Malheureusement le set n'y change rien. Voici un détail des modules de classe :

    Le module de classe metal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Private pE As Double
    Private pmu As Double
    Private pep As String
    Private pSigr As Double
    Private pSige As Double
    Private pEpsr As Double
    Private pEpse As Double
    Private pRho As Double
     
    Property Get E() As Double 'Module d'Young
    ' Propriété en lecture
    E = pe
    End Property
    Property Let E(E As Double) 'Module d'Young
    ' Propriété en écriture
    pe = E
    End Property
     
    '....
    Le module plaque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Private pe As Double
    Private pa As Double
    Private pb As Double
    Private pK As Double
    Private pmat As metal
     
    Property Get a() As Double
    ' Propriété en lecture
    a = pa
    End Property
    Property Let a(a As Double)
    ' Propriété en écriture
    pa = a
    End Property
     
    '...
     
    Property Get mat() As metal
    ' Propriété en lecture
    mat = pmat
    End Property
    Property Let mat(mat As metal)
    ' Propriété en écriture
    pmat=mat
    ' J'ai aussi essayé :
    'pmat.E = mat.E
    'pmat.mu = mat.mu
    'pmat.nom = mat.nom
    'pmat.Sigr = mat.Sigr
    'pmat.Sige = mat.Sige
    'pmat.Epsr = mat.Epsr
    'pmat.Epse = mat.Epse
    'pmat.Rho = mat.Rho
    End Property

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Il faudrait peut être plutôt que tu es une function assigne dans ta classe Plaque.
    Cette fonction serait appelé ainsi
    Dans cette fonction tu renseignes toutes les valeurs contenues dans Mat1 dans la structure de ta classe Metal dans ta classe Plaque.
    [Edit]G fait ce massage entre temps, je regarde ton code[/Edit]
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut deja je détecte une erreur, nul part tu ne déclares ton objet pMat (New metal) il ne pourra donc pas être utilisé.

    De plus ici aussi il me semble que le Set serait de rigueur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Property Let mat(mat As metal)
    ' Propriété en écriture
    pmat=mat
    ' J'ai aussi essayé

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    ok,
    cette propriété est-elle bien de portée Public ?

    chez moi, ceci fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Classe cJP
    Public a As String
    Public b As String
    Public c As Double
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Classe cJP2
    Public test As New cJP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'module principal
    Option Compare Database
    Option Explicit
     
    Sub piou()
    Dim x As New cJP2
    x.test.a = "piou"
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. imbrication de classe et arraylist
    Par greg08 dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 10/11/2009, 20h55
  2. Imbrication de classe C++
    Par OXXYGENE dans le forum C++
    Réponses: 2
    Dernier message: 28/04/2009, 02h30
  3. probleme imbrication des classes
    Par touane dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 04/12/2007, 15h14
  4. [POO] Imbrication de classes
    Par warrios dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2007, 00h11
  5. Imbrication de class
    Par themadmax dans le forum C++
    Réponses: 5
    Dernier message: 29/01/2006, 00h02

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