Connaitre quel bouton a lancé une macro VBA

Doumé95 -  
 Coform -
Bonjour,

J'ai une feuille qui a plusieurs boutons et qui appellent une macro VBA générique. cette macro générique doit faire un traitement différent en fonction du bouton qui l'a appelé, quasiment le même à une nuance près.
Comment puis-je dans la macro identifier le bouton de la feuille qui l'a appelé. La différence entre les différents boutons est le titre du bouton.
Merci de m'aider à résoudre ce problème...
Configuration: Windows Vista Internet Explorer 8.0
Excel 2003 & 2007

6 réponses

  1. bouket Messages postés 147 Statut Membre 22
     
    une petite astuce simple : définissez le nom de la macro en variable au début de chacune d'elle ... ensuite mettez ce nom dans une cellule ... de ce fait, selon que vous lanciez une macro ou une autre par les boutons, vous serez fixé ;)
    1
    1. Doumé95
       
      Merci pour cette réponse mais je ne la comprends pas. J'ai du mal m'expliquer. J'ai un bouton 1 dont le titre est "bouton 1" qui appelle la macro "macro" et un bouton 2 dont le titre est "bouton 2" qui appelle la même macro "macro". Quand je suis dans le corps de la macro "macro", comment puis-je savoir quel bouton a lancé la macro ? mon exemple indique 2 boutons mais en fait j'en ai un grand nombre que seul diffère le titre et je ne veux pas avoir à définir une macro par bouton, car 99% du code serait le même. Merci de votre aide
      0
      1. Coform > Doumé95
         
        Bonjour, je suis très intéressé par ton message car je suis confronté à la même problématique.
        As tu trouvé une solution, si oui, pourrais tu me la faire partager.
        Par avance, merci, et bien entendu je continue à chercher de mon coté.
        0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Pour chaque bouton ne mettre dans le code qu'une valeur dans une variable btn et appeler la macro commune. La macro commune testera cette variable.
    eric
    0
    1. Coform
       
      Merci Eric pour ta réponse.
      Si je te comprends bien, je suis obligé de créer autant de sub que de bouton.
      A l'intérieur de cette sub, la même ligne qui appelle une fonction avec passage de paramètre.

      Cordialement
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Re,

    une fonction ou un autre sub.
    ex:

    Dim btn As Integer
    Private Sub CommandButton1_Click()
        btn = 1
        commun
    End Sub
    Sub commun()
        If btn = 1 Then
        '...
        End If
        '...
    End Sub
    


    eric
    0
    1. Coform
       
      Merci pour ta réponse mais, si je puis me permettre, un peu d'optimisation serait un plus.
      Avec ton code j'écrirais plutot.

      Dim btn As Integer
      Private Sub CommandButton1_Click()
      btn = 1
      commun
      End Sub
      Sub commun()
      Select case btn
      Case 1
      (Actions)
      Case 2
      (Actions)
      '...
      End Select
      '...
      End Sub

      Mais j'ai fait sans variable Btn, et sans Select, voilà ce que ça donne
      Private Sub CommandButton1_Click()
      Commun(1)
      End Sub

      Sub commun(Num as Byte)
      (Actions, par exemple msgbox chr(Num + 64)
      End Sub

      Merci pour tes lumières.
      0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour tt le monde

    Si tu crées tes boutons avec la barre d'outils "formulaire"

    sub macro_unique()
     choix=Application.Caller
    'choix est affecté du nom du bouton sur lequel tu as cliqué...
    
    select case choix
    etc


    What Else ?
    0
    1. Coform
       
      Merci pour cette information très intéressante.
      Cependant, je suis tout de même dans l'obligation de créer une macro pour chaque bouton.
      En fait, j'ai 26 boutons, un par lettre de l'alphabet.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Désolé, je viens d'essayer avec 2 boutons "formulaire"
    les deux affectés à la m^me macro
    Sub unique()
    application.caller
    end sub
    me renvoie bien le nom sur bouton sur lequel j'ai cliqué

    si tu utilises des boutons "contr^le", tu peux le faire je crois avec un module de classe, mais tu peux aussi mettre tes boutons dans un userform et boucler jusqu'à celui qui a le focus ou encore un combobox (sur userform ou feuille) avec les 26 lettres....

    autrement pourquoi ne pas utiliser un tableau de cellules en utilisant Worksheet_selection change
    0
  7. Coform
     
    Merci Michel pour tous ces éclaircissements.
    0