Problème avec tableaux Variant et X.rows.count sous VBA
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:
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:
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:
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