Condition de if = façon dont la macro a été lancée

Bonjour le forum,

Nouveau jour, nouvelle question ; Nouvelle question, nouveau sujet..

Je ne sais pas si le titre du sujet est assez clair mais je ne savais pas vraiment comment décrire ma question en quelque mot.

Je bosse sur un fichier de calendrier avec un module une procédure "CréationCalendrier" qui crée des onglets avec des tâches pour chaque jour etc.

J'ai ensuite créé un module une procédure "Actualiser", qui me permet de rafraîchir les tâches.

Ce module Cette procédure "Actualiser" peut être lancée de deux façons :

- Soit par choix en cliquant sur un bouton (bouton "refresh" présent sur tous mes onglets)

- Soit forcé depuis une MsgBox via un autre bouton (code ci-dessous, présent dans un autre module)

    If MsgBox("Tous les mois sont déjà créer, voulez-vous les actualiser ?", vbOKCancel, "Demande de confirmation") = vbOK Then
        Actualiser
    Else
        End
    End If

Ma question est donc la suivante :

Est-il possible d'indiquer dans mon module ma procédure Actualiser les indications suivantes :

Si la macro a été lancée depuis le bouton refresh alors [procédure]

Sinon [Goto ...]

(En sachant que bien sûr le Goto serait dans le module la procédure Actualiser lui aussi...)

Je ne joins volontairement pas de fichier à ma demande car je ne pense pas cela nécessaire, je voudrais juste savoir si :

1/ cela est possible

2/ la syntaxe à utiliser

D'avance merci à tous ceux qui tenteront de m'aider !

Bonne après-midi

Bonjour,

Appelons un chat : un chat !

Un module est essentiellement un conteneur de procédures et/ou de fonctions (ou de propriétés et/ou de méthodes).

On n'exécute pas (ou n'appelle pas) un module mais une des procédures ou fonctions qu'il contient.

Pour faire ce que tu veux, il suffit de passer le nom de l'appelant en argument de la procédure ou de la fonction appelée.

Bonjour le fil, bonjour le forum,

Regarde si Application.Caller peut t'aider...

Bonjour Patrice33740,

Oulala, toutes mes excuse j'avoue que je me suis un peu emmêlé là

Je vais modifier mon post initial, je parlais bien de procédures et non de modules.

Pour faire ce que tu veux, il suffit de passer le nom de l'appelant en argument de la procédure ou de la fonction appelée.

C'est à dire faire deux procédures distinctes ?

Une première avec en argument le nom du bouton, et une deuxième sans celui-ci ?

Pardon mais j'ai débuté les VBA il y a peu et je dois dire que je ne me suis pas encore penché sur les "arguments"

@ThauThème, je vais regarder ça

C'est à dire faire deux procédures distinctes ?

Non, une seule avec un argument :

Private Sub Actualiser(strNom_appelant as String)

et pour l'appeler :

Call Actualiser("Bouton 1")

ou

Call Actualiser("Bouton 2")

et bien sûr dans la procédure Actualiser il faudra traiter cette information, par exemple :

Select case strNom_appelant 
  case "Bouton 1"
    'action 1    
  case "Bouton 2"
    'action 2    
End Select

Edit : vu que tu lances ta macro depuis un bouton, si il s'agit d'un bouton de formulaire il faudra peut-être combiner un argument optionel et Application.caller. Le plus simple, dans ce cas, étant d'utiliser un bouton activeX

Re-bonjour,

Après plusieurs essais j'ai finalement réussi à m'en sortir !

J'ai utilisé Application.Caller comme ceci en début de ma procédure Actualiser :

If Application.Caller = "Ellipse 1" Then
    nbactu = ThisWorkbook.Sheets.Count - 2
    GoTo boucle
Else
    [...]

Ainsi, si ma procédure est appelée depuis le bouton "Ellipse 1", ma variable nbactu est égale au nombre de Sheets - 2 (car mes deux premiers onglets ne doivent pas être modifiés) et passe ensuite à la boucle ;

Sinon, on continue sur l'étape intermédiaire, à savoir déterminer la valeur de nbactu.

Merci à vous deux pour votre aide !

Sujet résolu

Rechercher des sujets similaires à "condition facon macro ete lancee"