auto-référence au fichier contenant une macro.
Bonjour à tous,
dans le developpement de mes macros, je butte sur un problème agaçant sans être bloquant.
La macro contient des appels à d'autres macros dont la référence contient le nom du fichier.
Code:
1 2 3 4 5 6 7 8 9
| Sub Inc()
'
' Inc Macro
'
'
Application.Run "'B-SAF-FDM 1-7_empty.xlsm'!Cleaning"
Application.Run "'B-SAF-FDM 1-7_empty.xlsm'!Inception"
End Sub |
Un problème se pose quand je crée une nouvelle version. si je ne renomme pas toutes ces références, la macro ne peut pas fonctionner.
Les utilisateurs finaux ont un souci semblable : il ne peuvent pas enregistrer leur travail sous un autre nom et espérer relancer la macro.
Pourriez-vous me dire comment appeler une sous-macro sans que le nom du fichier soit explicitement utilisé ?
Merci d'avance;
Alex
Résolue dans quel contexte ?
Bonjour …
Citation:
C'est tellement simple que je m'en veux de ne pas l'avoir tenté moi-même.
J'espère que ça aidera quelqu'un.
Encore faut-il ne pas tenter le Diable ! J’éviterais de dire cela.
Citation:
Tu aurais dû préciser que les macros appelées étaient dans le même fichier que la macro appelante.
J’ajouterais que les macros figurent dans la même fenêtre de codes (Feuille ou Module) !
Avec, sans aucune autre précision :
Code:
1 2 3 4
| Sub Inc()
Cleaning
Inception
End Sub |
L’exécution va renvoyer un message d’erreur quand au moins l’une des macros appelées n’est pas écrite dans la même fenêtre.
Dans ce cas il faudra utiliser un appel bien précis !
Dans le Module 1*
Code:
1 2 3 4
| Sub Inc()
Call Cleaning
Module3.Inception 'autre façon d'appeler la procédure
End Sub |
Et encore … il y aura un message d’erreur si la macro et en Private
Cela passe avec, dans le Module 2
Code:
1 2 3
| Sub Cleaning()
MsgBox "C'est bon"
End Sub |
Mais cela casse avec, dans le Module 3
Code:
1 2 3
| Private Sub Inception()
MsgBox "C'est tout bon"
End Sub |
*Pour en terminer Call Cleaning ne passe pas quand cette macro est écrite dans la fenêtre des codes d’une Feuille. Dans ce cas, il faudra passer par Feuilx.Cleaning (macro écrite dans FeuilX)
Nota : je suis intervenu car je constate qu’il est trop peu fait allusion au choix de l’endroit où écrire les macros !
Combien de problèmes seraient évités en commençant d’abord par se poser la question.