1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    octobre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2009
    Messages : 230
    Points : 94
    Points
    94

    Par défaut Identifier le bouton au clic pour action

    Bonjour,

    J'ai une feuille avec beaucoup de bouton (images PNG)... chaque boutons à une action différentes, je dois donc créer autant de module qu'il y a de bouton...

    Ma question, est-il possible de réduire cela à 1 module en identifiant le bouton se lequel je clic ?

    Exemple : Si bouton (BTE1) alors ...

    Merci d'avance pour votre aide :-)

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2013
    Messages
    3 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : mai 2013
    Messages : 3 219
    Points : 5 426
    Points
    5 426

    Par défaut

    Bonjour,

    Qu'est-ce que tu entends par "module" ?
    Nul besoin de créer une multitude de modules... des Sub, oui, mais pas des modules...
    MPi²

  3. #3
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 325
    Points : 16 397
    Points
    16 397
    Billets dans le blog
    1

    Par défaut re

    bonjour
    application.caller ou argumentation du .onaction tu en trouvera divers exemples dans le forum
    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 : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    10 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 10 877
    Points : 27 314
    Points
    27 314
    Billets dans le blog
    4

    Par défaut

    Salut.

    Il y a bien le application.caller mais je privilégierais une procédure par bouton (au sein du même module, ou pas, en fonction de regroupements possibles).

    C'est à mon avis plus simple à développer et à maintenir qu'une SUB avec un select case application.caller interminable, et cela respecte mieux les règles de programmation que je me suis fixées (une responsabilité par fonction ou procédure)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié l'intervention => Merci pour le
    ---------------

  5. #5
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 325
    Points : 16 397
    Points
    16 397
    Billets dans le blog
    1

    Par défaut re

    @pierre fauconnier
    t
    se sont des images png (picture) ses boutons et non des controls la procédure est lancée par le onaction

    il n'y a pas d'évènement pour ces objects a part le click par le onaction
    c'est donc soit application.caller soit les arguments pour le onaction

    quelques exemples pour le onction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test1()
    'exemple avec 1 argument ecrit en dur dans l'apel
     Sheets(1).Shapes(1).OnAction = "'mamacro " & """toto""" & "'"
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test1BIS()
    'la meme que la TEST1 mais avec une varaible dans l'apel
     machin = "toto"
     Sheets(1).Shapes(1).OnAction = "'mamacro " & Chr(34) & machin & Chr(34) & "'"
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub test2()
    'exemple avec plusieurs  arguments ecrit en dur dans l'apel
     Sheets(1).Shapes(1).OnAction = "'mamacro2 " & Chr(34) & "toto "","" titi "",""  riffifi ""'"
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test2BIS()
    'LA MEME QUE LA test2 MAIS AVEC DE VARIABLES INSTRUITES AVANT EN ARGUMENT
     machin1 = "toto"
     machin2 = "titi"
     machin3 = "riffifi"
      Sheets(1).Shapes(1).OnAction = "'mamacro2 " & Chr(34) & machin1 & """,""" & machin2 & """,""" & machin3 & "'"
    End Sub
    et les macros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub mamacro(argument)
    MsgBox argument
    End Sub
    Sub mamacro2(argument1, argument2, argument3)
    MsgBox argument1 & vbCrLf & argument2 & vbCrLf & argument3
    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 : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    10 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 10 877
    Points : 27 314
    Points
    27 314
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par patricktoulon Voir le message
    @pierre fauconnier
    t
    se sont des images png (picture) ses boutons et non des controls la procédure est lancée par le onaction[...]
    N'importe quoi...

    Nom : 2017-08-10_200645.png
