Modules: Déterminer le nombre de dimensions d'une structure dimensionnée |
Author(s) Lyle Fairfield |
|
---Soumis par Lyle Fairfield---
Déterminer le nombre de dimensions d'une structure dimensionnée.
Il n'y a pas de façon directe pour obtenir le nombre de
dimensions d'un Array en VBA. À ne pas confondre avec la valeur
retournée par UBound qui nous renseigne sur la valeur la plus
élevée que peut prendre un indice, pour une dimension spécifiée.
Une façon de déterminer le nombre de dimensions, le
nombre d'indices, c'est de commencer ave LBound et de continuer à augmenter le
nombre de dimensions jusqu'à ce qu'une erreur survienne. Le nombre de
dimensions est alors un de moins que celui où l'erreur s'est produite. La
technique est décrite dans la base de connaissance:
XL:
Determining the Number of Dimensions in an Array Variable
Article ID: Q152288
Un façon plus compliquée est d'obtenir le SAFEARRAY que VBA
crée internement pour la variable et alors d'utiliser la fonction API RTLMoveMemory
pour en déterminer le nombre de dimensions.
Un façon plus sécuritaire est d'utiliser le code suivant:
Function ElementCount(b As Variant) As Long
Dim v As Variant, z As Long
For Each v In b
z = z + 1
Next v
Do
ElementCount = ElementCount + 1
z = z / (UBound(b, ElementCount) - LBound(b, ElementCount) + 1)
Loop Until z = 1
End Function
Sub testArray()
Dim a(3 To 9, 4 To 7, 0, 1 To 12) As Variant, b As Variant
Dim varReturn As Long
b = a
varReturn = fDummy(b)
MsgBox varReturn
End Sub
Function fDummy(b As Variant) As Long
fDummy = ElementCount(b)
End Function
|