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 :

Module de classe et imbrication [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Par défaut Module de classe et imbrication
    Bonjour à tous,
    Petit nouveau par ici, je suis pourtant un usager quotidien du forum qui me permet de me dépatouiller bien souvent de problèmes de code..
    Si je ne suis pas un débutant en VBA, je n'en suis pas pour autant un bon développeur.
    Je souhaite aujourd'hui progresser en utilisant des modules de classe..pour éviter de recoder 15x les mêmes choses.

    Je n'ai pas manqué de lire de nombreux tutos et en particulier :

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

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

    S'ils sont très bien construits, je ne suis pas sûr qu'ils soient à ma portée ou répondent à mon interrogation..

    J'ai donc créé un module de classe "cCaténaire" qui possède les attributs suivants :
    • FC
    • PA
    • PP


    Chacun de ces attributs a lui même des attributs d'une autre classe nommée "cConducteur"
    • poids
    • vent
    • tension


    Au final, j'aimerais pouvoir écrire dans mon module tout court (et pas module de classe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub calcul()
    Dim catenaireType1 as cConducteur
     
    catenaireType1.FC.poids=12
    catenaireType1.FC.vent=15
    catenaireType1.PP.vent=22
     
    etc..
     
    End sub

    J'ai donc créé les variables qui vont bien dans mes modules de classes, mais j'avoue être perdu pour savoir comment imbriquer ma classe cConducteur dans ma classe cCatenaire.

    Merci de votre aide..soyez indulgent svp..je débute en programmation objet
    Bonne soirée à tous,

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour si c'est juste pour attribuer une propriété a une variable et une autre sub propriété a cette propriété
    nul besoins de module classe ,les variables typées font tres bien l'affaire

    exemple :
    dans un simple module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
    '-----------------------------------------------
    'ceci dans un module standard
    Public Type PROPERTIE
    poids As Long
    vent As Long
    End Type
    Public Type cConducteur
    FC As PROPERTIE
    PP As PROPERTIE
    End Type
    Public catenaireType1 As cConducteur
    '-------------------------------------------------
    voila c'est fini tu l'a ta pseudo classe
    testons voir dans un autre module celui que tu veux ou meme le meme
    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
     
    'ceci dans n'importe quel module
    Sub calcul()
        catenaireType1.FC.poids = 12
        catenaireType1.FC.vent = 15
        catenaireType1.PP.vent = 22
        'etc..
    End Sub
     
    ' et ceci dans n'importe quel module meme différent de celui de la sub calcul
    Sub controlons_voir_un_peu_si_ca_marche()
        MsgBox catenaireType1.FC.poids
        MsgBox catenaireType1.FC.vent
        MsgBox catenaireType1.PP.vent
    End Sub
    voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Par défaut
    Merci de ta réponse aussi rapide

    Question bête : quelle est la différence entre un module de classe et des variables typées?
    Ce qui me plaisait bien dans les modules de classe, c'est que j'avais juste à les exporter pour d'autres outils de calculs VBA.

    Saurais-tu me dire quelle aurait été la solution si je voulais conserver des modules de classe?

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    la difference avec les module clsasse c'est avec les module classe tu es obligé de tout construire les propriétés et association avec par exemple les fonction let et get
    mais en terme de poids fichiers et memoire utilisées c'est pas pareille

    quand a l'export qui t'empeche d'exporter le module ou se trouve les variables ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Par défaut
    J'avais commencé à construire toutes les propriétés lecture/écriture de mes attributs mais cela ne fonctionnait pas.
    L'avantage que je voyais avec les classes et sous-classe, c'était de pouvoir créer des évènements au sein même d'une classe.
    De plus, ;'utilisation d'une classe me semblait plus " propre", à tord peut être.

    Tu as raison, je peux toujours exporter mon module normal.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    ok si tu y tiens tant que ca a ton module classe comm ca vite fait
    dans un module autre que le module classe

    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
    Public catenaireType1 As New cConducteur
    'ceci dans n'importe quel module
    Sub calcul()
        catenaireType1.FC.poids = 12
        catenaireType1.FC.vent = 15
        catenaireType1.PP.vent = 22
        'etc..
    End Sub
     
    ' et ceci dans n'importe quel module meme différent de celui de la sub calcul
    Sub controlons_voir_un_peu_si_ca_marche()
        MsgBox catenaireType1.FC.poids
        MsgBox catenaireType1.FC.vent
        MsgBox catenaireType1.PP.vent
    End Sub
    et dans le module classe nommé "Oconducteur"

    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
    Public FC As New cConducteur
    Public PP As New cConducteur
    Private Lvent As Long
    Private Lpoids As Long
    Property Get poids() As Long
        ' Propriété en lecture
        poids = Lpoids
    End Property
    Property Let poids(poids As Long)
        ' Propriété en écriture
        Lpoids = poids
    End Property
    Property Get vent() As Long
        ' Propriété en lecture
        vent = Lvent
    End Property
    Property Let vent(vent As Long)
        ' Propriété en écriture
        Lvent = vent
    End Property
    le résultat set strictement pareille
    si tu veux des explications n'hésite pas

    pour la faire courte
    tu remarquera que dans le module des subs j'instancie une instance de la classe Occonducteur TOUT EN HAUT DE MODULE
    DONC catenaireType1 est une instance
    jusque la rien de bien compliqué

    dans le module classe tu reparquera les 2 variables (FC et PP) qui sont des variable representant aussi des intances du module classe
    *quézako !!? me dira tu ?
    et bien
    dans les sub on voit catenaireType1.FC.propriéte(poids ou vent)

    autrement dit FC EST UNE INSTANCE DE LA CLASSE REPRESENTANT EN FAIT LA SOUS CLASSE DE catenaireType1

    je sais c'est rigolo ca fait classe.classe.poids ou (.vent)

    autrement dit FC EST une instance de la classe oconducteur enfant de l'instance d'une autre instance de la classe oconducteur nommée catenaireType1

    je supose que c'etait ca ton soucis

    voila voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [VBA] Module de classe et évènement
    Par Caroline1 dans le forum Access
    Réponses: 9
    Dernier message: 20/03/2013, 23h23
  2. [Module de classe] Fonction non liée à l'instance?
    Par Caroline1 dans le forum Access
    Réponses: 6
    Dernier message: 07/04/2006, 20h13
  3. Réponses: 4
    Dernier message: 31/03/2006, 15h16
  4. Réponses: 8
    Dernier message: 22/02/2006, 15h09
  5. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49

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