Exécution de grosses macros (Microsoft Excel)
Je parlais avec un collègue il y a quelque temps, et il a décrit un problème qu’il avait avec une macro fonctionnant sur un système informatique très puissant.
Il semble que la macro plante et fige toujours la machine, toujours avec une erreur de mémoire insuffisante. Mon collègue pensait que si la macro pouvait s’exécuter en arrière-plan, elle n’utiliserait pas autant de ressources et ne planterait pas.
Je savais cependant que la solution proposée ne résoudrait pas nécessairement le problème. Bien que cela puisse libérer certaines ressources, le système finirait par manquer de mémoire. Pourquoi? Parce que les problèmes de mémoire insuffisante sont généralement dus à des problèmes de codage dans la macro d’origine.
Les «fuites de mémoire» (qui conduisent à la condition de mémoire insuffisante) peuvent être causées par un certain nombre de problèmes dans le code de macro.
La meilleure solution est un cycle de débogage tard dans la nuit, en parcourant le code de macro et en analysant où le problème s’installe. Recherchez d’abord les problèmes les plus évidents (mais facilement négligés), tels que les boucles infinies. Si la macro effectue beaucoup de traitements répétitifs (en boucle sur des feuilles de calcul), assurez-vous de libérer toute la mémoire que vous déclarez pour votre macro. Par exemple, pour chaque instruction SET que vous utilisez, vous devez avoir une instruction correspondante définissant l’objet sur RIEN, et ces instructions doivent être dans la boucle.
Si vous pouvez parcourir les macros sans qu’elles n’échouent, il y a de fortes chances que le problème réside dans une sorte de problème de synchronisation dans les threads – un problème de synchronisation qui n’apparaît, bien sûr, que lorsque la macro s’exécute à fond. sa propre. Si vous pensez que c’est le problème, un réordonnancement des événements dans la macro peut peut-être le contourner.
Si la macro utilise DDE, vous devez être conscient que Microsoft recommande l’utilisation de l’automatisation OLE au lieu de DDE. Les problèmes de synchronisation sont assez courants avec DDE, et Microsoft le considère maintenant comme obsolète et trop difficile à résoudre (ce qui signifie qu’ils ne le prendront pas en charge). Dans VBA, plusieurs appels à un sous-programme peuvent également provoquer des fuites de mémoire, et ces sous-programmes doivent être réécrits en tant que fonctions définies par l’utilisateur.
Vous devez également vous assurer que toutes les références de variable sont entièrement déclarées. J’ai vu certains rapports de macros «confondues» entre les feuilles de calcul, et même si vous utilisez Alt + Tab pour supprimer le focus d’Excel.
_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 (2579) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.