Limiter l'utilisation du processeur Excel

31

Existe-t-il un moyen de limiter le niveau d'utilisation du processeur auquel Excel a accès lors de l'exécution? J'ai un script VBA qui calcule un tas de formules de tableaux géants. Le calcul complet prend peut-être 20 minutes en utilisant 100% de mon processeur, mais je ne peux pas utiliser ma machine pendant le temps et je préfère le faire fonctionner en arrière-plan avec une utilisation du processeur de 50%, donc je peux continuer à faire d'autres choses. Aucune suggestion?

Mon système d'exploitation est Windows 7 Enterprise 64 bits et la version Excel est 2007-32 bits

learningAsIGo
la source
1
Les fenêtres? Quelle version?
DavidPostill
Windows 7. Je vais l'ajouter au post
learningAsIGo
8
Obtenez un processeur multicœur? Si vous en avez déjà un (qui n'en a pas?) Et qu'Excel utilise tous les cœurs (ce que je ne savais pas qu'Excel pouvait faire), définissez son affinité dans le Gestionnaire des tâches.
user253751
2
Cela ne répond pas à la question, mais assurez-vous de désactiver les mises à jour de fenêtres avant de commencer à calculer et à mettre à jour des milliers de cellules. Si vous avez des graphiques, désactivez-les également. VBA est lent, mais quand il est vraiment lent, c'est généralement l'un ou les deux à blâmer.
Coxy
1
@cat: Non, une utilisation à 100% du processeur dans le Gestionnaire des tâches de Windows signifie 100% sur tous les processeurs logiques. Si un seul noyau est rempli, ce sera soit 25% (sur un dual core commun avec hyper threading) ou ~ 36% (turbo boosting).
Martheen Cahya Paulo

Réponses:

54

Si une fonction VBA est appelée à partir de plusieurs formules ou si votre script génère ou force le recalcul de plusieurs formules, cela devrait certainement utiliser la fonction de calcul multi-thread d'Excel. Respectivement, cela exécuterait plusieurs instances de votre fonction VBA pour chaque formule ou recalculerait plusieurs cellules simultanément pendant que votre script vba s'exécute sur un seul thread.

Vous pouvez limiter le nombre de threads utilisés par Excel pour recalculer les formules dans la section Options Excel ... Onglet Avancé ... Formules.

entrez la description de l'image ici

mtone
la source
Le sous-VBA n'est pas le problème, c'est la formule de tableau Excel que le code VBA génère.
learningAsIGo
@learningAsIGo À droite, j'ai simplifié ma réponse. Faites-nous savoir si la définition du nombre de threads sur 1 aide.
mtone
1
Cela semble avoir fait l'affaire. Je l'ai réglé sur 3 cœurs et il atteint au maximum 75% du processeur, ce qui me laisse beaucoup de place pour faire d'autres choses. Merci!
learningAsIGo
27

Au lieu de réduire la priorité, essayez de modifier l'affinité dans le Gestionnaire des tâches. Si vous avez plus d'un processeur, vous pouvez limiter le nombre de processeurs qu'Excel utilisera. Cela permettra aux autres CPU de travailler sur d'autres choses.

Cliquez avec le bouton droit sur Excel dans l'onglet Processus et sélectionnez Définir l'affinité. Choisissez les processeurs sur lesquels vous souhaitez qu'Excel s'exécute.

B540Glenn
la source
3
Notez que pour l'affinité, Windows considère également chaque cœur comme un processeur. (Donc, cela fonctionnerait si vous avez un noyau double ou quadruple.)
jpmc26
1
Eh bien, si vous parlez spécifiquement des cœurs, pourquoi pas des threads HyperThreading? Ce sont également des CPU logiques distincts. C'est-à-dire qu'un CPU quad-core avec HT aura 8 CPU logiques.
Ruslan
Je le fais tout le temps lors de l'exécution de HandBrake et je souhaite simplement naviguer sur Internet pendant une heure sans interrompre ni arrêter le processus de transcodage. Je pense qu'il vaudrait la peine de mentionner qu'après un certain temps, les cœurs sont libérés dans le programme et l'affinité "se réinitialise", au moins cela m'arrive avec le frein à main.
MonkeyZeus
2
@MonkeyZeus Habituellement, l'affinité n'est pas enregistrée à la fin d'un processus. Il s'applique uniquement au processus en cours d'exécution. Il se peut que HandBrake génère lui-même de nouveaux processus ou que vous en commenciez de nouveaux.
jpmc26
@ jpmc26 Bon à savoir! Je n'ai certainement pas démarré un nouveau processus moi-même, il doit donc être en train de le générer seul.
MonkeyZeus
7

Vous pouvez essayer de réduire la priorité du processus Excel, en trouvant l'ouverture du gestionnaire de tâches, en basculant vers l'onglet "Détails" ou "Processus" (selon votre version de Windows), en cliquant avec le bouton droit sur le processus excel.exe et en sélectionnant un priorité inférieure. Cela devrait donner plus de temps CPU aux autres processus.

Slithy Toves
la source
1
Cela ne semble pas fonctionner: j'ai défini la priorité sur très faible et il est toujours en retard sur l'ordinateur.
learningAsIGo
1
Peut-être essayez-vous d'augmenter la priorité de votre navigateur Web ou tout ce que vous essayez de faire en même temps? J'ai trouvé cette discussion sur l'efficacité des changements de priorités .
Slithy Toves du
3
@SlithyToves: Cela ne devrait vraiment pas avoir d'importance. La priorité détermine quel programme obtient le CPU, s'il y a plusieurs candidats. Régler Excel sur très bas signifie qu'il n'obtient une tranche CPU que lorsque tous les autres programmes sont terminés. Toutefois, lorsque Excel n'obtenir une tranche de CPU, il ne renoncera pas à cette tranche. Il ne fera que perdre la concurrence pour la prochaine tranche de temps CPU.
MSalters
3

Il existe des fonctions Veille et Attente disponibles dans VBA ou via une déclaration. Cependant, la «règle empirique trop simpliste» consiste à ne jamais utiliser Sleep (). (google '"ne jamais utiliser la programmation sleep ()")

Page de documentation pour Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Notez que la mise en veille et l'attente entraîneront Excel ne répondra pas pendant la durée que vous spécifiez et cela peut provoquer des «épaves de train» de tranche de temps.

Si votre calcul implique une boucle quelconque, alors une façon de gérer cela pour votre objectif spécifique (perdre le temps de calcul pour la disponibilité du processeur) consiste à créer une fonction d'attente spéciale qui, par exemple, boucle DoEvents () pendant 1 seconde et revient ensuite.

DoEvents dit essentiellement à votre code / interprète d'abandonner le temps pour le système d'exploitation, etc. Cela entraînera certainement plus de temps pour votre code. Il peut également vous permettre de modifier la feuille de calcul pendant le calcul, de sorte que votre kilométrage peut varier. Tester.

Voir, par exemple, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba

Yorik
la source
0

J'ai eu le même problème lorsque mon ordinateur portable avait 4 Go de mémoire. Dès que je l'ai mis à niveau vers 16 Go, le problème a cessé. Juste une autre solution possible.

RPh_Coder
la source
0

Ajoutez les 2 lignes suivantes quelque part près du début de votre macro:

'Turn off screen updating

 Application.ScreenUpdating = False

Et ces 2 lignes vers la fin:

'Turn screen updating back on

 Application.ScreenUpdating = True

Il aura alors moins de travail à faire pendant que vous faites autre chose.

Mal équilibré
la source
-2

Si vous utilisez un bureau 32bi dans un système d'exploitation 64 bits, vous devez utiliser cette application: http://www.ntcore.com/4gb_patch.php

Cette application permettra à Excel ou à tout autre bureau 32 bits d'utiliser mo

diasje
la source
La question concerne la limitation du processeur, votre réponse concerne l'activation d'AWE sur des applications qui ne profiteront probablement même pas d'AWE.
Martheen Cahya Paulo
-5

Utilisez OpenOffice ou LibreOffice: sa puissance de script est beaucoup plus efficace que celle de MS, et vous pouvez littéralement avoir un "accélérateur" dans vos calculs.

EDIT: Pourquoi downvote? jetez un œil au manuel et voyez par vous-même. Vous pouvez convertir vos calculs en Java et être très bien avec toute la puissance de limitation de la JVM, par exemple.

Alexey Vesnin
la source
3
Je n'ai pas déçu, mais je suppose que c'est parce que vous avez proposé une solution de contournement au lieu d'une solution à la question très directe posée dans l'OP: "Existe-t-il un moyen de limiter le niveau d'utilisation du processeur auquel Excel a accès lors de l'exécution? "
Monkpit
@Monkpit mon histoire avec OpenOffice a commencé à partir d'un problème similaire, le portage a pris environ une semaine pour tous les documents que nous avions, mais après cela, je me suis dit que je n'utiliserais plus MS Office.
Alexey Vesnin
OpenOffice est profondément supérieur à Office pour la raison que 99% des gens utiliseront Office sur Libre, donc les développeurs (probablement comme ce type). C'est pourquoi j'ai voté contre.
Thomas Shera
@ThomasShera Eh bien, je ne comprends pas du tout - pourquoi pendant de si longues années, les gars de Microsoft ne peuvent pas simplement réparer les choses ? Non, pas de nouveaux trucs nécessaires, pas d'extensions - faites simplement fonctionner votre produit ...
Alexey Vesnin