Accelerer un code

Pour écrire et partager des tutoriels et des astuces (Excel, Calc et Google Sheets uniquement)
r
rocket4
Membre impliqué
Membre impliqué
Messages : 1'176
Appréciations reçues : 3
Inscrit le : 30 août 2011
Version d'Excel : 2010

Message par rocket4 » 19 février 2012, 15:24

Bonjour

si des fois cela peut vous servir , voici quelqes lignes qui boosterons votre code
sub increas_speed()

Dim xlCalc As XlCalculation

 xlCalc = Application.Calculation

    Application.Calculation = xlCalculationManual

    On Error GoTo CalcBack

    

    'ici votre code 

    

    Application.Calculation = xlCalc

    

    Exit Sub
CalcBack:
Application.Calculation = xlCalc
End Sub

j'ai testé ca a l'air pas mal , la difference est nette :mrgreen:
Edit Amadéus: Sujet transféré dans la rubrique "Cours et astuces"
G
Gorfael
Membre fidèle
Membre fidèle
Messages : 221
Inscrit le : 1 octobre 2007
Version d'Excel : informatique, lecture, aïkido

Message par Gorfael » 19 février 2012, 15:50

Szlut rocket4 et le forum
Personnellement, je trouve que ta formulation permet de ne pas trop ralentir un code... pas de l'accélérer !
Pour l'accélérer, j'essaie d'utiliser le bon algorithme, le bon raisonnement, de limiter les plages de travail, de sortir de la macro dès que j'ai effectué le traitement voulu et de ne pas utiliser les instructions qui le ralentissent, comme Select/Activate.
A+
Plus le problème est moins précis, moins je peux plus aider !
Donner un poisson à l'homme affamé c'est apaiser sa faim. Lui apprendre à pécher, c'est le nourrir.
Il n'y a toujours aucun télépathe ou devin recensé sur ce site
Avatar du membre
waard
Contributeur
Contributeur
Messages : 436
Appréciations reçues : 16
Inscrit le : 9 février 2015
Version d'Excel : 2013, 2016, FR
Téléchargements : Mes applications

Message par waard » 19 septembre 2015, 01:12

Hello,

Je déterre ce post, car à une époque j'ai étudié ce post pour mes travaux, en fait ça n'accélère le code que si la macro fait et utilise des formules calculs sur le classeur.

Dans ce cas là, l'accélération est plus ou moins notable, en fonction du nombre de formules de votre classeur, car vous désactivez le travail de recalcule auto d'Excel.

Sinon il n'y a pas d'effets si vous ne calculer pas sur Excel, mais en VBA ou que vous ne réalisez que des actions mécaniques de copier/coller par exemple.

Application.Calculation = xlCalculationManual => Définit dans l'onglet formule, le mode de calcul par défaut : Manuel à la demande.

En mode normal, le classeur recalcule automatiquement, donc si on prend le code :
xlCalc = Application.Calculation et Application.Calculation = xlCalc
Cela donne => Application.Calculation = Application.Calculation
Soit un retour au mode de calcul par défaut => Application.Calculation = xlCalculationAutomatic
Autant écrire directement : Application.Calculation = xlCalculationAutomatic
En l'état du code proposé à l'époque, il s'agit de désactiver en début de SUB, le calcul auto., pour le réactiver en sortie de SUB.

Dans le cas du 1er post, pour une désactivation du recalcule, en modifiant l'option, le plus simple c'est de faire ça :
Sub increas_speed()
'A placer en début de SUB
Application.Calculation = xlCalculationManual

'L'ensemble de votre code ......  range("A1").select

'A placer à la fin de la SUB et avant chaque sortie de macro
Application.Calculation = xlCalculationAutomatic
End Sub
Après si vous ne souhaitez pas désactiver totalement la fonction recalcule, vous pouvez utiliser l'option de choix de calcul manuel avec la méthode Calculate, qui permet aussi de limiter le calcul au Classeur/Feuille/Plage cellule/Cellule, ainsi, bien qu'en mode manuel, vous effectuerez le calcul une seul fois, dans un espace limité et seulement sur votre action calculate.
Sub increas_speed()
'A placer en début de SUB
Application.Calculation = xlCalculationManual

'L'ensemble de votre code ......  range("A1").select

'Force le calcul d'Excel sur la seule formule cellule A1, pour reprendre la solution dans la suite du code
Range("a1").Calculate

'Suite de votre code ......  range("A1").select

'A placer à la fin de la SUB et avant chaque sortie de macro
Application.Calculation = xlCalculationAutomatic
End Sub

Tableau des options possibles de Calculation :
Nom Valeur Description
xlCalculationAutomatic -4105 Excel contrôle le recalcul.
xlCalculationManual -4135 Le calcul est effectué sur demande de l'utilisateur.
xlCalculationSemiautomatic 2 Excel contrôle le recalcul, mais ignore des modifications apportées aux tableaux.
https://msdn.microsoft.com/en-us/librar ... -snippet-1

Application.Calculate, méthode
Pour calculer Exemple
tous les classeurs ouverts Application.Calculate (ou simplement Calculate)
une feuille de calcul particulière Worksheets(1).Calculate
une plage déterminée Worksheets(1).Rows(2).Calculate
https://msdn.microsoft.com/en-us/librar ... 95517.aspx

Voilà, c'était pour préciser l'utilité du code et du sujet :wink:
"One and yet a mass"
COHENNY Tristan - Projet MYRMIDON
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message