Les macros dans Excel 2010 se bloquent

2

J'ai un tableur avec plusieurs macros. Généralement, lorsqu’il utilisait précédemment Excel 2007, un utilisateur clique sur un bouton et tout fonctionne comme prévu (calculs, envoi d’e-mails et entrées / sorties de fichiers). En règle générale, le temps d'exécution prévu est d'environ 90 secondes. La feuille de calcul est un fichier xlsm créé avec Excel 2007.

Cependant, avec Excel 2010, le même processus utilisateur génère un excel non réactif et nous oblige à tuer Excel du gestionnaire de tâches.

Certains notent que j'ai rassemblé jusqu'ici en essayant de déboguer ce problème:

  1. Lors de la surveillance de l'utilisation du processeur, il semble qu'Excel lance la macro. L’utilisation du processeur augmente comme prévu d'environ 47% pendant quelques secondes. Excel.exe que passe à 0% d'utilisation et j'ai maintenant un Excel non réactif (même après 1 heure).
  2. Si je définis des points d'arrêt de débogage sur des modules et des fonctions différentes et que je parcours le code (après avoir cliqué sur le bouton), le processus fonctionne comme prévu, bien que beaucoup plus lentement. Pour ajouter, il n'y avait aucune exception.

Je suis complètement perdu quant à la nature du problème. Au départ, je pensais que c’était peut-être l’add-in qui était utilisé, mais c’était corrigé au point 2.

Cela semble être une situation très étrange. Je peux fournir plus d'informations si nécessaire, mais je ne comprends pas très bien pourquoi. J'ai besoin d'aide pour diagnostiquer et résoudre ce problème.

Ahmad
la source
à l'occasion, je rencontre des problèmes similaires, généralement causés par un processus qui ne s'achève pas avant que la macro ne se poursuive, ce qui laisse quelque chose de déplacé (les sauts de ligne aident en fait à résoudre le problème car cela donne au processus une chance de se terminer). Je recommanderais de commenter les lignes qui désactivent la mise à jour de l'écran afin que vous puissiez regarder la macro en action. J'espère que cela vous donnera une meilleure idée de l'endroit où il est suspendu.
Xantec
@ xantec - que voulez-vous dire "sauts de ligne"? La mise à jour de l'écran est une bonne idée cependant ...
Ahmad
@Ahmed Sorry, "line breaks" = "Points de rupture du débogage"
Xantec
J'ai exactement la même situation - xlsm créé en 2007 bloque mon 2010.
x0n
1
@Ahmad, en plus du .ScreenUpdating=Trueet du débogage par élimination, essayez d'insérer Debug.Print Now(), 'some marker text'toutes les quelques lignes. Ensuite, jetez un coup d'œil à la fenêtre Immediate pendant que le code est en cours d'exécution et voyez si et où il se bloque. Puis, réduisez-le dans la zone où il se bloque en ajoutant plus d'instructions d'impression / en éliminant du code.
Peter Albert

Réponses:

0

Ce n'est peut-être pas votre réponse, mais c'est une situation que j'ai vue qui produit les résultats que vous avez décrits.

Recherchez dans l'instruction suivante la déclaration suivante:

Application.ScreenUpdating = False

Cela indique à l'interface graphique Excel de ne pas afficher les modifications / mises à jour / tout ce qui se passe. Cela peut être souhaitable pendant l'exécution d'une macro. Cependant, vous devez vous assurer que la macro à un moment donné rétablit ceci comme suit:

Application.ScreenUpdating = True

Si cela n'est jamais redéfini sur True, la situation décrite ci-dessus apparaît.

Commencez par rechercher dans le code la propriété 'ScreenUpdating' définie, supprimez-la et vérifiez si cela résout le problème.

Si vous ne trouvez pas 'ScreenUpdating' dans le code, vous avez un autre problème.

Edit: On dirait que quelqu'un a déjà mentionné la mise à jour de l'écran dans les commentaires ci-dessus.

ictatha
la source
0

Merci pour cette aide.

Je courais une macro en développement et en direct. Je n'ai eu aucun problème dans DEV, mais il a été suspendu en direct. Il fonctionne sur un serveur plutôt que sur un PC local. Je me souviens que lorsque nous avons essayé pour la première fois en direct, nous devions éliminer la tâche et que celle-ci était suspendue lors des tentatives suivantes. Dès que j'ai ajouté les lignes application.screenupdating = TRUE doevents () doevents ()

immédiatement avant application.screenupdating = FALSE

la macro a fonctionné comme prévu.

DJB
la source
0

En plus des réponses précédentes, si votre feuille Excel contient un assez grand nombre de données, essayez de l’enregistrer en tant que classeur binaire Excel (* .xlsb).

Le format binaire est beaucoup plus rapide que le format XML standard d'Excel. Espérons que vos macros pourront également fonctionner plus rapidement.

BKen
la source
Bienvenue sur Super User! C'est vraiment un commentaire et non une réponse à la question initiale. Vous pouvez toujours commenter vos propres messages, et une fois que votre réputation est suffisante, vous pourrez commenter n'importe quel message . S'il vous plaît lire Pourquoi ai-je besoin de 50 réputation pour commenter? Que puis-je faire à la place?
DavidPostill