Bonjour,
Je viens vous demander votre aide car après avoir cherché partout et m'être arraché les cheveux hier, aujourd'hui, ca ne fonctionne toujours pas...
La macro ci-dessous plante pour un "incompatibilité type" au niveau de la fonction Alpha Jensen, lorsque je lance la sub.
Si je désactive la function dans la sub, tout toutrne correctement (autres sub appelées et autre fonction).
Merci de votre aide.
bonne journée
Sub jensen()
Dim jensen As Variant
Dim rg_jensen As Variant
Dim beta As Variant
Dim funds As Variant
Dim rr As Variant
Dim rma As Variant
Application.Calculation = xlCalculationManual
nb_actions = ThisWorkbook.Worksheets.Count - 10
nb_periodes = ThisWorkbook.Worksheets("Titre" ).Range("F2" ).Value - 36
ReDim rg_jensen(10, nb_actions)
refer = InputBox("Choississez l'indice de référence du calcul des Betas (S&P 500, Emerging markets Index...), en entrant le code yahoo!Finance de l'indice Choisi", "Choix de l'indice de référence", "^GSPC" )
risk = InputBox("Choississez l'indice de référence indiquant le Taux sans Risque (T-Bills, OAT, Bunds...), en entrant le code yahoo!Finance de l'indice Choisi", "Choix de l'indice de référence", "^IRX" )
Set rg_market = Range("C3" ).Resize(35, 1)
Set rg_fund = Range("D3" ).Resize(35, 1)
Set rg_risk = Worksheets(risk).Range("E3" ).Resize(35, 1)
rma = rg_market.Value
rr = rg_risk.Value
funds = rg_fund.Value
j = 0
For Each Feuille In ThisWorkbook.Worksheets
If Feuille.Name = "Titre" Then GoTo FIN
Feuille.Activate
Call Calcule_Beta
j = j + 1
Set rg_fund = Range("K3" ).Resize(89, 1)
Set rg_bet = Range("N3" ).Resize(89, 1)
Set rg_market = Worksheets(refer).Range("K3" ).Resize(89, 1)
Set rg_risk = Worksheets(risk).Range("K3" ).Resize(89, 1)
bet = rg_bet.Value
rma = rg_market.Value
rr = rg_risk.Value
funds = rg_fund.Value
For i = 1 To 10
rg_jensen = fnAlpha(rg_jensen, funds, rma, rr, bet, i, j)
Next i
Next Feuille
FIN:
Worksheets("Alpha de Jensen" ).Activate
Range("A3" ).Select
Range(Selection, Selection.Offset(10, nb_actions)).Value = rg_jensen
Application.Calculation = xlCalculationAutomatic
End Sub
Function fnAlpha(rg_jensen, funds, rma, rr, bet, i, j)
rg_jensen(i, j) = (funds(i, 1)) - (rr(i, 1) + (bet(i, 1) * (rma(i, 1) - rr(i, 1))))
End Function
Sub Calcule_Beta()
Dim rg_rm As Range
Dim rg_fond As Range
Dim rg_beta As Range
Dim marché As Variant
Dim fond As Variant
Dim beta As Variant
ReDim modi(36, 1)
For i = 1 To nb_periodes
Set rg_fond = ActiveSheet.Range("G2" ).Resize(36, 1).Offset(i - 1, 0)
Set rg_beta = ActiveSheet.Range("N2" ).Resize(1, 1).Offset(i - 1, 0)
Set rg_rm = Worksheets((refer)).Range("G2" ).Resize(36, 1).Offset(i - 1, 0)
marché = rg_rm.Value
fond = rg_fond.Value
beta = fnBeta(fond, marché)
rg_beta.Value = beta
Next i
End Sub
Function fnBeta(fond, marché)
fnBeta = WorksheetFunction.Covar(fond, marché) / WorksheetFunction.VarP(marché)
End Function
Message édité par metalikal le 27-05-2011 à 13:22:19