Sweden81
Messages postés2Date d'inscriptionmercredi 3 juin 2009StatutMembreDernière intervention 5 juin 2009
-
5 juin 2009 à 20:32
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 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 :)
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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.
Sweden81
Messages postés2Date d'inscriptionmercredi 3 juin 2009StatutMembreDerniè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 :)
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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é.