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
windows-7
worksheet-function
microsoft-excel-2007
vba
learningAsIGo
la source
la source
Réponses:
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.
la source
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.
la source
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.
la source
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
la source
Il y a quelques années, une question similaire a été posée qui a une solution: existe-t-il des solutions qui peuvent limiter l'utilisation du processeur d'un processus?
Process Tamer fonctionne pour Windows 7. http://www.donationcoder.com/Software/Mouser/proctamer/
la source
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.
la source
Ajoutez les 2 lignes suivantes quelque part près du début de votre macro:
Et ces 2 lignes vers la fin:
Il aura alors moins de travail à faire pendant que vous faites autre chose.
la source
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
la source
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.
la source