Matrice covariance à l'aide de vba... !

1ma9

XLDnaute Nouveau
Bonjour à tous,

je viens vous demander un petit coup de pouce...

J'ai plus de 500 valeurs à traiter... et donc une matrice 500*500

en fait cette matrice est une matrice de covariance...

pour 4 valeurs ce serait :

cov (1.1) cov (2.1) cov (3.1) cov (4.1)
cov (1.2) cov (2.2) cov (3.2) cov (4.2)
cov (1.3) cov (2.3) cov (3.3) cov (4.3)
cov (1.4) cov (2.4) cov (3.4) cov (4.4)

1 = les cours du titre 1
2 = les cours du titre 2
3= les cours du titre 3
4= le cours du titre 4

cependant je ne me vois pas rentrer les 500*500 formules dans excel... j'aimerai passer par vba... mais je ne dispose pas d'un bagage assez élevé pour le réaliser seul... y'en a t'il qui pourrait me donner une idee de code ?

merci a vous internautes... !
 

Pièces jointes

  • test.zip
    18.3 KB · Affichages: 82
  • test.zip
    18.3 KB · Affichages: 82
  • test.zip
    18.3 KB · Affichages: 81
Dernière édition:

1ma9

XLDnaute Nouveau
Re : Matrice covariance à l'aide de vba... !

Merci c'est gentil d'y préter attention ... ! la formul dans excel c'est = covariance (cours titre1; cours titre 2)

je t'envoie un fichier ou je viens de le commencer pour 12 valeurs afin de tester mon optimisation en message privé
 

1ma9

XLDnaute Nouveau
Re : Matrice covariance à l'aide de vba... !

Je viens de rajouter un piece jointe avec un test pour 12 valeurs !! :)
 

Pièces jointes

  • test.zip
    18.3 KB · Affichages: 90
  • test.zip
    18.3 KB · Affichages: 92
  • test.zip
    18.3 KB · Affichages: 91
Dernière édition:

job75

XLDnaute Barbatruc
Re : Matrice covariance à l'aide de vba... !

Re,

Merci pour le fichier, voici la macro :

Code:
Private Sub CommandButton1_Click()
Dim n%, d%, tablo#(), i%, j%
With Sheets("test 12")
  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 - 1, d - 1)
  For i = 0 To d - 1
    For j = i To d - 1
      tablo(i, j) = Application.Covar(.[A2].Offset(, i).Resize(n), .[A2].Offset(, j).Resize(n))
      tablo(j, i) = tablo(i, j)
    Next
  Next
End With
Rows("2:65536").ClearContents
Range("A2").Resize(d, d) = tablo [COLOR="Red"]'si d > 256 utiliser Excel 2007[/COLOR]
End Sub

Elle se trouve dans le code de Feuil1 (clic droit sur l'onglet et Visualiser le code).

Attention, si le nombre de titres dépasse 256, utiliser Excel 2007 !

Fichier joint.

A+
 

Pièces jointes

  • Matrice Covariances(1).zip
    26.4 KB · Affichages: 228

job75

XLDnaute Barbatruc
Re : Matrice covariance à l'aide de vba... !

Re,

Le calcul est là :

Code:
tablo(i, j) = [COLOR="Red"]Application.Covar(.[A2].Offset(, i).Resize(n), .[A2].Offset(, j).Resize(n))[/COLOR]
tablo(j, i) = tablo(i, j)

L'expression en rouge calcule (la fonction COVAR, c'est en anglais la fonction COVARIANCE) la covariance de la paire de titres repérée par i et j.

La valeur obtenue est entrée dans un tableau VBA (symétrique), qui quand il a été complètement rempli est copié dans la feuille.

Cette manière de faire est beaucoup plus rapide que de remplir les cellules de la feuille une par une :)

A+
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote