Bonjour, mon problème est double.

J'ai une Sub appelant une fonction. Dans cette fonction l'argument est une matrice.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub test()
 
Dim mat(4, 4) 
Dim toto(4, 4)
 
Randomize
 
 
For i = 1 To 4
For j = 1 To 4
 
mat(i, j) = Int(5 * Rnd) - 2
Cells(9 + i, j) = mat(i, j)
Next
Cells(9 + i, 6) = Int(20 * Rnd) - 10
Next
 
toto = InverseMatrice(mat)
End Sub

Avec cette sub j'appelle la fonction InverseMatrice


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Private Function InverseMatrice(ByRef Matrice()) 
 
'Calcul de l'inverse d'une matrice par pivot de Gauss
 
Dim i As Integer, j As Integer, k As Integer 'variable de boucle
Dim n As Integer 'dimension de la matrice à inverser
Dim M() As Double
Dim MInv() As Double 'matrice inverse
Dim Temp As Double
 
 
 
    n = UBound(Matrice, 1)
 
    ' vérifie que la matrice est une matrice carrée
    If UBound(Matrice, 2) <> n Then MsgErrBox "La matrice n'est pas carrée !"
 
    ' crée la matrice n x 2n, composée par M et la matrice identité
    ReDim M(n, 2 * n)
    For i = 1 To n
        For j = 1 To n
            M(i, j) = Matrice(i, j)
            M(i, j + n) = 1 - Sgn(Abs(i - j))
        Next
    Next
 
    ' échelonne la matrice M()
    For i = 1 To n
        ' trouve le pivot (1er élément <> 0)
        j = i
        While M(j, i) = 0
            j = j + 1
            If j > n Then MsgErrBox "La matrice n'est pas inversible !"
        Wend
        ' échange les 2 lignes si elles sont différentes
        ' commence à partir de l'élément i, car tous les précédents sont nuls
        If i <> j Then
            For k = i To 2 * n
                Temp = M(i, k)
                M(i, k) = M(j, k)
                M(j, k) = Temp
            Next
        End If
        ' le pivot devient égal à 1
        If M(i, i) <> 1 Then
            Temp = M(i, i)
            For j = i To 2 * n
                M(i, j) = M(i, j) / Temp
            Next
        End If
        ' sous le pivot, tous les éléments deviennent nuls
        For j = i + 1 To n
            If M(j, i) <> 0 Then
                Temp = M(j, i)
                For k = i To 2 * n
                    M(j, k) = M(j, k) - M(i, k) * Temp
                Next
            End If
        Next
    Next
 
    ' réduit la matrice M()
    For i = n To 2 Step -1
        For j = 1 To i - 1
            If M(j, i) <> 0 Then
                Temp = M(j, i)
                For k = i To 2 * n
                    M(j, k) = M(j, k) - M(i, k) * Temp
                Next
            End If
        Next
    Next
 
    ' retourne le résultat : la deuxième partie de la matrice M()
    ReDim MInv(n, n) 
    For i = 1 To n
        For j = 1 To n
            MInv(i, j) = M(i, j + n)
        Next
    Next
    InverseMatrice = MInv
 
    For i = 1 To 4
    For j = 1 To 4
    Cells(9 + i, j + 11) = MInv(i, j)
    Next
    Next
 
End Function

Lorsque j'utilise Call InverseMatrice ttout compile mais avec toto j'ai une erreur de compilation "impossible d'affecter à un tableau"
Quelqu'un aurait une solution à proposer ?
Merci d'avance