Je crois que c'est un tableau vide la forme v() Il faut me semble-t-il l'initialiser par ReDim, soit:
Dim MaVariable() As Integer ............... ReDim MaVariable(1) As Integer MaVariable(1) = x
---------------------
"Daniel AUBRY" a écrit dans le message de news: 431091c8$0$1827$
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
David
Bonjour Daniel,
UBound c'est pour le stableaux.
Dim mavariable Dim tableau(10) mavariable = UBound(AnyArray) ' Renvoie 10.
a+ Jean-Pol DAVID ICQ 28394733 -- Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ? Quando ? "Daniel AUBRY" a écrit dans le message de news: 431091c8$0$1827$
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
Bonjour Daniel,
UBound c'est pour le stableaux.
Dim mavariable
Dim tableau(10)
mavariable = UBound(AnyArray) ' Renvoie 10.
a+
Jean-Pol DAVID
ICQ 28394733
--
Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ? Quando ?
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de news:
431091c8$0$1827$626a14ce@news.free.fr...
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.
Dim mavariable Dim tableau(10) mavariable = UBound(AnyArray) ' Renvoie 10.
a+ Jean-Pol DAVID ICQ 28394733 -- Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ? Quando ? "Daniel AUBRY" a écrit dans le message de news: 431091c8$0$1827$
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
David
Bonjour Daniel, Erreur de copier/coller!
UBound c'est pour les tableaux.
Dim mavariable Dim tableau(10) mavariable = UBound(TABLEAU) ' Renvoie 10.
a+ Jean-Pol DAVID ICQ 28394733 -- Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ? Quando ? "Daniel AUBRY" a écrit dans le message de news: 431091c8$0$1827$
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
Bonjour Daniel,
Erreur de copier/coller!
UBound c'est pour les tableaux.
Dim mavariable
Dim tableau(10)
mavariable = UBound(TABLEAU) ' Renvoie 10.
a+
Jean-Pol DAVID
ICQ 28394733
--
Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ? Quando ?
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de news:
431091c8$0$1827$626a14ce@news.free.fr...
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.
Dim mavariable Dim tableau(10) mavariable = UBound(TABLEAU) ' Renvoie 10.
a+ Jean-Pol DAVID ICQ 28394733 -- Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ? Quando ? "Daniel AUBRY" a écrit dans le message de news: 431091c8$0$1827$
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
scraper
Bonjour Daniel AUBRY, dans le message news:431091c8$0$1827$ tu disais :
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
puisque c'est un integer, tant qu'une valeur lui a pas été affectée explicitement, et du moment que tu l'as déclarée, ta variable vaut 0
il suffit donc de faire par exemple
If PlusFort<>0 Then 'traitement ... End If
--
Adresse invalide Merci de répondre sur le forum ... http://scraper.chez.tiscali.fr
scraper
Bonjour Daniel AUBRY, dans le message
news:431091c8$0$1827$626a14ce@news.free.fr
tu disais :
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
puisque c'est un integer, tant qu'une valeur lui a pas été affectée
explicitement, et du moment que tu l'as déclarée, ta variable vaut 0
il suffit donc de faire par exemple
If PlusFort<>0 Then
'traitement
...
End If
--
Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez.tiscali.fr
Bonjour Daniel AUBRY, dans le message news:431091c8$0$1827$ tu disais :
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
puisque c'est un integer, tant qu'une valeur lui a pas été affectée explicitement, et du moment que tu l'as déclarée, ta variable vaut 0
il suffit donc de faire par exemple
If PlusFort<>0 Then 'traitement ... End If
--
Adresse invalide Merci de répondre sur le forum ... http://scraper.chez.tiscali.fr
scraper
ng
Salut,
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)
Il faut tester si le tableau a été initialisé avec une fonction du style :
Function EstInitialise(tbl() As Integer) As Boolean On Error Resume Next Dim lTest As Long lTest = Ubound(tbl) EstInitialise = (Err.Number > 0) End Function
Ainsi :
Dim monTbl() As Integer
If EstInitialise(monTbl) Then 'c'est bon on peut s'en servir, faire des UBound() & co Else 'c'est pas bon il faut l'initialisé : Redim monTbl(1) End If
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
Salut,
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)
Il faut tester si le tableau a été initialisé avec une fonction du style :
Function EstInitialise(tbl() As Integer) As Boolean
On Error Resume Next
Dim lTest As Long
lTest = Ubound(tbl)
EstInitialise = (Err.Number > 0)
End Function
Ainsi :
Dim monTbl() As Integer
If EstInitialise(monTbl) Then
'c'est bon on peut s'en servir, faire des UBound() & co
Else
'c'est pas bon il faut l'initialisé :
Redim monTbl(1)
End If
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
dans mon code elle n'est pas forcément incrémentée.
Par contre je la teste à un certain moment et :
PlusFort = UBound(MaVariable)
Il faut tester si le tableau a été initialisé avec une fonction du style :
Function EstInitialise(tbl() As Integer) As Boolean On Error Resume Next Dim lTest As Long lTest = Ubound(tbl) EstInitialise = (Err.Number > 0) End Function
Ainsi :
Dim monTbl() As Integer
If EstInitialise(monTbl) Then 'c'est bon on peut s'en servir, faire des UBound() & co Else 'c'est pas bon il faut l'initialisé : Redim monTbl(1) End If
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
scraper
[...]
oops, pas vu que ta variable était un tableau
désolé
--
Adresse invalide Merci de répondre sur le forum ... http://scraper.chez.tiscali.fr
scraper
[...]
oops, pas vu que ta variable était un tableau
désolé
--
Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez.tiscali.fr
Adresse invalide Merci de répondre sur le forum ... http://scraper.chez.tiscali.fr
scraper
Picalausa François
Hello,
Il y a des méthodes plus ou moins clean pour tester si une array est ou non initialisée. La méthode la simple est d'ignorer l'erreur. Voici un exemple:
Public Function intSafeUbound(ArrayName() As Integer, Optional dimension As Long = 1) As Long On Error Resume Next bytSafeUbound = -1 bytSafeUbound = UBound(ArrayName, dimension) End Function
Public Function intSafeLbound(ArrayName() As Integer, Optional dimension As Long = 1) As Long On Error Resume Next bytSafeLbound = 0 bytSafeLbound = LBound(ArrayName, dimension) End Function
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)
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
-- Picalausa François
"Daniel AUBRY" a écrit dans le message de news: 431091c8$0$1827$
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
Hello,
Il y a des méthodes plus ou moins clean pour tester si une array est ou non
initialisée.
La méthode la simple est d'ignorer l'erreur.
Voici un exemple:
Public Function intSafeUbound(ArrayName() As Integer, Optional dimension As
Long = 1) As Long
On Error Resume Next
bytSafeUbound = -1
bytSafeUbound = UBound(ArrayName, dimension)
End Function
Public Function intSafeLbound(ArrayName() As Integer, Optional dimension As
Long = 1) As Long
On Error Resume Next
bytSafeLbound = 0
bytSafeLbound = LBound(ArrayName, dimension)
End Function
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)
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
--
Picalausa François
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de news:
431091c8$0$1827$626a14ce@news.free.fr...
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.
Il y a des méthodes plus ou moins clean pour tester si une array est ou non initialisée. La méthode la simple est d'ignorer l'erreur. Voici un exemple:
Public Function intSafeUbound(ArrayName() As Integer, Optional dimension As Long = 1) As Long On Error Resume Next bytSafeUbound = -1 bytSafeUbound = UBound(ArrayName, dimension) End Function
Public Function intSafeLbound(ArrayName() As Integer, Optional dimension As Long = 1) As Long On Error Resume Next bytSafeLbound = 0 bytSafeLbound = LBound(ArrayName, dimension) End Function
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)
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
-- Picalausa François
"Daniel AUBRY" a écrit dans le message de news: 431091c8$0$1827$
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
Daniel AUBRY
Ok, merci, j'applique de suite.
dany
"ng" a écrit dans le message de news:
Salut,
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)
Il faut tester si le tableau a été initialisé avec une fonction du style :
Function EstInitialise(tbl() As Integer) As Boolean On Error Resume Next Dim lTest As Long lTest = Ubound(tbl) EstInitialise = (Err.Number > 0) End Function
Ainsi :
Dim monTbl() As Integer
If EstInitialise(monTbl) Then 'c'est bon on peut s'en servir, faire des UBound() & co Else 'c'est pas bon il faut l'initialisé : Redim monTbl(1) End If
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
Ok, merci, j'applique de suite.
dany
"ng" <ng@ngsoft-fr.com> a écrit dans le message de news:
uErdCjyqFHA.2876@TK2MSFTNGP12.phx.gbl...
Salut,
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)
Il faut tester si le tableau a été initialisé avec une fonction du style :
Function EstInitialise(tbl() As Integer) As Boolean
On Error Resume Next
Dim lTest As Long
lTest = Ubound(tbl)
EstInitialise = (Err.Number > 0)
End Function
Ainsi :
Dim monTbl() As Integer
If EstInitialise(monTbl) Then
'c'est bon on peut s'en servir, faire des UBound() & co
Else
'c'est pas bon il faut l'initialisé :
Redim monTbl(1)
End If
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
dans mon code elle n'est pas forcément incrémentée.
Par contre je la teste à un certain moment et :
PlusFort = UBound(MaVariable)
Il faut tester si le tableau a été initialisé avec une fonction du style :
Function EstInitialise(tbl() As Integer) As Boolean On Error Resume Next Dim lTest As Long lTest = Ubound(tbl) EstInitialise = (Err.Number > 0) End Function
Ainsi :
Dim monTbl() As Integer
If EstInitialise(monTbl) Then 'c'est bon on peut s'en servir, faire des UBound() & co Else 'c'est pas bon il faut l'initialisé : Redim monTbl(1) End If
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
Guy DETIENNE
Salut ;O)
Dans le même esprit que les réponses précédentes :
Determining the size of a VB dynamic array http://www.developerfusion.co.uk/show/1136/
Guy
"Daniel AUBRY" a écrit dans le message de news:431091c8$0$1827$
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
Salut ;O)
Dans le même esprit que les réponses précédentes :
Determining the size of a VB dynamic array
http://www.developerfusion.co.uk/show/1136/
Guy
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de
news:431091c8$0$1827$626a14ce@news.free.fr...
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.
Dans le même esprit que les réponses précédentes :
Determining the size of a VB dynamic array http://www.developerfusion.co.uk/show/1136/
Guy
"Daniel AUBRY" a écrit dans le message de news:431091c8$0$1827$
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
Guy DETIENNE
Salut ;O)
Une collection c'est bien mais c'est très lent par rapport à un tableau lorsque l'optimisation est de mise. Donc à utiliser selon les cas...
Guy
"<pasdespam> @wanadoo.fr>" <"<pasdespam> a écrit dans le message de news:4313004c$0$17243$
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+
Salut ;O)
Une collection c'est bien mais c'est très lent par rapport à un tableau
lorsque l'optimisation est de mise.
Donc à utiliser selon les cas...
Guy
"<pasdespam> @wanadoo.fr>" <"<pasdespam> a écrit dans le message de
news:4313004c$0$17243$8fcfb975@news.wanadoo.fr...
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.
Une collection c'est bien mais c'est très lent par rapport à un tableau lorsque l'optimisation est de mise. Donc à utiliser selon les cas...
Guy
"<pasdespam> @wanadoo.fr>" <"<pasdespam> a écrit dans le message de news:4313004c$0$17243$
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.