3 votes

Est-il possible de passer un tableau multidimensionnel comme paramètre dans EXCEL VBA ?

J'ai créé un tableau dans une procédure qui contient les résultats finaux. Je veux utiliser ces résultats dans une nouvelle procédure comme entrées pour les calculs. Existe-t-il un moyen de passer un tableau multidimensionnel comme paramètre dans une autre procédure ? Comment le mettre dans l'appel et comment définir le paramètre dans la procédure dans laquelle il sera utilisé ?

Gracias

3voto

Alex K. Points 67805

Passez comme vous le feriez pour un tableau à une dimension en décorant l'argument de routine avec des parenthèses ;

sub a()
    dim x(1, 1) As long
    x(0, 0) = 1
    x(1, 1) = 4
    process x
end sub

sub process(arr() As long)
    Msgbox arr(0, 0)
    Msgbox arr(1, 1)
end sub

0voto

Chris Harland Points 457

Est-ce le genre de chose que vous recherchez ?

Sub AAATest()
''''''''''''''''''''''''
' Dynamic array to hold
' the result.
''''''''''''''''''''''''
Dim ReturnArr() As Long
Dim Ndx1 As Long
Dim Ndx2 As Long
Dim NumDims As Long
''''''''''''''''''''''''''
' call the function to get
' the result array.
''''''''''''''''''''''''''
ReturnArr = ReturnMulti()
NumDims = NumberOfArrayDimensions(Arr:=ReturnArr)
Select Case NumDims
    Case 0
        '''''''''''''''''''
        ' unallocated array
        '''''''''''''''''''
    Case 1
        ''''''''''''''''''''''''''
        ' single dimensional array
        ''''''''''''''''''''''''''
        For Ndx1 = LBound(ReturnArr) To UBound(ReturnArr)
            Debug.Print ReturnArr(Ndx1)
        Next Ndx1
    Case 2
        '''''''''''''''''''''''''''
        ' two dimensional array
        '''''''''''''''''''''''''''
        For Ndx1 = LBound(ReturnArr, 1) To UBound(ReturnArr, 1)
            For Ndx2 = LBound(ReturnArr, 2) To UBound(ReturnArr, 2)
                Debug.Print ReturnArr(Ndx1, Ndx2)
            Next Ndx2
        Next Ndx1
    Case Else
        ''''''''''''''''''''''
        ' too many dimensions
        ''''''''''''''''''''''
End Select
End Sub

Function ReturnMulti() As Long()
''''''''''''''''''''''''''''''''''''
' Returns a mutli-dimensional array.
''''''''''''''''''''''''''''''''''''
Dim A(1 To 2, 1 To 3) As Long
'''''''''''''''''''''''''''''
' put in some values.
'''''''''''''''''''''''''''''
A(1, 1) = 100
A(1, 2) = 200
A(1, 3) = 300
A(2, 1) = 400
A(2, 2) = 500
A(2, 3) = 600
ReturnMulti = A()
End Function

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X