Finance sous VBA

teammurc

XLDnaute Nouveau
Bonjour,
Nous rencontrons un problème dans un code VBA censé calculer un écart-type sur des données dynamiques, pour des dates n allant de 91 à 128. Chaque écart-type en n est calculé à partir d'une fenêtre glissante de 89 données "S" indexées sur i (i allant donc de 1 à 90).
La colonne D de notre feuille "Vol" comprend les données qui nous servent à calculer un rendement continu grâce à la formule:
r = log(St+1/St)
Avec S les données de la colonne D(début à la ligne 5).
Dans la colonne I nous souhaitons afficher ces rendements.
Dans la colonne H nous souhaitons afficher les écarts-types.

Cela nous donne donc le code suivant:


Function R_histo()
R_histo = Log(S1 / S)
End Function


Function Vol_histo()

Vol_histo = Application.WorksheetFunction.StDev(Range(Cells(k, l), Cells(k + 34, l)))

End Function


Sub Volhisto()

Sheets("Vol").Select

For n = 91 To 128
For i = 1 To 91

Set S = Range(Cells((n - i), 4), Cells((n - i - 90), 4))
Set S1 = Range(Cells((n - i), 4), Cells((n - i - 90), 4))

Next

Range(Cells(n - 85, 9), Cells(n - 51, 9)).Formula = R_histo(S, S1)
Set r = Range(Cells(n - 85, 9), Cells(n - 51, 9))

Range(Cells(n - 85, 8), Cells(n - 51, 8)).Formula = Vol_histo

Next
End Sub


Malheuresement, lorsque nous utilisons la macro nous rencontrons le problème suivant: "l'indice n'appartient pas à la sélection".

Si vous avez une idée quelconque, nous serons ravis d'en faire usage ! =)
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Finance sous VBA

Bonjour la Team et bienvenue, bonjour le forum,

Quand une macro plante il est plus facile de trouver pourquoi elle plante quand on sait qu'elle est la ligne qui pose propblème. Sinon il vaut mieux un petit exemple pour pouvoir la faire tourner...

Mais vu le code d'erreur je pense que ça pourrait venir de cette ligne :
Code:
Sheets("Vol").Select
Et que l'onglet Vol n'existe plus ou a été renommé...
 

tototiti2008

XLDnaute Barbatruc
Re : Finance sous VBA

Bonjour teammurc, Bonjour Robert :),

une autre idée :
Comme i vaut de 1 à 91
et n vaut de 91 à 128
il y a un moment où (n-i) vaut 0
Cells((n-i),4) va renvoyer une erreur car il n'y a pas de ligne 0 dans la feuille de calcul
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Finance sous VBA

Bonjour le fil, bonjour le forum,

Pas de bras, pas de chocolat disait Omar dans les Intouchables... "Pas de fichier, plus d'aide" dit Robert dans ce post... Marre des gens qui ne font aucun effort !
 

teammurc

XLDnaute Nouveau
Re : Finance sous VBA

Salut,
Désolés, on pensait que ce serait plus simple sans le fichier un peu lourd, mais si tu y tiens le voilà en pièce jointe. On a renommé "Vol" (qui n'avait ni été supprimée ni autre) en "Volatility" et "Volatilité" pour le nom affiché sur l'onglet dans excel.
Je te recopie tout de même le code :

Function R_histo()
R_histo = Log(S1 / S)
End Function


Function Vol_histo()

Vol_histo = Application.WorksheetFunction.StDev(Range(Cells(k, l), Cells(k + 37, l)))

End Function

Sub Volhisto()

Sheets("Volatilité").Select

For n = 91 To 128
For i = 1 To 90

Set S = Range(Cells((n - i - 90), 4), Cells((n - i), 4))
Set S1 = Range(Cells((n - i - 90), 4), Cells((n - i), 4))

Next

Range(Cells(n - 85, 9), Cells(n - 48, 9)).Formula = R_histo(S, S1)
Set r = Range(Cells(n - 85, 9), Cells(n - 48, 9))

Cells(n - 85, 8).Formula = Vol_histo(r)

Next
End Sub


Merci d'avance!
 

Pièces jointes

  • VBA Project Nikkei_essai.xlsm
    94.5 KB · Affichages: 69
  • VBA Project Nikkei_essai.xlsm
    94.5 KB · Affichages: 62
  • VBA Project Nikkei_essai.xlsm
    94.5 KB · Affichages: 62

Robert

XLDnaute Barbatruc
Repose en paix
Re : Finance sous VBA

Bonjour la Team, bonjour le forum,

En fait, on avait pas besoin de toutes ces données. Mais juste d'un exemple reprenant la structure de l'original et une poignée de donnée non condidentielles. Et surtout de savoir quelle ligne plante !
Bonjour teammurc, Bonjour Robert :),
une autre idée :
Comme i vaut de 1 à 91
et n vaut de 91 à 128
il y a un moment où (n-i) vaut 0
Cells((n-i),4) va renvoyer une erreur car il n'y a pas de ligne 0 dans la feuille de calcul
Il est aussi dommage que vous n'ayez pas tenu compte de la remarque de Tototiti, qui nous a lâchement abandonné (mais il a le droit vu qu'il a trouvé la solution)... Je lance la macro :
Code:
For n = 91 To 128
    For i = 1 To 90
       Set S = Range(Cells((n - i - 90), 4), Cells((n - i), 4))
Si je sais compter n = 91, i = 1, donc Set S = Range(Cells(91 -1 -90, 4) donne Range(Cells(0,4),... Et oui ça plante Tototiti ! Mais comme je suis encore moins doué que lui pour les volatilités je n'ai pas la solution.
Il vous faudra soit redéfinir la boucle n (de 92 à 128), soit la boucle i (de 0 à 90) soit remplacer 90 par 89...
 

Discussions similaires

Réponses
8
Affichages
682
Réponses
3
Affichages
2 K

Statistiques des forums

Discussions
312 496
Messages
2 088 982
Membres
103 997
dernier inscrit
SET2A