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 :

Méthode copie d'instance de classe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Par défaut Méthode copie d'instance de classe
    Bonjour,

    J'ai pris pour habitude d'ajouter une méthode self renvoyant l'instance de la classe, mais est-il facilement possible implémenter une méthode de copie (ou plus exactement un constructeur de copie - de ce que je sais, c'est courant en C++) ?

    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 Property Get self() As clsXXX 'une fonction est peut-être plus appropriée d'ailleurs
     
        Set self = Me
     
    End Property
     
    '..
     
    '
    Public Sub initialize(ByVal val As Variant, ByRef obj As Object) 'pour infos, me permet d'instancier mes classes avec des arguments (factory)
     
    End Sub
     
    '
    Public Function copy() As clsXXX 'une fonction est peut-être plus appropriée d'ailleurs
     
       '  Set copy = ByVal Me 'bien sûr, ça ne fonctionne pas, ça aurait été bien trop simple...
     
    End Function
    Peut-être tout simplement, utiliser une procédure générique telle que (l'idée m'est juste venu, je n'ai pas encore testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function copy(ByVal obj As Object) As Object
     
        Set copy = obj
     
    End Function
    Je pense que c'est quand même peine perdue d'implémenter la méthode dans la classe elle-même, car je pense que ça passerait par une méthode spéciale telle que Class_Initialize ou Class_Terminate, mais avez-vous d'autres idées ?

    Merci par avance !

  2. #2
    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

    Tu peux raisonner à l'inverse je pense, ça fait longtemps que je n'ai pas gratté sur les class.
    Si je comprend bien tu veux transférer les valeurs d'un objet vers un autre.

    Je ferrais un truc comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Assign(ObjetDestination as ClassXX) 'Objet de même classe que la Class contenant cette Sub
     
       ObjetDestination.Valeur1 = pValeur1 'pValeur1 correspondant à la variable de mon objet source
        ObjetDestination.Valeur2 = pValeur2
    '...
    'Et pour les objets
       Set ObjetDestination.Objet1 = pObjet1
    End Sub
    Dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim UnAutreObjet as New ClassXX
    'On fait une copie
    MonObjet.assign(UnAutreObjet)
    Je n'ai rien testé, j'utilisais ce type de structure en Delphi mais je ne vois pas ce qui empêcherait de faire de même.

    ++
    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

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Par défaut
    Merci pour ces infos. J'étais finalement tombé sur un article disant que seule la classe elle-même peut être en mesure de ce copier elle-même (donc, pas de méthodes miracles...). Je pense qu'avec ton example, il ne s'agit que d'une copie partielle, vu que la copie ne se propage pas aux classes enfants, mais faute de mieux...

  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

    Pour que les Class enfants puissent le faire il faut que le classe enfant est aussi une procédure Assign et que celle-ci fasse appel à Assign du parent.

    Par contre j'ai commis une erreur dans le principe du code au dessus. Le fait de faire un Set Objet = pObjet ne va pas puisqu'en faisant là on crée un pointeur vers pObjet (ce qui ne va pas) ou vers l'objet qui est pointé par pObjet (ce qui ici peut-être ce qui est recherché).

    ++
    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

Discussions similaires

  1. [XL 2013-2016] La méthode Copy de la classe Range a échoué
    Par Harkebe dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 17/07/2019, 22h53
  2. Réponses: 13
    Dernier message: 29/06/2007, 18h03
  3. appel entre méthodes de meme classe
    Par frmaniako dans le forum C++
    Réponses: 8
    Dernier message: 10/09/2004, 22h55
  4. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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