XL 2010 Exécution Bout de code suivant d'où est appelée la macro

cathodique

XLDnaute Barbatruc
Bonjour,

J'ai une procédure dans un module standard. J'appelle cette procédure soit depuis une UserForm et exceptionnellement depuis un bouton sur une feuille, pour vérifier l'exactitude du traitement.
Pour cela, un bout de code dans ma procédure reporte les données sur une feuille. Je voudrais que cette partie ne soit pas exécutée lorsque ma procédure est appelée depuis la userform (Usf_Données).

En vous remerciant.
 
Solution
Bonjour Cathodique,
Une possibilité est d'avoir une variable en public ( que j'ai appelé Flag). Avec :
VB:
Public Flag%
Sub Go_userform()
UserForm1.Show
End Sub
Sub LancerMacro()
If Flag = 1 Then MsgBox "Macro lancée de l' Userform" Else MsgBox "Macro lancée du bouton"
End Sub

Userform :
Private Sub CommandButton1_Click()
    Flag = 1
    LancerMacro
    Flag = 0
End Sub

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Cathodique,
Une possibilité est d'avoir une variable en public ( que j'ai appelé Flag). Avec :
VB:
Public Flag%
Sub Go_userform()
UserForm1.Show
End Sub
Sub LancerMacro()
If Flag = 1 Then MsgBox "Macro lancée de l' Userform" Else MsgBox "Macro lancée du bouton"
End Sub

Userform :
Private Sub CommandButton1_Click()
    Flag = 1
    LancerMacro
    Flag = 0
End Sub
 

Pièces jointes

  • Classeur2.xlsm
    15.1 KB · Affichages: 2

Gégé-45550

XLDnaute Accro
Bonjour,

J'ai une procédure dans un module standard. J'appelle cette procédure soit depuis une UserForm et exceptionnellement depuis un bouton sur une feuille, pour vérifier l'exactitude du traitement.
Pour cela, un bout de code dans ma procédure reporte les données sur une feuille. Je voudrais que cette partie ne soit pas exécutée lorsque ma procédure est appelée depuis la userform (Usf_Données).

En vous remerciant.
Bonjour,
Une possibilité :
  • créer une variable booléenne globale appelée par exemple "omettre" mise à false dans Workbook_Open
  • mettre cette variable à True en début d'exécution de la procédure avec le bouton puis la remettre à False en fin de procédure
  • N'exécuter le bout de code à isoler que si "omettre" est à True
Cordialement,
 

cathodique

XLDnaute Barbatruc
Messieurs bonjour,

je vous remercie, je viens de trouver une solution. Je ne sais pas si elle est perenne.
VB:
If Application.Caller = "Rectangle à coins arrondis 19" Then
Je regarde vos propositions et reviens aux nouvelles.

Encore merci.
 

cathodique

XLDnaute Barbatruc
Re,
Application caller" marche très bien.
cependant si la macro peut être appelé par plusieurs boutons, cela deviendra plus complexe qu'avec une variable public car il faudra faire autant de IF que de bouton ou un OR avec tous les noms.
A voir suivant contexte.
Re,
Tu me rassures, ma procédure est appelée soit à l'ouverture du formulaire (initialize) ou d'un unique bouton (shapes).

Encore merci.
 

patricktoulon

XLDnaute Barbatruc
bonjour juste en passant
une sub comme une fonction peut être doté d'argument et qui puis est optionnels
je reprend la demo de sylvanu et je met la sub avec l'argument flag dans la sub
pas besoin de vider une quelconque variable ensuite
VB:
Sub Go_userform()
UserForm1.Show
End Sub

Sub LancerMacro(Optional Flag As Integer = 0)
If Flag = 1 Then MsgBox "Macro lancée de l' Userform" Else MsgBox "Macro lancée du bouton"
End Sub

'dans le Userform:
Private Sub CommandButton1_Click()
    LancerMacro 1
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Pour cela, un bout de code dans ma procédure reporte les données sur une feuille. Je voudrais que cette partie ne soit pas exécutée lorsque ma procédure est appelée depuis la userform (Usf_Données).
Le plus simple est de procéder de façon standard :
- Tu coupes ta macro en deux.
- Avec un bouton tu appelles une des deux macros.
- Avec l'autre bouton tu appelles les deux macros.
 

Discussions similaires

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba