Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Erreur avec la fonction MMult

Johan_25

XLDnaute Nouveau
Bonjour à tous,
Pour un problème de mécanique je voudrais résoudre un système d'équation à l'aide d'excel et de manipulation de matrice.

Au moment de multiplier 2 matrices ensemble : VBA me signale cette erreur :
"Erreur d'éxecution '1004': Impossible de lire la proriété MMult de la classe worksheetFunction".

J'ai vu cette erreur sur d'autre forum mais je n'ai jamais réussi à trouver une solution pour mon code : (ne pas regarder la phase de remplissage des tableaux : c'est sans importance)
Si qq'un à la solution

VB:
Sub res_systeme()

Const n As Integer = 2 'le nombre de subdivision du pieu
Dim l_pieu As Double
Dim M_0 As Double
Dim T_0 As Double

l_pieu = 2
M_0 = 0
T_0 = 20


Dim mat_A(1 To n * 4, 1 To n * 4) As Double
Dim C_i() As Double
Dim mat_B(1 To n * 4) As Double
'A.C = B avec C la matrice des constantes Cik inconnues
'C=A^-1.B : Résolution du système

'--------------------------------------------------
'REMPLISSAGE DES MATRICES mat_A et mat_B 
'--------------------------------------------------

C_i = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(mat_A), mat_B) 'ici mon erreur


End Sub
 
Dernière édition:
Solution
Ah je crois que MatB devrait être dimensionné 1 To 8, 1 To 1, soit 8 lignes d'une colonne pas une ligne de 8 colonnes comme assumé s'il n'y a qu'une dimension.
C'est ce que je fait dans mon module SysEqua, sauf que je peux avoir plusieurs colonnes de valeurs Y différentes pour calculer différents problèmes avec la même matrice inversée.

Johan_25

XLDnaute Nouveau
Bonjour BrunoM45,
ma matrice 1 (mat_A) possède n*4 colonne et ma matrice 2 (mat_B) possède n*4 lignes également :
Dim mat_A(1 To n * 4, 1 To n * 4) As Double ... son inverse est également une matrice de cette dimension.
Dim mat_B(1 To n * 4) As Double

Donc c'est bien le cas
 

Dranreb

XLDnaute Barbatruc
Bonjour.
À tout hasard essayez en typant As Variant les tableaux impliqués au lieu de As Double.
Excel est en effet parfois un peu difficile avec ça, surtout si on lui demande d'en produire.
C'est donc surtout C_i qui ne va pas, à mon avis, parce que les WorksheetFunction retournent un Variant contenant un tableau d'éléments également Variant.
 
Dernière édition:

Johan_25

XLDnaute Nouveau
Bonjour Dranreb

Oui j'ai déjà essayé, lorsque je met mat_A / mat_B et C_i en variant. C'est à présent le calcul précédent c'est à dire l'inversion de la matrice mat_A qui ne fonctionne pas avec le même message.
Lorsque je laisse mat_A en double et les autres en variant : message d'erreur est toujours sur MMult.

Cdlt
 

Johan_25

XLDnaute Nouveau
Si votre question implicite c'est de savoir si le determinant de la matrice mat_A est nul, je vous répond que non :

1) lorsque je fais le calcul dans les feuilles excel ça marche.
2) De plus en VBA j'arrive à juste inverser la matrice Mat_A
3) Enfin, après test de votre fonction le déterminant est bien <>de 0
 

Johan_25

XLDnaute Nouveau
Oui en gros c'est ce que j'ai déjà fait.
Ce que je n'arrive pas à comprendre c'est que lorsque je viens écrire mes matrices sur une feuille excel, cela marche .. Mais pas dans ma feuille VBA et je souhaite avoir un maximum d'automatisation sans passer par la feuille active. Je le ferai si je n'ai pas le choix mais je souhaite faire fonctionner MMult..
 

Discussions similaires

Réponses
9
Affichages
342
Réponses
11
Affichages
711
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…