Somme incrémentale en VBA - Excel 2007

Résolu/Fermé
Pyvoudelet Messages postés 166 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 18 mai 2020 - 15 févr. 2011 à 16:39
Pyvoudelet Messages postés 166 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 18 mai 2020 - 16 févr. 2011 à 16:14
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!





A voir également:

8 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
16 févr. 2011 à 16:10
Marqué comme résolu par Pyvoudelet le 16/02/2011 à 14:43

Pyvoudelet ça te fatigue de dire merci ?
1
Pyvoudelet Messages postés 166 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 18 mai 2020 12
16 févr. 2011 à 16:14
EXCUSE MOI !!! J etais encore en train de teste ta solution que j essaye d adapter a mon cas!!
0
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 févr. 2011 à 17:20
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
Pyvoudelet Messages postés 166 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 18 mai 2020 12
15 févr. 2011 à 20:41
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
15 févr. 2011 à 22:26
bonsoir

reste a modifier les constantes

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

bonne suite
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
15 févr. 2011 à 22:28
@paf

desolé, pas vu le post 5
0
Pyvoudelet Messages postés 166 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 18 mai 2020 12
15 févr. 2011 à 22:45
est ce que ca va pas etre trop long pour 500 a 2000 itereation??
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 16/02/2011 à 09:42
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 16/02/2011 à 00:01
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
Pyvoudelet Messages postés 166 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 18 mai 2020 12
16 févr. 2011 à 16:14
MErci a tous pour vos solutions, je vais voir celle que j arrive le mieux a adapter !
0