Tester si une macro est en cours d execution

Résolu
helpvb Messages postés 32 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 22 avril 2009 - 24 déc. 2007 à 16:01
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 13 janv. 2008 à 10:01
Bonjour
Sur mon document excel j ai un menu personnalisé avec des sous menus qui permettent a l utilisateur de declencher des macros vba
Comment pourrais je tester en vba 6.3 si une des 20 macros mis a disposition est en cours d execution ?
Merci pour votre aide

8 réponses

cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 déc. 2007 à 16:11
Méthode simple : à chaque fois qu'une de tes macros est lancée, tu positionne une variable à true et quand elle se termine, à false.
Et après tu regardes la valeur de tes variables ...
D'accord c'est pas très propre mais bon
_______________________________________________________________________
VB.NETis good ...VB6is better
3
helpvb Messages postés 32 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 22 avril 2009
24 déc. 2007 à 16:15
Merci pour la reponse mais si la macro s est plantée la variable restera positionnee a True et je souhaiterais eviter de rentrer dans une gestion d erreu de toutes mes macros...
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 déc. 2007 à 16:40
Bonjour,

Si la macro s'est plantée, c'est qu'il y avait une raison de plantage.

C'est à la recherche de cette raison qu'il te faut travailler, avant de penser à la gestion d'erreurs...
Une fois la raison découverte, il te faut travailler à la mise en oeuvre d'un mécanisme en amont et non en aval.

La gestion d'erreur ne doit être envisagée qu'après ces démarches-là ... et uniquement s'il est vraiment impossible d'éviter une telle gestion (ce qui est assez rare).
3
helpvb Messages postés 32 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 22 avril 2009
24 déc. 2007 à 16:53
ok disons alors en cas de plantage intempestif....
y aurait pas simpelement une instruction permettant de tester si une maacro est en cours d execution ?
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 déc. 2007 à 22:55
Je ne crois pas non ... Mais tu es censé avoir un code qui ne se plante pas !!
_______________________________________________________________________
VB.NETis good ...VB6is better
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
26 déc. 2007 à 13:55
Bonjour,

La question est un non sens. En effet, l'exécution d'une macro est exclusive. On ne pas lancer 2 macros en même temps... donc quand une macro est en cours d'exécution, elle gèle le reste, il devient impossible de tester si la macro est en cours, sauf dans la macro elle-même, mais cela n'a pas de sens...


Par contre, à partir d'un programme externe, la question serait très pertinente...


Amicalement,


Us.
3
helpvb Messages postés 32 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 22 avril 2009
13 janv. 2008 à 03:50
Merci pour vos reponses mais avant d affirmer que la question est un non sens, il serait bon de réfléchir un peu...
En effet cela a tout son sens dans la mesure ou je souhaite tester dans le code vba des call back ('Worksheet Onchange, Onselection,...)si le code du call back s execute au travers d une de mes macros ou au travers d une manipulation utilisateur...
Amicalement...
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
13 janv. 2008 à 10:01
Bonjour helpvb,

Qu'on ne trompe pas sur mes propos, quand je dis que la question est un non sens, je ne dis pas que la question n’est pas intéressante.

Je reste sur ma position, faute de contre exemple. Mieux qu’un grand discours, un petit exemple qui consiste à programmer une action dans deux événements (déclenchés nécessairement par utilisateur), dont un contient une boucle d’attente de 5 secondes pour simuler donc un code qui s’exécute… Que soit une boucle d’attente ou un vrai code, cela ne change donc rien. On peut donc constater que le déclenchement des événement ne peuvent pas être simultannées. Ce qui justifie mes premiers propos : "donc quand une macro est en cours d'exécution, elle gèle le reste, il devient impossible de tester si la macro est en cours"

=

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "je sauve"
End Sub



Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "je change... et j'attend 5 secondes... Faites une autre action !"
t = Timer
Do
Loop Until Timer - t > 5
End Sub

=

A chaque changement de cellule SheetSelectionChange se déclenche avec un message et attend 5 secondes. Si on essait de sauvegarder pendant l'exécution ce qui déclenche BeforeSave, rien ne se produit. On n'a pas la main... Néanmoins, l'action reste en "mémoire tampon", et s'active juste après la première.

Amicalement,
Us.
0
Rejoignez-nous