Produits de deux matrices - VBA

mimy

XLDnaute Occasionnel
Bonjour à toutes et à tous,

Je voudrais faire le produit de deux matrices et coder une fonction sous VBA permettant de le faire. Et mettre un bouton qui affichera la matrice.
J ai pas mal de mal en vba donc je me tourne vers vous...

exemple:
-----A------------D------E-----F
1:__0.06___et ___1_____0.3___0.2
2:__0.02___et ___0.3___1_____0.4
3:__0.12___et ___0.2___0.4___1


Je voudrais obtenir la matrice suivante:
A1*A1*D1___A1*A2*E1___A1*A3*F1
A2*A1*D2___A2*A2*E2___A2*A3*F2
A3*A1*D3___A3*A2*E3___A3*A3*F3


Je vous remercie beaucoup
 

mimy

XLDnaute Occasionnel
Re : Produits de deux matrices - VBA

Bonsoir,

Désolée de vous déranger encore une fois.

J ai notamment une question.

Je voudrais faire l'inverse de la matrice que l'on obtiend mais toujours 3 lignes après l obtention de la matrice variance-covariance.
Dans un second temps je voudrais afficher à coté de la matrice inverse 2 colonnes après la fin de la matrice inverse, une colonne de 1 (avec le même nombre de lignes que la matrice inverse) et faire le produit matricielle de la matrice inverse avec cette colonne de 1 (résultats 3 lignes après)....

Je comprendrai si vous n avez pas le temps

J ai mis en fichier joint ce que j ai un peu modifié.
 

Pièces jointes

  • test-6-05-2012.xlsm
    44.9 KB · Affichages: 74

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Produits de deux matrices - VBA

Bonsoir mimy,

Un essai dans le fichier joint. Le produit par la matrice unicolonne de 1 => n'est ce pas la somme des éléments de chaque ligne?
 

Pièces jointes

  • test-6-05-2012 v2.xlsm
    73.2 KB · Affichages: 70
Dernière édition:

mimy

XLDnaute Occasionnel
Re : Produits de deux matrices - VBA

Bonjour Mapomme,

Justeun dernier service concernant ce fichier,

Tu vois la matrice de correlation, c est une matrice triangulaire, c est a dire que les colonnes sont égales aux lignes.
Je m explique: premiere ligne=TRANSPOSE(premiere colonne) etc...

Je voudrais savoir si c est possible, à partir de cette matrice triangulaire, faire une sub qui justement transpose les colonnes en lignes afin d'avoir la matrice de correlation entière.

Je te remercie mille fois!
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Produits de deux matrices - VBA

Bonsoir mimy,

Un essai dans le fichier joint. Devrait fonctionner que la matrice soit triangulaire sup. ou inf.
Code:
Sub test()
   Complete Range("C3:F6"), Range("C9")
   Complete Range("I3:M7"), Range("I9")
End Sub

Sub Complete(Triangle As Range, Dest As Range)
Dim i, j, M1, M2, N
   N = Triangle.Rows.Count
   ReDim M1(1 To N, 1 To N)
   M1 = Triangle.Value
   ReDim M2(1 To N, 1 To N)
   M2 = Application.Transpose(M1)
   For i = 1 To N
      For j = 1 To N
         M1(i, j) = M1(i, j) + M2(i, j)
      Next j
      M1(i, i) = 0 + M2(i, i)
   Next i
   Dest.Resize(N, N).Value = M1
End Sub
 

Pièces jointes

  • Triangle - VBA v1.xlsm
    17.6 KB · Affichages: 71

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Produits de deux matrices - VBA

(re)Bonsoir,

Un essai dans le fichier joint. Le minimum à indiquer est l'adresse de la première cellule de la matrice triangulaire et l'adresse de la cellule de destination.

Code:
Sub test()
   Complete Range("C3"), Range("C9")
   Complete Range("I3"), Range("I9")
End Sub

