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 :

Comment placer le nom d'une sub (ou d'une case d'option) dans une variable [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut Comment placer le nom d'une sub (ou d'une case d'option) dans une variable
    Bonjour à tous,

    Voici ma problématique.
    Il s'agit d'une feuille Excel contenant des dizaines de cases d'option, check box, etc...

    Chacune de ses cases d'option génère une macro qui commence toutes par le nom de la case d'option. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub NomDeLaCaseD'Option_Click()
    J'ai besoin de ce nom par la suite pour connaître l'emplacement de la case d'option avec l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes("NomDeLaCaseD'Option").TopLeftCell.Row
    Pour me faciliter la vie, j'aimerais récupérer le nom de la macro (ou de la case d'option courante) dans une variable, afin de pouvoir utiliser toujours la même instruction dans toutes les petites sub associées aux cases d'option.

    cela donnerait donc quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub NomDeLaCaseD'Option_Click()
    Var = MID(sub.name,1,LEN(sub.name-6) ' ou idem avec case d'option.name
    ActiveSheet.Shapes(Var).TopLeftCell.Row
    Quelqu'un pourrait-il me communiquer l'instruction adéquate ?

    Merci d'avance et bonne journée.

    Henri

  2. #2
    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
    Le plus simple est d'utiliser la propriété Application.Caller qui renvoie le nom de l'élément qui a appelé la macro :
    https://docs.microsoft.com/fr-fr/off...ication.caller

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Mille mercis pour ta réponse, Menhir. Voici ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Contingent_Click() ' Tableau Student
     
    test = Application.Caller
    ce qui abouti à l'erreur 2023. Un idée de ce qui serait erroné ?

    Citation Envoyé par patricktoulon Voir le message
    Bonjour Patrick,

    Merci pour ta réponse. Voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub optionbuttons_click(opt)
    MsgBox ActiveSheet.Shapes(opt.Name).TopLeftCell.Address
    End Sub
    que j'appelle de cette manière-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Contingent_Click() ' Tableau Student
    Call optionbuttons_click(opt)
    Malheureusement, cela abouti à l'erreur d'exécution 424 - objet requis
    Une idée de ce qui est erroné ?

  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 Henri1830 Voir le message
    ce qui abouti à l'erreur 2023. Un idée de ce qui serait erroné ?
    Quel est le message de l'erreur ?

    Sans certitude, je pense que le problème vient de la variable.
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Contingent_Click() ' Tableau Student
         Debug.Print Application.Caller
    End Sub
    Et regarde ce que ça renvoie dans la fenêtre d'exécution.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    La seule chose qui s'affiche est Erreur 2023
    Si je cherche sur Internet, je retrouve rien qui m'aide...

  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
    Citation Envoyé par Henri1830 Voir le message
    La seule chose qui s'affiche est Erreur 2023
    Si je cherche sur Internet, je retrouve rien qui m'aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Contingent_Click() ' Tableau Student
         Debug.Print Application.Caller
    End Sub
    ...
    essaie de raisonner logiquement
    comment veux tu que application.caller te donne quelque chose alors que l'évènement est en train de se produire et donc le (Click) est déclaré" effectif quand tu lache le bouton de la souris

    d'autant plus que
    comment veux tu que le application.caller te ramène quelque chose alors qu'il n'y a aucun caller dans l'évènement
    puisqu'il est en train de se produire et que application.caller inself n'existe pas



    ca oui ca fonctionnera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Contingent_Click() ' Tableau Student
         optionbuttons_click
    End Sub
     
    sub optionbuttons_click()
    msgbox application.caller
    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

  7. #7
    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
    tu a deux solutions
    soit tu extériorise le code du opttionbuttion dans une sub avec argument
    soit tu crée un module classe pour mapper tes optionbutton

    pour l'exteriorisation du code pour réutilisation avec x controls identiques

    exemple 'dans le module de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub OptionButton1_Click()
    optionbuttons_click OptionButton1
    End Sub
    '
    Private Sub OptionButton2_Click()
    optionbuttons_click OptionButton2
    End Sub
    '
    '
    Sub optionbuttons_click(opt)
    MsgBox ActiveSheet.Shapes(opt.Name).TopLeftCell.Address
    End Sub
    la sub optionbuttons_click peut etre dans un module standard
    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

  8. #8
    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
    c'est sur que si tu suit pas exactement ce qui t'est montré ca buggera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call optionbuttons_click(Contingent)
    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

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Malheureusement, ta solution ne résout pas mon problème. En effet, elle me contraint de retaper le nom de la macro (ou de la case d'option, ce qui revient du pareil au même) et c'est précisément ce que je souhaite éviter.

    Une autre idée peut-être ? C'est une solution dans le genre de ce que Menhir m'a proposé qui est l'idéal, mais cela me retourne un code d'erreur et je ne vois pas pourquoi.

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

Discussions similaires

  1. Comment afficher le nom d'une variable et non sa valeur?
    Par philocratia dans le forum Général Python
    Réponses: 2
    Dernier message: 15/05/2014, 12h05
  2. Réponses: 22
    Dernier message: 19/01/2011, 10h00
  3. Réponses: 16
    Dernier message: 28/08/2009, 11h09
  4. Réponses: 3
    Dernier message: 26/09/2008, 10h41
  5. Comment modifier le nom d'une variable?
    Par dagra dans le forum Langage
    Réponses: 4
    Dernier message: 11/04/2007, 10h23

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