Bonjour,

J'ai fait un programme VBA permettant d'obtenir la valeur moyenne de 1000 valeurs simulées.
Pour cela je simule 1000 fois une feuille Excel en fonction de différents paramètres pour récupérer la valeur d'une cellule puis je fais la moyenne.

Le souci est que le calcul de beaucoup de pages Excel prend beaucoup de temps, j'ai pu améliorer le code avec des astuces trouvées sur internet mais je n'arrive plus à améliorer le temps d'exécution du programme.
J'ai pensé à faire un programme qui permettrais de ne plus à avoir à passer par les feuilles Excel mais le problème c'est que je risque d'apporter souvent des modifications sur la feuille ce qui obligerai à modifier le code, de cela me prendrait beaucoup de temps car la feuille Excel est assez complexe.

C'est pour ça que je viens vous demander des idées ou des conseils pour améliorer mon code actuel.

Merci beaucoup à tous ce qui pourrait m'aider.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
Public Sub simulation()
 
 
    Dim nbsim As Integer
    Dim values(1 To 1000) As Long
 
    nbsim = 1000
 
 
 
            Sheets("Ctrl_T120_A58").Activate
 
 
               Dim debut As Date, temps As Date, fin As Date
            debut = Time
 
 
    Application.ScreenUpdating = False
 
 
            'Simulation des feuilles excel puis récupération de la valeur dans un vecteur
 
            For I = 1 To nbsim
 
                Range("sim").Select
                ActiveCell.FormulaR1C1 = I
                ActiveSheet.Calculate
 
                values(I) = Range("noinet").Value
 
            Next
 
 
     Application.ScreenUpdating = True
 
 
        'Calcul de la moyenne
 
        Dim Sum As Double
        Sum = 0
 
        For L = 1 To 1000
 
          Sum = Sum + values(L)
 
        Next L
 
     Range("nbvnet").Value = Sum / 1000
 
 
 fin = Time
 temps = fin - debut
 MsgBox ("C'est fini !" & Chr(10) & "temps de traitement " & temps)
 
 
End Sub