Sub Complete(CoinSupGauche As Range, Dest As Range)
Dim i, j, M1, M2, N

   For N = 1 To 1000
      If CoinSupGauche(1, N) = "" Then Exit For
   Next N
   N = N - 1
   For i = 1 To 1000
      If CoinSupGauche(i, 1) = "" Then Exit For
   Next i
   i = i - 1
   If i > N Then N = i
   
   ReDim M1(1 To N, 1 To N)
   M1 = CoinSupGauche.Resize(N, N).Value
   ReDim M2(1 To N, 1 To N)
   M2 = Application.Transpose(M1)
   For i = 1 To N
      For j = 1 To N
         M1(i, j) = M1(i, j) + M2(i, j)
      Next j
      M1(i, i) = 0 + M2(i, i)
   Next i
   Dest.Resize(N, N).Value = M1
End Sub
 

Pièces jointes

  • Triangle - VBA v2.xlsm
    18.2 KB · Affichages: 57

raven

XLDnaute Nouveau
Re : Produits de deux matrices - VBA

Bonjour a vous
je voudrais déclarer 2 matrices variables et faire leurs produits. Mais je me bloque depuis 1 semaine. Vous pouvez m'aider svp. Quand je compile ca m'écrit Argument ou appel de procédure incorrect

Dim MonTableau(), MonTableau2() As Double
Sub BouclesForNextImbriquées()
Dim DerniereLigne As Long
DerniereLigne = Range("A1").End(xlDown).Row
Dim NbreDeLignes As Long
NbreDeLignes = DerniereLigne
ReDim MonTableau(NbreDeLignes, 1)
Call AffecterValeursTableau(NbreDeLignes)
End Sub

Sub AffecterValeursTableau(DerniereLigneTableau)
Dim CompteurLigness As Long
Dim CompteurColonness As Long
For CompteurLigness = 1 To DerniereLigneTableau
For CompteurColonness = 1 To 1
MonTableau(CompteurLigness, CompteurColonness) = Cells(CompteurLigness, CompteurColonness)
Next CompteurColonness
Next CompteurLigness
' Range("d1") = MonTableau(2, 1)
End Sub

Sub BouclesForNextImbriqu()
Dim Dernierecol As Long
Dernierecol = Range("C1").End(xlToRight).Column
Dim NbreDecol As Long
NbreDecol = Dernierecol - 2
ReDim MonTableau2(1, NbreDecol)

Call AfecterValeursTableau2(NbreDecol)
End Sub

Sub AfecterValeursTableau2(DernierecolonneTableau)
Dim CompteurLignes As Long
Dim CompteurColonnes As Long
For CompteurLignes = 1 To 1
For CompteurColonnes = 1 To DernierecolonneTableau
MonTableau2(CompteurLignes, CompteurColonnes) = Cells(CompteurLignes, CompteurColonnes)
Next CompteurColonnes
Next CompteurLignes
'Range("d1") = MonTableau(1, 2)
End Sub

Sub produit()
Dim er As Range
Set er = Range("e10:j16")
er = Application.WorksheetFunction.MMult(MonTableau, MonTableau2)

End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Produits de deux matrices - VBA

Bonjour.
Excel, ainsi que ses fonctions de WorksheetFunction ne s'accommode pas toujours très bien de données et tableaux d'autres types que Variant (tel que Double) ou Range. Pourquoi ne passez vous pas tout simplement des Range à la MMult ?
Et pourquoi ne mettez vous pas dans votre plage résultante une FormulaArray qui laisserait Excel effectuer le calcul ?
Avez vous vérifié que les nombres de lignes et de colonnes des deux sources et du résultat sont compatibles avec un produit de matrices ?
 

raven

XLDnaute Nouveau
Re : Produits de deux matrices - VBA

Slt Dranreb
En fait c'est un calcul automatique que je veux et a chaque nouvelle opération toute la feuille est effacée c'est pourquoi je ne peux pas y mettre de formules a l'avance dans la feuille. Bon j'ai changé en haut les double en range mais toujours "Argument ou appel de procédure incorrect"
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 017
dernier inscrit
annboi19