Sélectionner une colonne d'une range stockée dans une fonction
bonjour,
je cherche à créer une fonction qui calcule la matrice de variance covariance de différents actifs financiers.
A partir d'une range de prix des actifs, je crée une range des rendements de ces actifs
Je veux pouvoir sélectionner la colonne i de ces rendements
voilà mon code
Function covarmat(prices As Range) As Variant
Dim temparray1() 'matrice de variance covariance provisoire
Dim returnArray() 'matrice des rendements
Dim returnArrayFinal As Range 'stockage de la matrice des rendements
Dim i, j As Integer
ReDim temparray1(prices.Columns.Count, prices.Columns.Count)
ReDim returnArray(prices.Rows.Count - 1, prices.Columns.Count) 'la matrice des rendements comportent une ligne en moins que la matrice des prix
'calcule de la matrice des rendements, tout marche jusqu'ici
For i = 1 To prices.Columns.Count
For j = 1 To prices.Rows.Count - 1
returnArray(j, i) = prices(j + 1, i) / prices(j, i) - 1
Next j
Next i
returnArrayFinal = returnArray
For i = 1 To prices.Columns.Count
For j = 1 To prices.Columns.Count
temparray1(i, j) = Application.WorksheetFunction.Covariance_S(returnArrayFinal.Columns(i), returnArrayFinal.Columns(j)) 'c'est ici que j'ai un problème, car je n'arrive pas à sélectionner les colonnes numéro i et j de la matrice des rendements ::(
Next j
Next i
covarmat = temparray1 'quand j'entre cette fonction je retrouve uniquement des #VALEURS
End Functionbonsoir,
proposition (je ne suis pas sûr ne me pas m'être embrouillé dans les lignes et les colonnes)
Function covarmat(prices As Range) As Variant
Dim temparray1() 'matrice de variance covariance provisoire
Dim returnArray() 'matrice des rendements
Dim tempcolarray() 'matrice temporaire pour stocker les valeurs d' une colonne de la matrice returnarray
Dim i, j As Integer
ReDim temparray1(1 To prices.Columns.Count, 1 To prices.Columns.Count)
ReDim returnArray(prices.Columns.Count) 'la matrice des rendements comportent une ligne en moins que la matrice des prix
ReDim tempcolarray(prices.Rows.Count - 1)
'calcule de la matrice des rendements, tout marche jusqu'ici
For j = 1 To prices.Columns.Count
For i = 1 To prices.Rows.Count - 1
tempcolarray(i) = prices(j + 1, i) / prices(j, i) - 1
Next i
returnArray(j) = tempcolarray
Next j
returnArrayFinal = returnArray
For i = 1 To prices.Columns.Count
For j = 1 To prices.Columns.Count
temparray1(i, j) = Application.WorksheetFunction.Covariance_S(returnArray(i), returnArray(j))
Next j
Next i
covarmat = temparray1
End Functionmerci, je teste ça au mieux et je reviens demain si je bloque toujours
Alors j'ai du ajuster les i et les j mais sinon tout fonctionne parfaitement
merci
Function covarmat(prices As Range) As Variant
Dim temparray1() 'matrice de variance covariance provisoire
Dim returnArray() 'matrice des rendements
Dim tempcolarray() 'matrice temporaire pour stocker les valeurs d' une colonne de la matrice returnarray
Dim i, j As Integer
ReDim temparray1(1 To prices.Columns.Count, 1 To prices.Columns.Count)
ReDim returnArray(prices.Columns.Count)
ReDim tempcolarray(prices.Rows.Count - 1)
For j = 1 To prices.Columns.Count
For i = 1 To prices.Rows.Count - 1
tempcolarray(i) = prices(i + 1, j) / prices(i, j) - 1
Next i
returnArray(j) = tempcolarray
Next j
For i = 1 To prices.Columns.Count
For j = 1 To prices.Columns.Count
temparray1(i, j) = Application.WorksheetFunction.Covariance_S(returnArray(i), returnArray(j))
Next j
Next i
covarmat = temparray1
End FunctionJe n'ai pas un niveau très élevé en excel, pourquoi mettre temparray1(1 To prices.Columns.Count, 1 To prices.Columns.Count) plutôt que temparray(prices.columns.count; prices.columns.count)
(je viens de vérifier les deux marchent)
bonjour
Je n'ai pas un niveau très élevé en excel, pourquoi mettre temparray1(1 To prices.Columns.Count, 1 To prices.Columns.Count) plutôt que temparray(prices.columns.count; prices.columns.count)
(je viens de vérifier les deux marchent)
par défaut les indices des tableaux commencent à 0 (sauf si tu utilises le paramètre option base 1 en debut de module), et tu te retrouves avec les premières lignes et les premières colonnes de ton tableau avec des valeurs nulles si tu n'utilises pas l'indice 0. Comme tu le dis les 2 options fonctionnent, mais si tu utilises la fonction comme fonction personnalisée excel, elle va t'afficher cette ligne et cette colonne inutile.