Excel :Intercepter un évènement pendant une macro
Bonjour,
Je vous soumet la situation :
L’appui sur un bouton activeX d’une feuille Excel2013 lance par MouseDown une macro qui s’auto-appelle. L’objectif est de quitter la boucle en relâchant le bouton (MouseUp).
Public Dégage as boolean (étant éclaré en-tête du module standard, la macro qui boucle contient la séquence :
...
Dégage = False :
DoEvents :
If Dégage then Exit Sub
...
Le code de MouseUp dans la feuille travail contient la seule instruction
Dégage = True
Ce qui coince :
MouseUp ne s’exécute pas pendant que la macro boucle et/ou ne se met pas en file d’attente système, donc DoEvents n’intercepte rien. Pas de sortie de la boucle ! Y a-t-il une stratégie pour intercepter le relâchement du bouton pendant la macro?
Antisèche bienvenu
Re-Bonjour
J’ai finalement trouvé une solution en attendant mieux
Plus besoin de procédure MouseUp et voici le code de sortie de la boucle de défilement continu
Declare PtrSafe Function GetInputState Lib "user32" () As Long
Public Sub Défilement()
--------------- (code travail et affichage)
DoEvents 'pour rafraichir l’écran à chaque boucle
For I = 1 To 100000000: Next 'temporisat°/ vitesse défilement (résultats curieux svt valeurs ! )
If GetInputState <> 0 Then Exit Sub 'getinputstate détecte relâche bouton (= 0 si pas d'action)
Défilement ‘auto rappel en boucle
Effet : Le défilement du travail commence quand on appui le bouton et cesse quand on le relâche
Note : La temporisation I est nécessaire pour rafraîchir l’écran à chaque pas du défilement et je pense pour laisser aussi le temps d’intercepter la relâche du bouton, car je constate que cette interception n’est pas toujours fiable (particulièrement si le temps d’appui est très bref comme un simple clic ; des re-clics sont parfois nécessaires ! et la temporisation a une influence)
Je suis toujours preneur d'une meilleure soluce