Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je suis parti de ce Post (2009) pour faire le fichier joint un peu amélioré d'une Subclass pour tracker le Worksheet.MouseMove.
Cependant, le Hooking WinProc() est toujours totalement instable et la moindre manip (réduction de la fenêtre, ...) plante Excel totalement.
J'ai trouvé sur Github une page pour faire une Class for safe subclassing windows qui laisse supposer avec le mot "safe" que les plantages seraient évités.
Quelqu'un a-t-il déjà utilisé ce code ? Parce que moi je m'y perds un peu.
Pièces jointes
MouseMove on Worksheet (Subclassing Hooking risque élevé de plantage).xlsm
bonjour @nullosse@Dudu2
de 1à2% je passe à18/24%
sinon effet ca marche
le principe
c'est le xlam qui tourne
il appelle la fonction de classeur caller
du coup la conso n'est pas inputée sur le classeur
c'est de l'adressof :artisanal mais de l"adressof quand même
on pourrait faire exactement pareil avec un do loop et un wscriptshell.sleep dans un vbs
dans le do loop on testerais le getobject
avec un wrapper on testerais les api curseur
sortie si le getobject ne renvoie pas le classeur caller
Dans cette version, j'ai utilisé le Timer CommandBar de @patricktoulon (auquel je ne comprends pas grand chose d'ailleurs !) et là miracle, plus de saute de curseur chez moi en tous cas. Et bien sûr plus de hooking donc sûr à 99,9%.
le principe est tres simple
les events de commandbar ne sont plus implémentés dans excel depuis 2007
et pour cause nous avons des rubans xml
mais elle existent toujours car toujours utilisées moins mais tout de même ne serait ce que pour retrocompatibilité
et nous avons toujours des commandbars popup menu ect....
comme ce n'est plus implementé il nous faut classer et crer un event commandbar
c'est ce que l'on fait dans le thisworkbook (qui est un module classe je le rapelle)
on crée donc l'event update
VB:
Option Explicit
Public WithEvents CommandBars As CommandBars
Private Sub CommandBars_OnUpdate()
Application.CommandBars.FindControl(ID:=2040).Enabled = Not Application.CommandBars.FindControl(ID:=2040).Enabled
' faire ce qu'on veux a partir de là comme appeler une fonction
End Sub
pour la demarrer
VB:
Set ThisWorkbook.CommandBars = Application.CommandBars
pour l'arrêter
VB:
Set ThisWorkbook.CommandBars = Nothing
dans cet event on enable et disable un control qui ne sert a rien (ou celui que vous voulez)
comme la commandbar event update se déclenche puisque l'on change quelque chose dedans
ben le truc tourne en bourrique
et comme les events sont en addressof
je rappelle à toute fin utile que les events commandbar sont de niveau application et non workbook comme les events change ou autres d'une feuille par exemple
autrement dit les fonction ou sub que vous appelez sont appelées par l'object application et non le classeur
bon il y a une limite quand même si les codes executé sont costauds forcement
mais avec ca pas de problème d'instabilité du hook
pour l'arrêter on detruit la variable en l'occurence ici commandbars(dudu2 ne comprendra jamais les dangers d'utiliser le nom des object comme variable)
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD