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 Function

bonsoir,

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 Function

merci, 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 Function

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)

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.

Rechercher des sujets similaires à "selectionner colonne range stockee fonction"