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 -
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!
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
-
Marqué comme résolu par Pyvoudelet le 16/02/2011 à 14:43
Pyvoudelet ça te fatigue de dire merci ? -
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 -
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
-
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...
-
-
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 . -
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 -
bonsoir
reste a modifier les constantes
http://www.cijoint.fr/cjlink.php?file=cj201102/cijMd9W1a7.xls
bonne suite-
-
-
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
-
-
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 -
MErci a tous pour vos solutions, je vais voir celle que j arrive le mieux a adapter !