XL 2016 VBA Matrice de Covariance tableau

james7734

XLDnaute Junior
Bonjour à tous,

Je possède un code VBA pour calculer une matrice de variance-covariance qui se lance grâce à un bouton. Le calcul se fait depuis les données dans l'onglet "Returns".
Cependant, je souhaite que mon code ne prenne pas en compte la colonne "A" de mon onglets "Returns".
J'ai essayer de remplacer les A2 par B2 mais j'ai une erreur!

VB:
tablo(i, j) = Application.Covar(.[A2].Offset(, i).Resize(n), .[A2].Offset(, j).Resize(n)) 'Calcul de la matrice synthétique

Je ne suis donc pas sur que c'est cela mais mon objectif est de ne pas prendre en compte la colonne A, autrement dit la colonne des dates.

Merci beaucoup de votre aide!
 

Pièces jointes

  • test.xlsm
    65.7 KB · Affichages: 12
Solution
Bonjour James,
Ecrit comme ça, ça ne génère pas d'erreur :
VB:
Private Sub CommandButton1_Click()
Dim n%, d%, tablo#(), i%, j%

With Sheets("Returns")
  n = Application.Count(.Columns(1))    'nombre de valeurs étudiées par titre
  d = Application.CountA(.Rows(1)) - 1  'nombre de titres (dimensions du tableau)
  ReDim tablo(d - 1, d - 1)
  For i = 0 To d - 1
    For j = i To d - 1
      tablo(i, j) = Application.Covar(.[B2].Offset(, i).Resize(n), .[B2].Offset(, j).Resize(n)) 'Calcul de la matrice synthétique
      tablo(j, i) = tablo(i, j)
    Next
  Next
End With

Range("E5").Resize(d, d) = tablo 'Coller valeurs de la matrice synthétique

End Sub
Je pense que la matrice de réception doit être carré.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour James,
Ecrit comme ça, ça ne génère pas d'erreur :
VB:
Private Sub CommandButton1_Click()
Dim n%, d%, tablo#(), i%, j%

With Sheets("Returns")
  n = Application.Count(.Columns(1))    'nombre de valeurs étudiées par titre
  d = Application.CountA(.Rows(1)) - 1  'nombre de titres (dimensions du tableau)
  ReDim tablo(d - 1, d - 1)
  For i = 0 To d - 1
    For j = i To d - 1
      tablo(i, j) = Application.Covar(.[B2].Offset(, i).Resize(n), .[B2].Offset(, j).Resize(n)) 'Calcul de la matrice synthétique
      tablo(j, i) = tablo(i, j)
    Next
  Next
End With

Range("E5").Resize(d, d) = tablo 'Coller valeurs de la matrice synthétique

End Sub
Je pense que la matrice de réception doit être carré.
 

danielco

XLDnaute Accro
Bonjour,

Essaie :

VB:
Private Sub CommandButton1_Click()
Dim n%, d%, tablo#(), i%, j%

With Sheets("Returns")
  n = Application.Count(.Columns(1)) 'nombre de valeurs étudiées par titre
  d = Application.CountA(.Rows(1)) 'nombre de titres (dimensions du tableau)
  ReDim tablo(d - 2, d - 2)
  For i = 0 To d - 2
    For j = i To d - 2
      tablo(i, j) = Application.Covar(.[A2].Offset(, i).Resize(n), .[A2].Offset(, j).Resize(n)) 'Calcul de la matrice synthétique
      tablo(i, j) = Application.Covar(.[B2].Offset(, i).Resize(n), .[B2].Offset(, j).Resize(n))
      tablo(j, i) = tablo(i, j)
    Next
  Next
End With

Range("E5").Resize(d - 1, d - 1) = tablo 'Coller valeurs de la matrice synthétique

End Sub

Cordialement.

Daniel
 

Dranreb

XLDnaute Barbatruc
Bonjour.
On peut aussi faire :
VB:
Private Sub CommandButton1_Click()
   Dim Rng As Range, AdrExt
   Set Rng = Feuil4.[A1].CurrentRegion
   Set Rng = Rng(2, 2).Resize(Rng.Rows.Count - 1, Rng.Columns.Count - 1)
   AdrExt = Rng.Address(True, True, xlR1C1, True)
   With Me.[E5].Resize(Rng.Rows.Count, Rng.Rows.Count)
      .FormulaR1C1 = "=COVAR(INDEX(" & AdrExt & ",0,ROW()-4),INDEX(" & AdrExt & ",0,COLUMN()-4))"
      .Value = .Value
      End With
   End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu