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éation des méthodes d'une classe personnalisée


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut Création des méthodes d'une classe personnalisée
    Bonjour le forum,

    Je me suis fabriqué une classe personnalisée dans un module de classes, et j'aurais besoin de lui donner des méthodes. Je n'ai trouvé nulle part comment faire ni dans l'aide de VBA, ni sur ce forum. Quelqu'un saurait-il m'expliquer comment :
    • Créer les méthodes propres à une classe ?
    • Définir les méthodes "classiques" (comme l'affectation, la comparaison, le print, etc.) pour cette classe ?

    Merci d'avance !

    PS : et un grand merci à Pierre Fauconnier pour son tutoriel "Création et utilisation de classes personnalisées en VB 6.0 et VBA". Vivement la partie 2 !

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Pour creer des methodes, tu crees des procedures dans le module de classe, des fonctions si la methode doit retourner un resultat.
    Par contre, si j'ai compris ta question sur les methodes "classiques", je ne crois pas qu'il soit possible de modifier un operateur ou une fonction deja existante.

    Pleinement d'accord avec toi pour :
    Vivement la partie 2 !
    Cordialement,

    PGZ

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Merci pgz !

    Et au temps pour moi, j'ai effectivement trouvé ma réponse dans Office et les modules de classes pour les méthodes.

    Ce que je voulais dire par "définir les méthodes classiques", c'était en fait savoir comment faire de la surcharge de méthodes classiques, i.e. comment faire par exemple pour dire MonObjet2 = MonObjet1, en définissant dans la classe la méthode surchargée "=", qui copierait en fait toutes les propriétés une par une. Là encore, j'ai trouvé ma réponse sur Access : Modules de classes : il semble que VBA ne gère pas la surcharge de méthodes.

    La question qui reste donc est : y a-t-il un moyen de de copier un objet dans un autre (de faire une affectation en fait), autre que de créer par exemple une méthode Affecter qu'on écrirait MonObjet2 = MonObjet1.Affecter ?

  4. #4
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 800
    Points : 1 488
    Points
    1 488
    Billets dans le blog
    2
    Par défaut
    Bonjour martinmacfly, Bonjour pgz,

    un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MonObjet2 = MonObjet1
    ne fonctionne pas ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Bonjour tototiti,

    Set marche très bien, mais le problème de Set, c'est qu'il ne crée pas une copie de mon objet, il fabrique seulement une nouvelle référence vers mon objet. Du coup, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MonObjet2 = MonObjet1
    ... si je modifie ensuite MonObjet2, MonObjet1 sera aussi modifié, ce que je veux justement éviter...

  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    A mon avis tu dois creer une methode copy pour ce type d'objet. Je ne crois pas qu'il y ai moyen d'y couper...

    Cordialement,

    PGZ

  7. #7
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 800
    Points : 1 488
    Points
    1 488
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    Au temps pour moi..
    Je crois qu'en effet une methode Duplicate, ou quelque chose comme ça, va s'imposer

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Re bonjour à tous,

    La solution est vite trouvée, voilà ce que j'ai fait (cAnalysisCase est le nom de ma classe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Duplicate(AnaCaseToCopyFrom As cAnalysisCase, AnaCaseToCopyTo As cAnalysisCase)
        AnaCaseToCopyTo.CaseIndex = AnaCaseToCopyFrom.CaseIndex
        '''Copie de tous les autres attributs
    End Sub
    Je ne suis quand même pas entièrement satisfait par cette solution. En effet, pour appeler cette procédure et copier MonObjet1 dans MonObjet2, je dois entrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonObjet1.Duplicate (MonObjet1, MonObjet2)
    Je dois donc appeler une fois un objet, uniquement pour lui dire d'aller me chercher la méthode définie dedans. Or, j'aimerais plutôt arriver à une syntaxe du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonObjet1.Duplicate(MonObjet2)
    Ayant fait du Python dans ma jeunesse, je me souviens qu'on pouvait définir des méthodes en entrant self comme variable (self correspondant à l'objet à partir duquel on appelle la procédure, en l'occurrence en reprenant mon exemple au-dessus, MonObjet1), et ensuite elle s'écrirait quelque chose du type (je suis un peu rouillé en Python donc ce n'est pas forcément la syntaxe exacte) (dans le module de classe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Duplicate(self As cAnalysisCase, AnaCaseToCopyTo As cAnalysisCase)
        self.CaseIndex = AnaCaseToCopyFrom.CaseIndex
        '''Copie de tous les autres attributs
    End Sub
    et elle s'appellerait avec la syntaxe que je veux (cf ci-dessus). Quelqu'un aurait-il une idée de comment implémenter cette syntaxe ?

    Merci !


    EDIT : En fait, la façon correcte d'appeler ma procédure est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonObjet1.Duplicate AnaCaseToCopyFrom:=MonObjet1, AnaCaseToCopyTo:=MonObjet2
    Quelqu'un pourrait-il également me dire pourquoi la formulation que j'ai mise plus haut ne marche pas ? Merci !

Discussions similaires

  1. [PHP 5.3] [POO] Création des variables d'une classe
    Par pierrot10 dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2010, 01h43
  2. Réponses: 4
    Dernier message: 22/09/2008, 16h33
  3. Réponses: 14
    Dernier message: 08/04/2008, 17h42
  4. Réponses: 7
    Dernier message: 29/12/2007, 00h08
  5. Création dynamique de méthode sur une classe ?
    Par elitost dans le forum Général Java
    Réponses: 9
    Dernier message: 18/10/2005, 15h47

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