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