OVH Cloud OVH Cloud

Variable vide

11 réponses
Avatar
Daniel AUBRY
Bonjour à tous,

j'ai une variable :

Dim MaVariable() as Integer

dans mon code elle n'est pas forcément incrémentée.

Par contre je la teste à un certain moment et :

PlusFort = UBound(MaVariable)

me plante si elle n'a pas été incrémentée.

Je ne saisi comment testé ma variable, j'ai tenté
If MaVariable is not Nothing sans succès.

Si quelqu'un a une p'tite idée ........

Marci d'avance,

dany

1 réponse

1 2
Avatar
Picalausa François a écrit :

Il est possible de tester ces bornes par d'autres manières. Une méthode qui
ne gère pas l'erreur consiste à retrouver un pointeur vers le safearray.
Celui ci est nul lorsque l'array n'est pas initialisée. Voici un exemple:
Private Type SAFEARRAYBOUND
cElements As Long
lLbound As Long
End Type

Private Type SAFEARRAY
cDims As Integer
fFeatures As Integer
cbElements As Long
cLocks As Long
pvData As Long
End Type

Private Declare Function VarPtrArray _
Lib "msvbvm60.dll" _
Alias "VarPtr" _
( _
Var() As Any _
) _
As Long
Private Declare Sub CopyMemory _
Lib "kernel32" _
Alias "RtlMoveMemory" _
( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long _
)

Private Sub Form_Load()
Dim MyInts() As Integer

DoSomething MyInts

ReDim MyInts(0)

DoSomething MyInts
End Sub

Public Sub DoSomething(DataArray() As Integer)
Dim VBArray As SAFEARRAY, ArrayBounds() As SAFEARRAYBOUND
Dim ArrayPointer As Long

'Transforme le pointeur vers un pointeur en pointeur simple
Call CopyMemory(ArrayPointer, ByVal VarPtrArray(DataArray),
LenB(ArrayPointer))

If ArrayPointer Then
Call CopyMemory(VBArray, ByVal ArrayPointer, LenB(VBArray))

If VBArray.cDims Then
ReDim ArrayBounds(VBArray.cDims)

Call CopyMemory(ArrayBounds(0), ByVal ArrayPointer +
LenB(VBArray), LenB(ArrayBounds(0)) * VBArray.cDims)

MsgBox "L'array possède " & VBArray.cDims & " dimensions (1ère
dim : " & ArrayBounds(0).lLbound & " To " & ArrayBounds(0).lLbound +
ArrayBounds(0).cElements - 1 & ")"
End If
Else
MsgBox "L'array n'est pas initialisée"
End If
End Sub





Joli !

Pour ma part et dans la mesure du possible j'utilise des collections, le
is nothing étant Object...ivement plus parlant.

Et une des raisons première était le fait de trapper l'erreur sur
ubound() pour chaque variable tableau générale.

Christophe

A+
1 2