• Initiateur de la discussion Initiateur de la discussion teammurc
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

T

teammurc

Guest
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 ! =)
 
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é...
 
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
 
Re : Finance sous VBA

Hep,
Merci beaucoup pour vos réponses.
Nous venons de modifier le code en prenant vos idées en comptes, malheureusement maintenant nous obtenons "l'erreur vient de l'application ou de l'objet". Une autre idée ?
 
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

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...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
737
Réponses
5
Affichages
747
Réponses
8
Affichages
1 K
M
Réponses
4
Affichages
973
mimich_88
M
Y
Réponses
1
Affichages
793
L
Réponses
1
Affichages
1 K
Retour