helpvb
Messages postés32Date d'inscriptionjeudi 7 septembre 2006StatutMembreDernière intervention22 avril 2009
-
24 déc. 2007 à 16:01
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 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
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 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
helpvb
Messages postés32Date d'inscriptionjeudi 7 septembre 2006StatutMembreDernière intervention22 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...
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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).
helpvb
Messages postés32Date d'inscriptionjeudi 7 septembre 2006StatutMembreDernière intervention22 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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 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
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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...
helpvb
Messages postés32Date d'inscriptionjeudi 7 septembre 2006StatutMembreDernière intervention22 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...
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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.