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 If

merci 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 Sub

Hervé.

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
Comment faire comprendre à excel qu'il me faut la somme de ces valeurs + la constante term pour chaque ligne, c'est à dire

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.

13essai.xlsm (20.32 Ko)

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é...

Rechercher des sujets similaires à "optimisation boucle imbriquee"