Affichages : 28
Taille : 332,0 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié l'intervention => Merci pour le
    ---------------

  7. #7
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 325
    Points : 16 397
    Points
    16 397
    Billets dans le blog
    1

    Par défaut re

    n'importequoi?

    J'ai une feuille avec beaucoup de bouton (images PNG)... chaque boutons à une action différentes, je dois donc créer autant de module qu'il y a de bouton...
    e

    et ma sœur elle bat le beurre
    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 : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2013
    Messages
    3 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : mai 2013
    Messages : 3 219
    Points : 5 426
    Points
    5 426

    Par défaut

    @Patrick,
    je suis d'accord avec Pierre là-dessus.
    Il n'y a qu'à affecter une macro à chaque image et ça suffit, non?
    MPi²

  9. #9
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    10 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 10 877
    Points : 27 314
    Points
    27 314
    Billets dans le blog
    4

    Par défaut

    Patrick,

    Mon illustration montre une image (png ou autre n'a aucune importance) que tu peux connecter via Affecter une macro (qui est l'équivalent de OnAction par programmation, soit dit en passant).

    Dès lors, tu peux connecter la png sur n'importe quelle procédure sans arguments d'un module standard, et il est plus simple, selon moi, de connecter chaque bouton sur une procédure qui lui est propre, plutôt que de travailler à coup de Select case sur application.Caller...

    Avant de contredire un contributeur, tâche de tester la solution qu'il propose... En général, lorsque je donne une solution, c'est qu'elle fonctionne, je n'ai pas dit que c'était la meilleure... )
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié l'intervention => Merci pour le
    ---------------

  10. #10
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 325
    Points : 16 397
    Points
    16 397
    Billets dans le blog
    1

    Par défaut re

    et alors!!! affecter une macro tu le fait comment en vba ?

    ONACTION!!!!

    d'autant plus que sa demande est claire il veut simplifier avec une seule macro même si ca ne convient pas a ton étique

    conclusion les seules options qu'il a c'est application.caller ou les arguments dans l'appel et la fonction appelée

    tu peux tourner cela dans tout les sens que tu veux

    edit:

    et mince on se croisent

    je contredis pas le fait que ca fonctionne, mais ce n'est pas la réponse qu'il attend relis la demande

    il veux simplifier avec une seule fonction bien que je te l'accorde il c'est mal exprimé il confond visiblement modules et macro/fonctions

    mais dans sa demande il précise trouver le moyen d'identifier le boutons(image) cliqué ces intentions sont donc relativement claires
    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 : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    10 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 10 877
    Points : 27 314
    Points
    27 314
    Billets dans le blog
    4

    Par défaut

    Oui ben désolé, c'est parce tu t'exprimes mal...



    Citation Envoyé par patricktoulon Voir le message
    @pierre fauconnier
    t
    se sont des images png (picture) ses boutons et non des controls la procédure est lancée par le onaction
    Non, la procédure n'est pas lancée par le Onaction, elle est affectée par le OnAction.



    Citation Envoyé par patricktoulon Voir le message
    il n'y a pas d'évènement pour ces objects a part le click par le onaction
    c'est donc soit application.caller soit les arguments pour le onaction
    Ah? Il y a un évènement Click sur un contrôle image de formulaire? Intéressant, faudra que tu me montres, je suis impatient...

    Maintenant, on peut effectivement affecter par macro la même procédure (ou pas d'ailleurs) à des images et lancer un select case dessus, mais si on veut bien programmer, même avec un select case, il faudra de toute façon écrire une procédure propre à chaque contrôle et l'appeler en fonction du case. C'est pourquoi je préconise d'affecter directement la bonne procédure à chaque bouton et de se passer d'une procédure unique. Et l'affectation se fait soit à la main, soit par macro, en systématisant alors les noms des procédures, créées par exemple avec le nom de l'objet image et en suffixant avec _Click. D'ailleurs, le fait que ce soit des images ne changent absolument rien à l'affaire, des boutons de formulaire seraient traités de la même manière.

    Ce sera toujours plus propre qu'une unique procédure interminable qui fait tout et que l'on ne sait pas débuguer...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié l'intervention => Merci pour le
    ---------------

  12. #12
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 325
    Points : 16 397
    Points
    16 397
    Billets dans le blog
    1

    Par défaut

    re
    oui tout dépend du contexte
    si les boutons font la même action avec un argument diffèrent je vois pas l'intérêt de faire 36 macros

    un peu comme je l'ai montré dans mes exemples et encore ils ne sont pas très explicites

    oui quand je dis le click par le onction (affecter une macro manuellement) c'est que le nom de la macro(nouvelle) porte un nom qui parle de lui même
    on peu bien évidement affecter une sub existante
    Nom : Capture.JPG
Affichages : 27
Taille : 81,4 Ko
    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 : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    10 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 10 877
    Points : 27 314
    Points
    27 314
    Billets dans le blog
    4

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub SetOnAction()
      Dim myShape As Shape
     
      For Each myShape In Feuil1.Shapes
        myShape.OnAction = myShape.Name & "_Click"
      Next
    End Sub
    En s'assurant que les noms des shapes ne contiennent pas d'espace. On pourrait s'en assurer par macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub SetOnAction()
      Dim myShape As Shape
     
      For Each myShape In Feuil1.Shapes
        myShape.OnAction = Replace(myShape.Name & "_Click", " ", "_")
      Next
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié l'intervention => Merci pour le
    ---------------

  14. #14
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    10 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 10 877
    Points : 27 314
    Points
    27 314
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par patricktoulon Voir le message
    re
    oui tout dépend du contexte
    si les boutons font la même action avec un argument diffèrent je vois pas l'intérêt de faire 36 macros

    [...]
    Là, je n'ai rien à dire, c'est effectivement une question de contexte, mais il faudra tout de même que les case tiennent compte des arguments différents...

    On en revient alors à la norme de programmation qui veut qu'une procédure/fonction n'ait qu'une responsabilité. Si effectivement, les boutons doivent faire exactement la même chose mais avec un paramètre différent, ok pour une seule macro pour tous (encore faudra-t-il récupérer l'argument, qui devra forcément dépendre de l'image, qui ne possède pas de Tag, et donc je ne vois pas bien où on stockera la valeur de cet argument, sauf coder en dur dans les cases, à utiliser un tableau clé/valeur ou à monter une usine à gaz avec une feuille qui contiendrait une liste clé/valeur). Donc ça me paraît un peu foireux quand même et probablement plus délicat à mettre en place qu'une fonction par bouton.

    Mais bon, sur ce point-là, je peux te rejoindre quant au contexte qui pourrait avoir une certaine importance...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié l'intervention => Merci pour le
    ---------------

  15. #15
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 325
    Points : 16 397
    Points
    16 397
    Billets dans le blog
    1

    Par défaut re

    comme je le disais tout depent du contexte

    demo une seule macro qui n'a rien de compliquer a deboguer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub SetOnAction()
        Dim myShape As Shape, rng As Range
        For i = 1 To 3
            Set rng = Range(Cells(1, i), Cells(3, i))
            ActiveSheet.Shapes(i).OnAction = "'total " & Chr(34) & rng.Address & Chr(34) & "'"
        Next
    End Sub
    Sub total(add)
        MsgBox Application.WorksheetFunction.Sum(Range(add))
    End Sub
    Nom : demo12.gif
Affichages : 26
Taille : 614,1 Ko
    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 : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    10 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 10 877
    Points : 27 314
    Points
    27 314
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par patricktoulon Voir le message
    comme je le disais tout depent du contexte [...]
    Oui, dans ce cas précis que nous rencontrons tous les matins, tu auras raison
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié l'intervention => Merci pour le
    ---------------

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    octobre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2009
    Messages : 230
    Points : 94
    Points
    94

    Par défaut

    Merci pour vos réponses et conseils :-)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/02/2013, 12h14
  2. gérer les méthodes de clic pour les boutons
    Par étudiante_info dans le forum Android
    Réponses: 3
    Dernier message: 28/03/2011, 14h13
  3. besoin d'aide pour action bouton
    Par nevets dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 11/09/2009, 09h39
  4. script pour action d'un bouton html
    Par Jiyuu dans le forum Django
    Réponses: 14
    Dernier message: 03/09/2009, 10h30
  5. double clic pour meme bouton
    Par hraiwen dans le forum JavaScript
    Réponses: 2
    Dernier message: 21/04/2009, 19h12

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