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 :

Récupérer l'objet exécutant la macro [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2017
    Messages : 38
    Par défaut Récupérer l'objet exécutant la macro
    Bonjour,

    Dans Excel 2016, j'aimerais récupérer les caractéristiques (méthodes, propriétés) de l'objet m'ayant servi à exécuter une macro dans la macro elle-même.

    Pour donner un exemple concret, j'ai créé des boutons en insérant des formes, que j'ai nommées et libellées, auxquels je voudrais attribuer une macro (unique) qui redirigerait vers la feuille portant le nom du bouton sur lequel je clique.
    J'ai utilisé des formes plutôt que des contrôles ActiveX par habitude et par soucis d'esthétisme. S'il s'avère que l'opération n'est possible qu'avec les boutons ActiveX, je réviserai ma façon de faire.

    Créer une macro et l'associer au clic sur une forme, pas de problème. Par contre récupérer des infos sur la forme sur laquelle j'ai cliqué à l'intérieur même de ma macro, je coince.

    J'ai entendu parler de 'Me' qui fait référence à l'instance de la classe dans laquelle je me trouve. Sauf que mon code se trouve dans un module standard et pas un module de classe, et c'est incompatible avec l'utilisation de 'Me'.

    Avez-vous d'autres pistes ?

    Je vous joins un fichier exemple. Ce sera plus parlant pour moi de voir le code dans son contexte.

    Merci pour votre aide.

    Bien à vous,

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

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 173
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Application.Caller devrait te renvoyer le nom de la forme (Shape) sur laquelle tu as cliqué

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2017
    Messages : 38
    Par défaut
    Bonjour tototiti2008,

    Cela fonctionne bien. Merci

    Cependant, Application.Caller me renvoie ici un String, et non l'objet de type Shape.
    J'ajouterais pour compléter le sujet que pour utiliser les méthodes et propriétés de l'objet Shape qui a exécuté la macro il faut utiliser un bout de code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
        'Déclaration de ma variable de type Shape
        Dim MyShape As Shape
     
        'Instanciation de l'objet
        Set MyShape = ActiveSheet.Shapes(Application.Caller)
     
        'Utilisation de l'objet
        MyShape.Rotation = 120
    End Sub
    Encore merci.

    Bien à vous,

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Catab Voir le message
    Pour donner un exemple concret, j'ai créé des boutons en insérant des formes, que j'ai nommées et libellées, auxquels je voudrais attribuer une macro (unique) qui redirigerait vers la feuille portant le nom du bouton sur lequel je clique.
    Il serait bien plus simple de faire ça en ajoutant un lien hypertexte à l'objet.

    Je vous joins un fichier exemple.
    Sauf que beaucoup de participants n'ouvrent pas les fichiers joints : https://www.developpez.net/forums/d8...s-discussions/

  5. #5
    Membre averti
    Inscrit en
    Août 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 66
    Par défaut
    Même si la discussion est résolue,
    Est ce que un Me.ActiveControl.Name fonctionne sous 2016?

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2017
    Messages : 38
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il serait bien plus simple de faire ça en ajoutant un lien hypertexte à l'objet.
    Je suis d'accord. Et pour tout t'avouer, je n'y ai pas pensé dans ce cas-ci (pas le réflexe lorsque le lien ne sort pas du classeur...). Cela dit, connaitre la façon de récupérer des infos sur l'élément appelant était important à mes yeux au delà de cet exemple.


    Citation Envoyé par Menhir Voir le message
    Sauf que beaucoup de participants n'ouvrent pas les fichiers joints : https://www.developpez.net/forums/d8...s-discussions/
    J'ai connu d'autres forums Excel qui encourageaient l'ajout d'un fichier en exemple. De mon point de vue tout à fait personnel, je trouve que ça ajoute beaucoup de clarté à une explication. Loin de moi l'envie d'être assisté sans effort, d'autant plus que la mise en place d'un exemple parlant et qui ne divulgue aucune info à caractère privé est un travail en soit. Je crois d'ailleurs avoir fait preuve de précision dans ma demande. J'ai également prouvé avoir effectué des recherches. Aussi j'ose espérer que l'ajout d'un exemple me sera pardonné.


    Citation Envoyé par bobby5169 Voir le message
    Est ce que un "Me.ActiveControl.Name" fonctionne sous 2016?
    Le mot clé 'Me' n'est pas reconnu lorsque utilisé dans un module 'standard'. Y compris dans ce cas-ci.
    Sans connaître suffisamment le sujet, je dirais que tu parles surement dans le cadre d'un UserForm. Je n'ai malheureusement pas le loisir (ni le temps et les connaissances nécessaires) de t'apporter une réponse.

    Bien à vous,

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Catab Voir le message
    De mon point de vue tout à fait personnel, je trouve que ça ajoute beaucoup de clarté à une explication.
    De mon point de vue personnel, ça ajoute beaucoup au danger inutilement encouru par le répondant.
    J'ai déjà connu une expérience malheureuse sur ce forum-même. Comme le corbeau de la fable, on ne m'y reprendra pas deux fois.

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    J'ai connu d'autres forums Excel qui encourageaient l'ajout d'un fichier en exemple.
    pas celui-ci, qui invite au contraire expressément à l'éviter :
    https://www.developpez.net/forums/d8...s-discussions/
    A tort ou à raison ?
    Et certains, dont moi-même, refusent d'ouvrir un classeur tiers. Ont-ils tort ? Ont-ils raison ? Peu importe de le savoir. Le fait est qu'ils refusent et qu'ils sont les seuls maîtres de leurs décisions.

  9. #9
    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
    j'ai du mal a comprendre le besoins du application.caller
    quand tu affecte une nouvel macro au clic d'un shap la sub nomdushape_click se créé

    le nom du shape fait partie du nom de la sub click
    reprends le dans la sub avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set shap= shapes("nomdushape")
    msgbox shap.name ' ou toute autre propertie accesible en lecture
    ou alors argumente le.onaction en vba
    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

  10. #10
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2017
    Messages : 38
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    quand tu affecte une nouvel macro au clic d'un shap la sub nomdushape_click se créé
    J'imaginais bien qu'il devait y avoir quelque chose du genre qui se passait. Pourquoi serait-ce différent d'un event sur une worksheet après tout... ?

    Par contre si ce bout de code s'écrit bien quelque part, peux-tu m'indiquer où le trouver dans l'interface VBA ?

    Merci.

    Bien à vous,

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

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 173
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    il faut faire une différence entre Shape (objet graphique) et contrôle ActiveX (OLEObject je crois)
    Les contrôles ActiveX créent un code événementiel dans la feuille où ils ont été insérés, pas les Shapes (forme dessinée par exemple)
    Pour les Shapes, on a donc que Application.Caller
    Pour les contrôles ActiveX, Me devrait marcher je pense (à moins que ça ne désigne la feuille, à tester) dans le code événementiel

  12. #12
    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
    les controls AcivX ont leur propre evenement dans l'editeur vba dans le modules de la feuille

    pour les shapes et control formulaire (non ActivX" ) click droit dessus et (affecter une macro puis nouvelle ) et elle se créée dans le module de la feuille il n'y a pas d'autre evenement )


    j'ai une shape qui s'appelle "toto" je click droit de ssus et afecter une macro puis nouvelle dans la fenetre de la lmiste des macros
    automatiquement la sub (sub toto_click() )va se créer dans le module de la feuille

    vous le voyez toto dans le nom de la sub ou pas????
    pourquoi aller chercher app.caller ??????

    et dans la sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub toto_click ()
    msgbox activesheet.shapes("toto"). proriété  ' celle que tu veux 
    end sub
    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. [XL-2002] Exécuter une macro dans un objet Excel OLE.
    Par lafg1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/10/2014, 13h37
  2. Réponses: 2
    Dernier message: 19/05/2008, 01h01
  3. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32
  4. [servlet][bean]comment récupérer l'objet request
    Par otminou dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 27/09/2004, 14h40
  5. Réponses: 4
    Dernier message: 15/09/2004, 16h52

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