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 :

Association de classes personnalisées entre elles


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut Association de classes personnalisées entre elles
    Bonjour à toutes et tous,

    En tant que novice sur l'utilisation des classes, j'ai besoin des compétences de personnes aguérries dans le domaine
    En effet, je cherche à associer deux classes personnalisées entre-elles afin d'étendre l'utilisation des objets définis par la première classe en utilisant les propriétés/méthodes de la seconde.

    J'ai sciemment simplifié les classes afin de clarifier au mieux la situation :

    Voici ma première classe "Classe1" :
    Nom : Capture d'écran 2024-06-20 092609.png
Affichages : 153
Taille : 12,3 Ko

    Voici la seconde "Classe2" :
    Nom : Capture d'écran 2024-06-20 092640.png
Affichages : 127
Taille : 5,1 Ko

    Et voici ma procédure test :
    Nom : Capture d'écran 2024-06-20 092657.png
Affichages : 126
Taille : 7,1 Ko

    ******************************************************************
    Le procédé est le suivant :

    Je définis une cellule via l'objet range en passant par ma classe perso "Classe1" et j'utilise la méthode perso "mycolor" qui est renvoie la couleur du fond de ma cellule.

    Ensuite dans "Classe2" je souhaite définir une méthode "longtoRGB" (pas encore développée) qui va permettre de renvoyer la couleur en format RGB d'une cellule à partir du format long, d'où le lien que je dois faire entre "Classe1" et "Classe2".
    (cette fonction "longtoRVB" doit renvoyer la valeur R, G ou B (entre 0 et 255) du format couleur RGB en fonction des arguments R, G ou B).

    Pour illustrer tout ça, je dois pouvoir avoir par exemple mycell.mycolor.longtoRGB qui me renvoie donc un nombre de type integer (de type byte aurait pu aussi faire l'affaire).

    *******************************************************************
    Comme vous pouvez le constater sur l'image ci-dessous, je suis parvenu à faire le lien entre les deux classes (en définissant le résultat de mon objet définit par "Classe1" et la méthode "mycolor" comme type de "Classe2"), mais une erreur de type '91' que je ne parviens pas à déboguer persiste "Variable objet ou variable de bloc With non définie".
    Nom : Capture d'écran 2024-06-20 104106.png
Affichages : 128
Taille : 8,6 Ko


    *******************************************************************

    Voilà. A défaut d'avoir été succinct, j'espère avoir été suffisamment clair.
    Merci d'avance pour vos retours.
    Images attachées Images attachées      

  2. #2
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 455
    Points : 2 218
    Points
    2 218
    Par défaut
    Bonjour,
    Ce que tu veux faire s'appelle l'héritage mais ça n'existe pas en vba.

    Tu peux accessoirement déclarer une instance de ta deuxième classe dans la première.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 291
    Points : 1 889
    Points
    1 889
    Par défaut
    salut,

    Ce que tu décrit, c'est une composition, rien de plus.
    Class1 est composée d'une cellule.
    et la fonction MyColor renvoie une instance de Classe2.

    La seule question est:
    Comment est générée l'instance de classe2 ?
    - A L'instanciation de Class1 ? (dans ce cas, Class1 est composée de Cell et Class2).
    - A la volée lors de l'appel de MyColor ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par deedolith Voir le message
    salut,

    Ce que tu décrit, c'est une composition, rien de plus.
    Class1 est composée d'une cellule.
    et la fonction MyColor renvoie une instance de Classe2.

    La seule question est:
    Comment est générée l'instance de classe2 ?
    - A L'instanciation de Class1 ? (dans ce cas, Class1 est composée de Cell et Class2).
    - A la volée lors de l'appel de MyColor ?

    Bonsoir, merci pour vos réponses.
    Et bien il me semble que j'instancie classe2 dans classe1 lorsque j'utilise ma méthode mycolor dont le résultat est un objet de classe2 puisque j'écris "function mycolor() as classe2".

    Mais bon quelque chose me dit que ça n'a rien à voir puisque je n'utilise même pas le terme "new" pour l'instanciation...

    Bref j'avoue que je sèche pour faire cette fameuse composition..

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par deedolith Voir le message
    salut,

    Ce que tu décrit, c'est une composition, rien de plus.
    Class1 est composée d'une cellule.
    et la fonction MyColor renvoie une instance de Classe2.

    La seule question est:
    Comment est générée l'instance de classe2 ?
    - A L'instanciation de Class1 ? (dans ce cas, Class1 est composée de Cell et Class2).
    - A la volée lors de l'appel de MyColor ?

    Re, et oui j'aimerais que ce soit "à la volée".

    Mais ma première classe est nulle aussi car au lieu d'avoir (en remplacant classe2 par integer dans la déclaraiton de mycolor) :

    Dim cell_test as new Classe1
    set cell_test.id = range("A1")
    Dim mtest as integer
    mtest = cell_test.id.mycolor

    J'ai :

    Dim cell_test as new Classe1
    set cell_test.id = range("A1")
    Dim mtest as integer
    mtest = cell_test.mycolor

    Là aussi c'est encore un problème de composition. Dans chaque classe que je créé je ne peux qu'utiliser les propriétés et méthodes à la "racine" de ma classe mais pas en "chaîne" comme on le fait constamment avec les classes intégrées d'excel ! C'est très frustrant je l'avoue.

    Après quelques recherches, j'ai vu que l'on pouvait contourner l'héritage indisponible en VBA par les collections. Mais bon je suis un peu largué...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 291
    Points : 1 889
    Points
    1 889
    Par défaut
    Class1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function MyColor() As Class2
        Dim Cl As Class2
        Set Cl = New Class2
     
        '// Code d'initialisation de Cl, instance de Class2
     
        Set MyColor = Cl
    End Function
    Class2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function LongToRGB() As Integer
        LongToRGB = ...
    End Function

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Class1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function MyColor() As Class2
        Dim Cl As Class2
        Set Cl = New Class2
     
        '// Code d'initialisation de Cl, instance de Class2
     
        Set MyColor = Cl
    End Function
    Class2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function LongToRGB() As Integer
        LongToRGB = ...
    End Function

    Bonjour,

    Merci une nouvelle fois pour le retour.
    La composition fonctionne effectivement mais le problème c'est que, comme tu l'as dit plus haut, il s'agit d'une composition plus que d'un héritage.

    Dans ton exemple la fonction mycolor sert à instancier classe2. En somme ce n'est qu'une fonction qui permet de faire l'intermédiaire entre classe1 et classe2.

    Ce que je souhaite plutôt c'est que cell.mycolor m'envoie la couleur de cell en format long et que si je veux la couleur en format RGB je n'ai qu'à appeler la fonction longtoRGB de classe2 (cell.mycolor.longtoRGB).

    Je suis certain que ce n'est pas compliqué mais je suis trop novice en POO pour gérer ça

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Je relance la discussion si quelqu'un est chaud pour se lancer dans la résolution du probleme

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Je up de nouveau car je n'ai tjrs pas trouvé de solutions

  10. #10
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 455
    Points : 2 218
    Points
    2 218
    Par défaut
    Citation Envoyé par Lacypr Voir le message
    Je up de nouveau car je n'ai tjrs pas trouvé de solutions
    bonjour et désolé de ne pas être un féru de photostop!

    présentes nous quelque chose de manipulable au clavier et peut-être que!

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    bonjour et désolé de ne pas être un féru de photostop!

    présentes nous quelque chose de manipulable au clavier et peut-être que!


    Bonjour ! Et bien tout est dans mon explication deux messages plus haut.

    Je recommence donc : j'aimerais avoir la possibilité d'utiliser la propriété d'un objet (ou le résultat d'une méthode de cet objet) définit dans une classe comme argument d'entrée d'un autre objet définit dans une autre classe.

    Exemple :

    Soient obj1 et obj2 deux objets des classes Classe1 et Classe2 respectivement.
    Soient ppté1 et méth1 une propriété et une méthode définies dans Classe1.
    Soient ppté2 et méth2 une propriété et une méthode définies dans Classe2.


    Au lieu d'avoir variable = obj1.ppté1 puis obj2.ppté2 = variable puis obj2.méth2 = résultat

    Je voudrais = obj1.ppté1.méth2 = résultat




    Je veux pouvoir utiliser en chaîne mes objets définis à partir de mes classes personnalisées et pouvoir les manipuler de la même manière que les objets des classes intégrées d'excel !

    J'espère avoir été suffisamment clair

  12. #12
    Membre habitué
    Homme Profil pro
    libre
    Inscrit en
    Mai 2024
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Mai 2024
    Messages : 109
    Points : 199
    Points
    199
    Par défaut
    Class1
    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
     
    Option Explicit
    Private mycell As Range
    Private mColor As New Classe2
    Public Property Set id(id_cell As Range)
        Set mycell = id_cell
        mColor.Value = mycell.Interior.Color
    End Property
     
    Public Property Get id() As Range
        Set id = mycell
    End Property
     
    Function mycolor() As Classe2
      Set mycolor = mColor
    End Function
    Class2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Value As Long
     
    Public Function longtoRGB()
     
    End Function
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim c As New Classe1
     Set c.id = Range("A1")
     Debug.Print c.mycolor.Value

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Volid Voir le message
    Class1
    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
     
    Option Explicit
    Private mycell As Range
    Private mColor As New Classe2
    Public Property Set id(id_cell As Range)
        Set mycell = id_cell
        mColor.Value = mycell.Interior.Color
    End Property
     
    Public Property Get id() As Range
        Set id = mycell
    End Property
     
    Function mycolor() As Classe2
      Set mycolor = mColor
    End Function
    Class2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Value As Long
     
    Public Function longtoRGB()
     
    End Function
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim c As New Classe1
     Set c.id = Range("A1")
     Debug.Print c.mycolor.Value

    Bonjour, merci beaucoup pour la réponse ! La composition fonctionne parfaitement car je peux exploiter c1.mycolor.longtoRGB où c1 est une instance de classe1.

    En revanche petit hic : si je veux juste la couleur de c1 en format long je suis obligé d'utiliser c1.mycolor.value au lieu d'utiliser c1.mycolor directement.

    Ce que je souhaiterais : si je veux la couleur en format RGB j'utilise c1.mycolor.longtoRGB ; si je veux la couleur en format long je veux pouvoir utiliser c1.mycolor et non c1.mycolor.value !

    Et il en va de même pour la ppté "id", si je peux m'en passer ce serait nickel.

    En somme, je souhaiterais vraiment cette utilisation en chaîne comme pour les objets des classes intégrées d'excel.

    Je voudrais pouvoir faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim c as new Classe1
    set c = range ("A1") 'je ne passe pas par la ppté id
    Debug.print c.mycolor 'j'ai la couleur en format long
    Dubug.print c.mycolor.longtoRGB 'l'ai la couleur en format RGB
    [/QUOTE]


    Merci aux courageux qui daigneront bien vouloir m'apporter la solution

  14. #14
    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 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 330
    Points
    34 330
    Par défaut
    Salut,

    je ne suis pas convaincu d'avoir cette option en VBA avec le même nom de fonction, mais tu peux très simplement faire une évolution dans ton code avec dans ta classe1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function mycolor2() As Long
        mycolor2 = mColor.Value
    End Function
    ce qui te permettra d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print c.mycolor.Value
    Debug.Print c.mycolor2
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Bonsoir,

    Merci pour le retour!

    Malheureusement ça ne résout toujours pas le problème car dans ta solution ce n'est pas le même nom de méthode. ''Mycolor2'' fait un peu office de propriété ''intermédiaire''.

    Je ne comprends pas pourquoi on ne pourrait pas y arriver alors que c'est le cas avec les classes intégrées d'excel.
    Par exemple je peux bien faire worksheets("Feuil1").range("cell'').offset(a,b).interior.colorindex

    Pourquoi je ne pourrais pas faire la même chose avec mes propres objets?

    C'est assez frustrant je dois l'avouer.

  16. #16
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 455
    Points : 2 218
    Points
    2 218
    Par défaut
    Citation Envoyé par Lacypr Voir le message
    Bonsoir,

    Merci pour le retour!

    Malheureusement ça ne résout toujours pas le problème car dans ta solution ce n'est pas le même nom de méthode. ''Mycolor2'' fait un peu office de propriété ''intermédiaire''.

    Je ne comprends pas pourquoi on ne pourrait pas y arriver alors que c'est le cas avec les classes intégrées d'excel.
    Par exemple je peux bien faire worksheets("Feuil1").range("cell'').offset(a,b).interior.colorindex

    Pourquoi je ne pourrais pas faire la même chose avec mes propres objets?

    C'est assez frustrant je dois l'avouer.
    Bonjour,
    Parce qu'excel n'est pas VBA il dispose de l'héritage et le plolimorphysme.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Parce qu'excel n'est pas VBA il dispose de l'héritage et le plolimorphysme.
    Bonsoir,

    Je n'ai pas bien compris la phrase, tu voulais dire : "parce que VBA ne dispose pas de l'héritage et du polymorphisme" ?

  18. #18
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Je ne comprends pas pourquoi on ne pourrait pas y arriver alors que c'est le cas avec les classes intégrées d'excel.
    Par exemple je peux bien faire worksheets("Feuil1").range("cell'').offset(a,b).interior.colorindex
    Excel (Office plus largement) permet d'utiliser VBA dans sa suite logiciel. Ce qui ne veut pas dire qu'Excel est écrit en VBA. Ca n'est pas parce qu'Excel fait une chose que tu pourras écrire un code en VBA qui fonctionnera de la même façon.

    Si Excel est écrit en C, les programmeurs d'Excel auront accès à tout ce que permet le langage C. Dans ton cas, en tant que codeur, tu as accès à tout ce que VBA peut faire et l'heritage n'en fait pas partie.

    [Edit]
    En lisant un peu plus en détail
    Ce que je souhaiterais : si je veux la couleur en format RGB j'utilise c1.mycolor.longtoRGB ; si je veux la couleur en format long je veux pouvoir utiliser c1.mycolor et non c1.mycolor.value !

    Et il en va de même pour la ppté "id", si je peux m'en passer ce serait nickel.

    En somme, je souhaiterais vraiment cette utilisation en chaîne comme pour les objets des classes intégrées d'excel.
    Je voudrais pouvoir faire cela :

    1
    2
    3
    4
    Dim c as new Classe1
    set c = range ("A1") 'je ne passe pas par la ppté id
    Debug.print c.mycolor 'j'ai la couleur en format long
    Dubug.print c.mycolor.longtoRGB 'l'ai la couleur en format RGB
    En fait, je pense que quand tu fais c.mycolor dans ton exemple d'une classe intégré en version Excel, VBA utilise implicitement c.mycolor.Value, Value étant la propriété par défaut de cette classe. Sinon ça n'aurait aucun sens si mycolor est une classe, utiliser mycolor dans le code représente une instance de cette classe et pas une propriété de celle-ci.

    Il me semble qu'il est possible de définir unepropriété par défaut au sein d'une classe mais il faut bricoler en ouvrant ton fichier .bas avec notepad et ajouter des entêtes...
    Sans garanti que ça fasse exactement ce que tu souhaites.
    [/Edit]
    [Edit]
    Définir une propriété par défaut d'une classe personnalisée (VBA) - VBA (developpez.net)
    [/Edit]

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

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Salut



    Excel (Office plus largement) permet d'utiliser VBA dans sa suite logiciel. Ce qui ne veut pas dire qu'Excel est écrit en VBA. Ca n'est pas parce qu'Excel fait une chose que tu pourras écrire un code en VBA qui fonctionnera de la même façon.

    Si Excel est écrit en C, les programmeurs d'Excel auront accès à tout ce que permet le langage C. Dans ton cas, en tant que codeur, tu as accès à tout ce que VBA peut faire et l'heritage n'en fait pas partie.

    [Edit]
    En lisant un peu plus en détail


    En fait, je pense que quand tu fais c.mycolor dans ton exemple d'une classe intégré en version Excel, VBA utilise implicitement c.mycolor.Value, Value étant la propriété par défaut de cette classe. Sinon ça n'aurait aucun sens si mycolor est une classe, utiliser mycolor dans le code représente une instance de cette classe et pas une propriété de celle-ci.

    Il me semble qu'il est possible de définir unepropriété par défaut au sein d'une classe mais il faut bricoler en ouvrant ton fichier .bas avec notepad et ajouter des entêtes...
    Sans garanti que ça fasse exactement ce que tu souhaites.
    [/Edit]
    [Edit]
    Définir une propriété par défaut d'une classe personnalisée (VBA) - VBA (developpez.net)
    [/Edit]

    ++
    Qwaz
    Bonjour Qwaz,

    Merci beaucoup d'avoir pris le temps d'expliquer ces détails ! C'est limpide, je comprends mieux maintenant.
    Donc il s'agit peut-être d'une mise par défaut d'une propriété d'une classe..
    Je vais fourrer mon nez dans la discussion que tu m'as transmise, on ne sait jamais.
    Je mets le poste en résolu!

  20. #20
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 291
    Points : 1 889
    Points
    1 889
    Par défaut
    Si j'ai bien compris, tu veux:
    1) Appeler MonInstance.MyColor() pour obtenir la couleur de la cellule.
    2) Appeler MonInstance.MyColor.LongToRGB() pour pouvoir obtenir la couleur de la cellule, de type RGB.

    Ce que tu demandes est impossible, car cela implique qu'une fonction doit avoir connaissance de ce qui se passe avant ou après son appel.
    Et c'est en violation directe de la Loi de Demeter: https://fr.wikipedia.org/wiki/Loi_de_D%C3%A9m%C3%A9ter

    La meilleur proposition possible, est 'équiper ta classe Class1 de 2 fonctions distinct renvoyant le type de résultat désiré:
    Class1.MyColor()
    Class1.LongToRGB()

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Faire communiquer des classes entre elles?
    Par aurelie689 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 02/05/2009, 11h46
  2. [POO] Classes imbriquées entre elles
    Par Momodedf dans le forum Langage
    Réponses: 4
    Dernier message: 12/07/2008, 20h27
  3. Utilisation des classes entre elles
    Par leodi dans le forum Flash
    Réponses: 1
    Dernier message: 17/05/2008, 16h20
  4. Gestion des classes entre elles et organisation.
    Par Hybrix dans le forum Développement 2D, 3D et Jeux
    Réponses: 54
    Dernier message: 29/08/2007, 19h54
  5. Réponses: 16
    Dernier message: 16/07/2007, 08h52

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