Somme sur des colonnes

Bonjour,

J'ai fais un programme qui doit calculer la somme de plusieurs colonnes et afficher le resultat de chacune des sommes dans une cellule specifique.

Voici mon programme:

Sub trajectoire()

Sheets("Feuil1").Activate

Dim r As Double

Dim sigma As Double

Dim n As Integer

Dim So As Integer

Dim i As Integer

Dim k As Integer

Dim j As Integer

Dim dt As Double 'pas de discrétisation'

Dim i1 As Double 'indice des Xt pour calculer la somme et l'integrale de Su'

'declaration des paramètres'

r = InputBox("Saisissez le taux")

sigma = InputBox("Saisissez la volatilité")

n = InputBox("Saisissez le nombre de ligne ou points") '5000'

So = InputBox("Saisissez la valeur initiale")

dt = Val(InputBox("Saisissez le pas de discrétisation")) 'dt = 0.00001'

k = InputBox("Saisissez le nombre de colonnes") 'k=10'

For j = 1 To k

For i = 2 To n - 1

Cells(1, j).Value = "St+" & j 'On part de la valeur initiale'

Cells(1, j + k).Value = "Xt"

Cells(2, j).Value = So 'On part de la valeur initiale'

Cells(i + 1, j).Value = Cells(i, j).Value + Cells(i, j).Value * r * dt + (Cells(i, j).Value) ^ 1.5 * sigma * (dt) ^ 0.5 * Application.WorksheetFunction.Norm_Inv(Rnd(), 0, 1)

Next i

Next j

'QUESTION 2'

'Calculons les Xt'

For i = k + 1 To 2 * k + 1

For j = 1 To k

Cells(2, i).Value = Application.sum(Cells(, j).Value)

Next j

Next i

End Sub

Malheuresement la somme est pas calculée comme je le voudrai et rien n'est affiché, je galere trop, quelqu'un peut m'aider s'il vous plaît?

Bonjour

Remplaces la ligne

Cells(2, i).Value = Application.Sum(Cells(, j).Value)

Par

Cells(2, i).Value = Application.Sum(Columns(j))

Une astuce : Quand tu postes du code utilises les balises Code (au dessus à gauche de la fenêtre de saisie)

Merci pour ta reponse, j'ai bien remplace par ce t'as mis mais ca m'affiche toujours #VALEUR# partout...


Banzai64 a écrit :

Bonjour

Remplaces la ligne

Cells(2, i).Value = Application.Sum(Cells(, j).Value)

Par

Cells(2, i).Value = Application.Sum(Columns(j))

Une astuce : Quand tu postes du code utilises les balises Code (au dessus à gauche de la fenêtre de saisie)

En faite non j'avais pas bien remplacé, cette fois j'ai bien fait comme tu dis sauf que la somme ne coïncide pas avec ce qui est marque et de plus les resutats retournés sont identiques partout alors que ca ne devarit pas etre le cas.

Pourrais tu exécuter le script de ton coté stp?

Personne pour m'aider?

Bonsoir

Regardes la macro de "Trajectoire Ter"

Merci ca marche


est ce que vous connaissez la fonction sur vba pour calculer le max entre 2 valeurs?

Bonsoir

Comme la formule XL

LeMax = Application.Max(Range("A1"), Range("A2"))
Banzai64 a écrit :

Bonsoir

Regardes la macro de "Trajectoire Ter"

merci est ce que tu connais le moyen de calculer le max entre 2 valeurs j'ai essayer Application.WorksheetFunction.Max() mais ca ne renvoie pas le resultat espéré

Et sinon pour la macro précedente j'ai trouvé un moyen (par hasard j'avoue) de calculer les sommes.

Ensuite j'ai diviser cette somme par le nombre de valeurs pris pour calculer la somme dans ton algo c'etait 5000 j'ai donc diviser chaque somme par 5000.

La je veux calculer le max((somme/5000)-95,0)*exp(-0.05)

As tu une idée? $

ci dessous ma macro

Sub trajectoire()

Sheets("Feuil4").Activate

Dim r As Double

Dim sigma As Double

Dim n As Integer

Dim So As Integer

Dim i As Integer

Dim K As Integer

Dim j As Integer

Dim dt As Double 'pas de discrétisation'

Dim i1 As Double 'indice des Xt pour calculer la somme et l'integrale de Su'

Dim T As Integer

Dim K1 As Integer

Dim nbi As Double

'declaration des paramètres'

r = InputBox("Saisissez le taux")

sigma = InputBox("Saisissez la volatilité")

n = InputBox("Saisissez le nombre de ligne ou points") 'n=10000'

