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!
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:
- Somme incrémentale en VBA - Excel 2007
- Formule somme excel colonne - Guide
- Save as pdf office 2007 - Télécharger - Bureautique
- Liste déroulante excel - Guide
- Somme si couleur excel - Guide
- Somme en anglais excel - Guide
8 réponses
Marqué comme résolu par Pyvoudelet le 16/02/2011 à 14:43
Pyvoudelet ça te fatigue de dire merci ?
Pyvoudelet ça te fatigue de dire merci ?
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!!
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:
Bonne journée
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
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...
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 .
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:
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
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
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é
bonne suite
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).
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
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