Optimisation boucle imbriquee
Bonjour à tous,
je cherche à optimiser une boucle imbriquée svp. Voici le code :
For I = 1 To 4
For J = 1 To 7
Pred = (ws1.Cells(12, 4 + J) - ws1.Cells(12, 3 + J)) * ws2.Cells(18 - I, 5 + J)
If I = 1 And Pred <> 0 Then
Coef1 = Pred + Coef1
PredCU = Application.Sum(term, Coef1)
MsgBox PredCU
End If
Next J
Next I
Je recherche à récupérer la somme des résultats de Pred ligne par ligne (de I=1 à I=4) mais en évitant de mettre If I=1.... If I=2...term étant une constante quelconque.
Merci pour les âmes charitables qui sauront m'aider.
Cdlt
Bonjour,
Je ne suis pas sûr d'avoir bien compris. Avec une variable qui totalise :
...
Pred = (ws1.Cells(12, 4 + J) - ws1.Cells(12, 3 + J)) * ws2.Cells(18 - I, 5 + J)
TotalPred = TotalPred + Pred
...Hervé.
bjr,
d'accord avec toi mais comment obtenir uniquement la somme pour I=1 et ensuite I=2..... etc jusque 4 pour pouvoir réutiliser ces valeurs ds une nouvelle fonction.
Parceque là si je somme avec ton exemple, il va sommer l'ensemble des résultats de i=1 à i=4 et cela je n'en ai pas besoin.
j'ai trouvé une solution qui n'est pas très propre et je voudrais savoir si je peux eviter les if i=1.;.if i=2......etc.:
For I = 1 To 4
For J = 1 To 7
Pred = (ws1.Cells(12, 4 + J) - ws1.Cells(12, 3 + J)) * ws2.Cells(18 - I, 5 + J)
[b]If I = 1 And Pred <> 0 Then
Coef1 = Pred + Coef1
PredCU = Application.Sum(term, Coef1)
End If[/b] If I = 2 And Pred <> 0 Then
Coef2 = Pred + Coef2
PredMU = Application.Sum(term, Coef2)
End Ifmerci qd même...
Bonjour,
Donc dans ce cas, utilise un tableau. Adapte le code ci-dessous :
Sub Test()
Dim Tbl() As Double
Dim Pred As Double
Dim I As Integer
Dim J As Integer
Dim K As Integer
For I = 1 To 4
For J = 1 To 7
Pred = (ws1.Cells(12, 4 + J) - ws1.Cells(12, 3 + J)) * ws2.Cells(18 - I, 5 + J)
K = K + 1
ReDim Preserve Tbl(1 To K)
Tbl(K) = Pred
If I = 1 And Pred <> 0 Then
Coef1 = Pred + Coef1
PredCU = Application.Sum(term, Coef1)
MsgBox PredCU
End If
Next J
Next I
For I = 1 To UBound(Tbl)
MsgBox Tbl(I)
Next I
End SubHervé.
Salut Hervé,
Merci pour ce code, mais il ne me donne pas les résultats escomptés.
Je m'explique, la variable Pred donne 2 résultats pour chaque I en effectuant les boucles, le reste étant nul (d'ou l'ajout du If Pred <>0).
Par exemple :
- ligne I=1 j'ai un premier résultat qui est égal à 5.28 et le second à 10.92
- ligne I=2 : 4.44 et 7.56
- ligne I=3 : 5.4 et 14.7
- ligne I=4 : 4.08 et 13.02
1er résultat attendu : (5.28+10.92)+term
2nd résultat attendu : (4.44+7.56)+term
etc...
j'ai en effet besoin de réutiliser ces résultats dans un nouveau calcul qui utilisera tjrs une boucle de 1 à 4 et je me dis autant ne pas en refaire une et utiliser si possible une variable indicée ou autre ? j'avoue les tableaux je ne connais pas.
vu Post resté ouvert alors que le cas est partiellement resolu,
en effet j'ai utilisé une variable tableau indicé à chaque i pour récupérer les résultats après chaque if i=1.....if i=2.....if i=3......if i=4.
cela fonctionne comme je le désire, même s'il y avait peut etre moyen de raccourcir ce code.
Le cas est résolu, le fichier précédent fait apparaitre les if i=1... etc seul la variable indicé à i n'existe pas [mais rien de bien compliqué dc nul besoin de remettre un fichier]
merci qud même hervé...