Fonction Produit de Matrices

Sweden81 Messages postés 2 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 5 juin 2009 - 5 juin 2009 à 20:32
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 5 juin 2009 à 23:43
J'aurais besoin d'aide pour créer une fonction qui calcul le produit de 2 matrices et renvoie donc la matrice produit.

J'ai défini ma fonction comme il suit:
Function ProdMat2D(Mat1 As Long, Mat2 As Long) As Variant
Dim X(0 To 1, 0 To 1) As Long
Dim i As Integer
Dim j As Integer
Dim k As Integer
For i = 0 To 1
    For j = 0 To 1
        For k = 0 To 1
        X(i, j) = X(i, j) + Mat1(i, k) * Mat2(k, j)
        Next
    Next
Next
ProdMat2D = X()End Function

Et pour tester ma fonction j'ai écrit cette routine avec des valeurs au pif dans mes matrices Ini
Sub test()
MatIni1(0, 0) = 2
MatIni1(0, 1) = 1
MatIni1(1, 0) = 4
MatIni1(1, 1) = 3
MatIni2(0, 0) = 1
MatIni2(0, 1) = 0
MatIni2(1, 0) = 3
MatIni2(1, 1) = 2
Dim MatNew(0 To 1, 0 To 1) As Long
MatNew = ProdMat2D(MatIni1, MatIni2)
    v = MatNew(0, 0)
    y = MatNew(0, 1)
    Z = MatNew(1, 0)
    w = MatNew(1, 1)
    MsgBox ("Coef00= " & v)
    MsgBox ("Coef01= " & y)
    MsgBox ("Coef10= " & Z)
    MsgBox ("Coef11= " & w)
End Sub

Le message d'erreur que je reçois est : Type d'argument ByRef incompatible.

Si quelqu'un sait comment résoudre mon problème, j'aimerais bcp ses conseils :)

3 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
5 juin 2009 à 21:34
Bonjour

Tu as une incompatibilité entre les arguments - des tableaux - passés lors de l'appel à la fonction ProdMat2D() et les paramètres - des entiers long - attendus par cette fonction.

Essaie la déclaration suivante : Function ProdMat2D(Mat1() As Long, Mat2() As Long) As Variant

Aussi, l'instruction MatNew = ProdMat2D(MatIni1, MatIni2), affecte un Variant à un tableau. Peut-être vaudrait-il mieux déclarer MatNew comme Variant pour respecter la compatibilité de types.

Amicalement
0
Sweden81 Messages postés 2 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 5 juin 2009
5 juin 2009 à 22:54
Merci beaucoup, effectivement il y a besoin des () à côté de Mat1 et Mat2 pour résoudre le pb de ByRef.
Pour MatNew ... le truc c'est de pas la définir ! Par contre je me demande comment VBA considère MatNew, pour lui c'est une matrice ?
A voir...
Bref, merci :)
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
5 juin 2009 à 23:43
Tu as raison, tu n'as pas besoin de définir  MatNew ; le compilateur le crée automatiquement avec le type Variant. Mais, comme tu le sais, beaucoup de programmeurs considèrent comme une bonne pratique de définir explicitement toutes les variables de leur programme, et utilisent pour cela, Option Explicit. Mais bon, ce n'est pas notre sujet...

MatNew est un Variant, pas une matrice. Mais à l'exécution, ce Variant contient un tableau, ce qui ne pose pas de difficulté.

Bonne programmation !
0
Rejoignez-nous