'nbi = InputBox("Combien d'intervalles pour la discrétisation?")'

T = InputBox("saisissez la maturité") 'T=1'

So = InputBox("Saisissez la valeur initiale")

'dt = Val(InputBox("Saisissez le pas de discrétisation"))' 'dt = 0.00001'

dt = T / n

MsgBox (" le pas de discrétisation est " & dt)

K = InputBox("Saisissez le nombre de colonne") 'K=10'

K1 = InputBox("Saisissez le strike") 'K1=95'

For j = 1 To K

For i = 2 To n - 1

Cells(1, j + K).Value = "Xt"

Cells(1, j).Value = "St+" & j 'On part de la valeur initiale'

Cells(2, j).Value = So 'On part de la valeur initiale'

Cells(i + 1, j).Value = Cells(i, j).Value + Cells(i, j).Value * r * dt + (Cells(i, j).Value) ^ 1.5 * sigma * (dt) ^ 0.5 * Application.WorksheetFunction.Norm_Inv(Rnd(), 0, 1)

'Calcul des Xt'

Cells(2, j + K).Value = Application.sum(Columns(j)) / n

'Calcul du payoff'

Cells(3, j + K).Value = Application.WorksheetFunction.Max(Cells(2, j + K).Value - K, 0) 'Exp(-r * T) '

'Calcul du prix de l'option'

'MsgBox (" Le prix de l'option est " & )'

Next i

Next j

End Sub

Bonsoir

Il me semble te l'avoir dit que les formules je n'y connaissais rien

Banzai64 a écrit :

Une astuce : Quand tu postes du code utilises les balises Code (au dessus à gauche de la fenêtre de saisie)

C'est plus facile à lire

Voir la macro "Trajectoire4"

Banzai64 a écrit :

Bonsoir

Il me semble te l'avoir dit que les formules je n'y connaissais rien

Banzai64 a écrit :

Une astuce : Quand tu postes du code utilises les balises Code (au dessus à gauche de la fenêtre de saisie)

C'est plus facile à lire

Voir la macro "Trajectoire4"

mercii!!

Dsl derniere question est -il possible de calculer la moyenne d'une serie de donnée rangé en ligne sans utilise les range?

J'aimerais calculer la moyennes sur les differents resultats obtenus avec max((somme/5000)-95,0)*exp(-0.05).

le pb c'est dans ma macro on ne sait pas dans quelle colonne se trouvera les resultats, le but etant que l'utilisateur final choisisse lui même les paramètres qu'il veut.

Sub trajectoire()

Sheets("Feuil1").Activate

Dim r As Double

Dim sigma As Double

Dim n As Integer

Dim So As Integer

Dim i As Integer

Dim K As Integer

Dim j As Integer

Dim dt As Double 'pas de discrétisation'

Dim i1 As Double 'indice des Xt pour calculer la somme et l'integrale de Su'

Dim T As Integer

Dim K1 As Double

'declaration des paramètres'

r = InputBox("Saisissez le taux")

sigma = InputBox("Saisissez la volatilité")

n = InputBox("Saisissez le nombre de ligne ou points") 'n=10000'

'nbi = InputBox("Combien d'intervalles pour la discrétisation?")'

'T = InputBox("saisissez la maturité")' 'T=1'

So = InputBox("Saisissez la valeur initiale")

dt = Val(InputBox("Saisissez le pas de discrétisation")) ' 'dt = 0.00001'

'dt = T / n'

'MsgBox (" le pas de discrétisation est " & dt)'

K = InputBox("Saisissez le nombre de colonne") 'K=10'

K1 = InputBox("Saisissez le strike") 'K1=95'

For j = 1 To K

For i = 2 To n - 1

Cells(1, j + K).Value = "Xt"

Cells(1, j).Value = "St+" & j 'On part de la valeur initiale'

Cells(2, j).Value = So 'On part de la valeur initiale'

Cells(i + 1, j).Value = Cells(i, j).Value + Cells(i, j).Value * r * dt + (Cells(i, j).Value) ^ 1.5 * sigma * (dt) ^ 0.5 * Application.WorksheetFunction.Norm_Inv(Rnd(), 0, 1)

'Calcul des Xt'

Cells(2, j + K).Value = Application.sum(Columns(j)) / n

'Calcul du payoff'

Cells(3, j + K).Value = Application.Max(Cells(2, j + K).Value - K1, 0) * Exp(-r)

'Calcul du prix de l'option'

'MsgBox (" Le prix de l'option est " & )'

Next i

Next j

End Sub

le prix de l'option est donné par la moyenne de tout les resultats justement..

Rechercher des sujets similaires à "somme colonnes"