bonsoir à tous,

Voilà j'essai de programmer une fonction sous VBA qui me servira à calculer les résidus d'une régression. Ma fonction ci dessous s'exécute bien et j'utilise des tableaux pour les calculs:

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
 
option base 1
Function OLSStderror(Y As Variant, X As Variant)
'   Computes OLS Standard Error under the equation Y = a + B1(t)+...+Bk(t)
'   Works for Simple and Multiple Regression
    '
    '# of Rows & # of columns
    Dim nr, nc As Integer
    nr = X.rows.Count
    nc = X.Columns.Count
    '
    Dim Xb(), betas(), Xbetas(), residuals() As Variant
    ReDim Xb(1 To nc + 1, 1 To nr), betas(1 To nc + 1, 1 To 1), Xbetas(1 To nr, 1 To 1), residuals(1 To nr, 1 To 1) As Variant
    Xb = RegMatrix(X)
    betas = OLS(Y, X)
    Xbetas = Application.MMult(Xb, betas)
    Debug.Print TypeName(Xbetas)
    '
    residuals = MAdd(Y, Xbetas, -1)
    '
End Function
comme vous pouvez le constater, j'ai bien essayé de déclarer comme il se doit les arguments des tableaux. Cependant pour Calculer les "residuals", j'ai créer une fonction Madd (addition de matrice) comme suit:

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
 
Function MAdd(X As Variant, Y As Variant, Coeff As Single) As Variant
'   Add or Substract two matrix depending on coeff(-1,1)
'   The usual matrix addition is defined for two matrices of the same dimensions
    '
    'Check if the two Matrix have the same size
    If X.rows.Count = Y.rows.Count Then
        If X.Columns.Count = Y.Columns.Count Then
        Else: MAdd = "Discrepancy in # C"
            Exit Function
        End If
    Else: MAdd = "Discrepancy in # R"
        Exit Function
    End If
    '
    Dim nr, nc, i, j As Integer
    nr = Y.rows.Count
    nc = Y.Columns.Count
    Dim Temp As Variant
    ReDim Temp(nr, nc)
        '
        'Compute Matrix
        For i = 1 To nr
            For j = 1 To nc
              Temp(i, j) = X(i, j) + Coeff * Y(i, j)
            Next j
        Next i
        '
    MAdd = Temp
End Function
Or la procédure s'arrête à ce niveau (ci dessous au moment du dénombrement) dans la fonction Madd et je ne trouve pas pourquoi:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
    'Check if the two Matrix have the same size
    If X.rows.Count = Y.rows.Count Then
D'ailleurs, la fonction Madd fonctionne très bien si je sélectionne des range sous Excel. Pourquoi ne fonctionne t'elle pas avec des tableaux sous VBA? Sachant que lorsque je lui demande le type de variable de Xbetas il me donne bien un variant et il m'affiche que le vartype est 8204 ce qui correspond à une array.


Any ideas?

Merci d'avance

Anthony