Somme incrémentale en VBA - Excel 2007

Résolu
Pyvoudelet Messages postés 169 Date d'inscription   Statut Membre Dernière intervention   -  
Pyvoudelet Messages postés 169 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous ,

je voudrais réaliser une boucle en vba sou Excel 2007. Voici mon probleme :

Temps X F1 I

1 X1 F1 I1 = X1 * F1
2 X2 F2 I2 = X2 * F1 + X1 * F2
3 X3 F3 I3 = X3 * F1 + X2* F2 +X1 * F3
4 X4 F4 I4 = X4* F1 + X3 * F2 + X2* F2 + X1 * F4
... ... ... ...

Je voudrais calculé mes valeurs de I sur les 500 valeurs de temps.

Est ce que qqn pourrait me conseiller une boucle pour realiser cela?? ou autre chose .. car je m arrache les cheveux!! ...

merci!



--
Bienheureux ceux qui savent rire d'eux mêmes: ils n'ont pas finis de s'amuser!

8 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Marqué comme résolu par Pyvoudelet le 16/02/2011 à 14:43

    Pyvoudelet ça te fatigue de dire merci ?
    1
    1. Pyvoudelet Messages postés 169 Date d'inscription   Statut Membre Dernière intervention   12
       
      EXCUSE MOI !!! J etais encore en train de teste ta solution que j essaye d adapter a mon cas!!
      0
  2. Paf
     
    Bonjour,

    Pas compris ce qu'étaient les valeurs de temps . (X1,X2...?)

    En supposant que l'on commence en ligne 1 et que les "X" sont en colonne A et les "F" en colonne B, le résultat est donné en colonne C.
    à adapter selon les besoins:

    PrecProd = 0
    
    For i = 1 To 500
        prod = Cells(i, 1).Value * Cells(i, 2).Value
        Cells(i, 3).Value = prod + PrecProd
        PrecProd = PrecProd + prod
    Next


    Bonne journée
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    1/ta dernière ligne
    4 X4 F4 I4 = X4* F1 + X3 * F2 + X2* F2 + X1 * F4

    ne serait ce pas plutôt
    4 X4 F4 I4 = X4* F1 + X3 * F2 + X2* F3 + X1 * F4

    2/ Xn fn In : références de cellules? sinon ?

    Au besoin, mettre le classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
    http://cijoint.fr/
    et coller le lien proposé dans le message de réponse
    0
    1. Pyvoudelet Messages postés 169 Date d'inscription   Statut Membre Dernière intervention   12
       
      Oui tu as raison Michel, je m étais trompé dans la formule.

      voici le lien pour le fichier d exemple http://www.cijoint.fr/cjlink.php?file=cj201102/cijgLulF1X.xls

      J ai don un tableau. je voudrais pouvoir calculer les valeur de I pour 2000 valeur. cC est une boucle a exécuter juste une fois (peut être éventuellement avec une commande bouton mais ça je peux m en charge).

      J arrive pas a recréer l itération incrémentale avec mes boucles. avez vous une idée?? j avais pensé à deux boucle For imbriquées...
      0
  4. Paf
     
    heu....

    en voyant la réponse de michel_m, je m'aperçois que ma réponse est complètement hors sujet !!!

    Je vais réapprendre à lire .
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Paf
     
    Re,

    Si j'ai bien lu et tout compris 'cette fois) ça devrait être ça:

    For i = 1 To 500 
    
        temp = 0 
    
        For j = 1 To i 
            temp = temp + Cells(i + 1 - j, 1).Value * Cells(j, 2).Value 
        Next j 
         
        Cells(i, 3).Value = temp 
         
    Next i


    le tableau de valeurs commençant en ligne 1 colonnes A et B

    edit : pas vu le commentaire avant de poster, modifier boucle i=1 à 2000
    0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonsoir

    reste a modifier les constantes

    http://www.cijoint.fr/cjlink.php?file=cj201102/cijMd9W1a7.xls

    bonne suite
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      @paf

      desolé, pas vu le post 5
      0
    2. Pyvoudelet Messages postés 169 Date d'inscription   Statut Membre Dernière intervention   12
       
      est ce que ca va pas etre trop long pour 500 a 2000 itereation??
      0
    3. ccm81 Messages postés 11033 Statut Membre 2 434
       
      re
      si,
      - donc comme le propose eriic, au post 9, il faut travailler en memoire
      - une autre proposition qui fait les 2000 itérations en moins de 1 s.
      RQ. s a été déclaré en double (precision) , le type (entier) long de mon post précédent n'est peut etre pas adapté

      Private Sub CommandButton1_Click()     
      Const lideb = 3     
      Const lifin = 2002     
      Const cox = "B"     
      Const cof = "C"     
      Const coi = "E"     
      Dim t As Long, j As Long, nbli As Long     
      Dim s As Double     
      Dim tx, tf, ti     
        tx = Range(cox & lideb & ":" & cox & lifin)     
        tf = Range(cof & lideb & ":" & cof & lifin)     
        ti = Range(coi & lideb & ":" & coi & lifin)     
        nbli = lifin - lideb + 1     
        For t = 1 To nbli     
          s = 0     
          For j = 1 To t     
            s = s + tx(j, 1) * tf(t - j + 1, 1)     
          Next j     
          ti(t, 1) = s     
        Next t     
        Range(coi & lideb & ":" & coi & lifin).Value = ti     
      End Sub


      bonne suite
      0
  8. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    Une autre proposition par fonction personnalisée, qui calcule en mémoire (plus rapide).
    Function SommeIncrementale(plage As Range) As Double 
        Dim datas(), lig As Long, derlig As Long 
        If plage.Columns.Count <> 2 Then SommeIncrementale = 0 
        datas = plage 
        derlig = UBound(datas) 
        For lig = 1 To UBound(datas) 
            SommeIncrementale = SommeIncrementale + datas(lig, 1) * datas(derlig - lig + 1, 2) 
        Next lig 
    End Function

    Syntaxe :
    =sommeincrementale($B$3:$C4)
    $B$3:$C4 : plage des X,F
    à recopier vers le bas si besoin
    exemple : SommeIncrementale.xls

    eric

    PS: s'il faut systématiquement calculer toutes les valeurs on peut, toujours en travaillant en mémoire, le faire sous forme de sub ce qui sera encore plus rapide
    0
  9. Pyvoudelet Messages postés 169 Date d'inscription   Statut Membre Dernière intervention   12
     
    MErci a tous pour vos solutions, je vais voir celle que j arrive le mieux a adapter !
    0