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:
- 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).
- 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.
.ScreenUpdating=True
et du débogage par élimination, essayez d'insérerDebug.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.Réponses:
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:
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:
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.
la source
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.
la source
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.
la source