Alternative aux boucles imbriqués?
Bonjour,
Je buche sur un problème depuis un bout de temps et j'aimerai avoir votre avis.
J'ai un feuille avec plein de calcul sur environ 3000 lignes
Dans cette feuille, il y a 6 variables que je fais défiler une par une pour avoir toutes les combinaisons possibles.
Chaque combinaisons donne un résultat que j'inscris dans un coin de ma feuille.
J'ai donc crée un code avec 6 boucles imbriqués, cela fonctionne mais c'est hyper long,
Pr une vingtaine de combinaisons, il faut 8 min de calculs
Qd je fais varier les variables manuellement, le calcul se fait quasi instantanément.
Il y a t'il un souci avec mon code?
voici le code
Sub Maxi()
Dim i As Single, u As Integer, L As Integer, U2 As Integer, L2 As Integer, U3 As Integer, L3 As Integer
Dim P1MIN As Integer, P2MIN As Integer, P3MIN As Integer, P4MIN As Integer, P5MIN As Integer, P6MIN As Integer
Dim DP1 As Integer, DP2 As Integer, DP3 As Integer, DP4 As Integer, DP5 As Integer, DP6 As Integer
Dim P1MAX As Integer, P2MAX As Integer, P3MAX As Integer, P4MAX As Integer, P5MAX As Integer, P6MAX As Integer
Dim MAXG As Double, Ratiomini As Double, nbtrademini As Double, risquemax As Double
k = Timer
P1MIN = Range("d24") 'min Parametre 1'
P2MIN = Range("d25") 'min Parametre 2'
P3MIN = Range("d26") 'min Parametre 3'
P4MIN = Range("d27") 'min Parametre 4'
P5MIN = Range("d28") 'min Parametre 5'
P6MIN = Range("d29") 'min Parametre 6'
DP1 = Range("F24") 'pas Parametre 1'
DP2 = Range("F25") 'pas Parametre 2'
DP3 = Range("F26") 'pas Parametre 3'
DP4 = Range("F27") 'pas Parametre 4'
DP5 = Range("F28") 'pas Parametre 5'
DP6 = Range("F29") 'pas Parametre 6'
P1MAX = Range("E24") 'max Parametre 1'
P2MAX = Range("E25") 'max Parametre 2'
P3MAX = Range("E26") 'max Parametre 3'
P4MAX = Range("E27") 'max Parametre 4'
P5MAX = Range("E28") 'max Parametre 5'
P6MAX = Range("E29") 'max Parametre 6'
' risquemax = Range("e12")
nbtrademini = Range("c2")
'Ratiomini = Range("e13") 'valeur1 RATIO'
MAXG = 0 'valeur2 PERF'
i = Range("W11")
'Cells(14, 3).Value = 0
'turn updating off
' Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveSheet.Calculate
Beep
For u = P1MIN To P1MAX Step DP1
Range("C24") = u
For L = P2MIN To P2MAX Step DP2
Range("C25") = L
For U2 = P3MIN To P3MAX Step DP3
Range("C26") = U2
' For L2 = P4MIN To P4MAX Step DP4
' Range("C27") = L2
' For U3 = P5MIN To P5MAX Step DP5
' Range("C28") = U3
' For L3 = P6MIN To P6MAX Step DP6
' Range("C29") = L3
DoEvents
If Range("F11") >= MAXG And Range("D2") >= nbtrademini Then
'Cells(14, 3).Value = 1
' If Range("C9") < risquemax Then
Cells(50 + i, 1).Value = u
Cells(50 + i, 2).Value = L
Cells(50 + i, 3).Value = U2
' Cells(50 + i, 4).Value = L2
' Cells(50 + i, 5).Value = U3
' Cells(50 + i, 6).Value = L3
Cells(50 + i, 7).Value = Range("F11")
i = i + 1
'Cells(14, 3).Value = 0
End If
' Next
' Next
' Next
Next
Next
Next
MsgBox ("Durée : " & Timer - k)
'turn updating on
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End SubBonjour neoclassique,
Sans fichier il sera très (trop?) compliqué de t'aider. Surtout que tu ne nous dit pas à quoi sert ton programme, à quoi correspondent ces variables etc...
Pour moi le problème n°1, c'est de modifier la valeur des cellules de la feuille, récupérer le résultat d'une autre cellule et ainsi de suite. C'est extrêmement lourd et chronophage.
Passe tout part des variables
variable1 = 12
variable2 = formule(variable1)
etc....