Bonjour,

Je cherche à accélérer une macro faisant des calculs en chaine.
Chaque ligne de ma feuille Excel effectue un calcul distinct, prenant entre 1.33 s et 1.37 s, chacun.
Cependant, je m’apprête à utiliser : 180000*5=900000 lignes (et peut être encore plus par la suite, auquel cas j'emplirai toutes les lignes disponibles).
Donc un total de plus de 330h.

Ma feuille de calcul contient de nombreuses cellules se recalculant à chaque ligne :
- les cellules de calcul 19 à 59 sont utiles aux itérations de la ligne en cours
- les 24 cellules suivantes et les 7 précédentes n’ont pas besoin de se mettre à jour
=> j'aimerais bloquer le recalcul automatique des cellules, sauf celles qui me servent précisément, ainsi, je pense que cela diminuerai la consommation

Si au lieu d'utiliser des cellules avec formules je saisissais tout en VBA, serait-ce un gain de performances ?
Est-ce que arrêter la macro de temps en temps et redémarrer l'ordinateur peut provoquer un gain de performances ?

Merci d'avance pour votre aide

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub calcul_2()
'MBE
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Dim start As Single
Dim nbcalculs As Double
start = Timer
nbcalculs = Feuil7.Cells(3, 1).Value
For a = 4 To nbcalculs
    If Feuil7.Cells(a, 18) = "" Then
        Tinf = 20: Tsup = 1199
        Feuil7.Cells(a, 18) = 0
        Feuil7.Rows(a:a).Calculate 'je voudrais que seule la ligne en cours se recalcule. Dans l’idéal uniquement de la colonne 19 à la colonne 59 inclues
    Do While (Tsup - Tinf) > 1
        Feuil7.Cells(a, 25) = (Tinf + Tsup) / 2
    If Feuil7.Cells(a, 60) < 1 And Feuil7.Cells(a, 19) < 1 Then
        Tinf = (Tinf + Tsup) / 2
    Else
        Tsup = (Tinf + Tsup) / 2
    End If
    Loop
        t1 = (Tinf + Tsup) / 2
        Feuil7.Cells(a, 18) = Format(t1, 0)
        Feuil7.Cells(1, 18) = a / Feuil7.Cells(3, 1).Value 'Cette fonction écrit le pourcentage d'avancement global
    End If
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "Durée : " & Timer - start & " secondes"
End Sub