Macro, lors de l’exécution, empêche Excel de répondre (Microsoft Excel)
Lorsque Dave écrit une macro qui doit traiter beaucoup d’informations dans une boucle For … Next, il utilise toujours la barre d’état pour indiquer la progression.
En règle générale, il y affichera un message tel que « Traitement de la ligne X de Y ». Lorsque «Y» est une valeur élevée (l’extrémité supérieure de la boucle For … Next), Excel arrête souvent de mettre à jour la barre d’état et affiche quelque chose comme «Ne répond pas» dans la barre de titre d’Excel. La macro est toujours en cours d’exécution, cependant, et lorsqu’elle est terminée, Excel commence à répondre et tout fonctionne comme il se doit. Dave se demande comment il peut empêcher Excel de se comporter de cette manière et, à la place, afficher les mises à jour de la barre d’état comme il le souhaite.
Ce problème semble se produire lorsqu’il apparaît à Windows qu’Excel a cessé de répondre. (C’est Windows, après tout, qui est responsable de ce qui apparaît dans la barre de titre d’un programme.) J’ai pu reproduire le comportement assez facilement si j’ai plusieurs programmes ouverts dans Windows et que je clique sur une autre fenêtre de programme pendant qu’Excel se fragmente une longue macro. Essentiellement, si Excel est occupé à exécuter la macro ou s’il ne peut pas continuer à demander à Windows de mettre à jour la barre d’état, alors il apparaît, en effet, comme Excel a cessé de répondre.
Il existe deux approches possibles qui peuvent être utilisées. Tout d’abord, vous pouvez utiliser la commande DoEvents dans la boucle. Normalement, cela est utilisé pour indiquer à la macro de prêter attention à tout ce qui se trouve dans la file d’attente des événements, par exemple lorsque quelqu’un appuie sur le clavier. Cela équivaut à forcer Excel à « rechercher » dans la macro sur laquelle il travaille et à communiquer avec Windows. Cela permettrait nécessairement à Windows de savoir qu’Excel est vraiment réactif et permet aux mises à jour de la barre d’état de se produire.
Vous pouvez même mettre la commande juste après la mise à jour de la barre d’état:
Application.StatusBar = "Processing row " & X & " of " & Y DoEvents
L’autre chose à essayer est de ne pas mettre à jour autant la barre d’état.
Si l’extrémité supérieure de votre boucle est très grande, il peut être préférable de calculer un pourcentage et de mettre à jour la barre d’état lorsqu’une partie du total est terminée, peut-être tous les 5% ou 10% du total. Cela signifierait que la barre d’état n’a besoin d’être mise à jour que 10 ou 20 fois pendant la boucle, plutôt que des centaines ou des milliers de fois. Cela peut signifier que Windows peut suivre les demandes de mise à jour de la barre d’état et, en prime, votre macro peut s’exécuter plus rapidement car elle n’a pas à mettre à jour la barre d’état aussi souvent.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (13341) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.