Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

limite de tableau

8 réponses
Avatar
tristan
bonjour

voila j'aimerai savoir si il est possible de testé la longueur d'un tableau
dynamique , dans le cas precis ou dans celui-ci il n'y a aucun indice.

tbl_quelconque = Nothing
et
ubound(tbl_quelconque) = "indice en dehors de la plage"

merci

8 réponses

Avatar
david
Salut,

les tests avec nothing s'écrivent
tbl_quelquonque Is Nothing
et les tests avec null s'écrivent
IsNull(tbl_quelquonque)

Si ton tableau (tbl_qq) est un variant tu peux tester indiférement
avec Nothing ou Null.
Rq : un tableau n'est pas un objet en VB => test avec Null

A+
Avatar
Patrice Henrio
Pour ma part j'utilise une gestion d'erreur, Soit T un tableau dynamique

On Error GoTo Tableau_est_vide
'Si le tableau T1 n'est pas initialisé, le traitement d'erreur permet
d'ignorer le Ubound(T1)
N = UBound(T)
'Traitement du tableau non vide

On Error GoTo 0
Exit Sub

Tableau_est_vide:
'Traitement du tableau vide
End Sub


"david" a écrit dans le message de news:

Salut,

les tests avec nothing s'écrivent
tbl_quelquonque Is Nothing
et les tests avec null s'écrivent
IsNull(tbl_quelquonque)

Si ton tableau (tbl_qq) est un variant tu peux tester indiférement
avec Nothing ou Null.
Rq : un tableau n'est pas un objet en VB => test avec Null

A+
Avatar
tristan
re mon histoire n'est pas terminé, je me souviens d'avoir deja utilisé ce
type de teste mais ca fonctionnais po.
le type de mon tableau est un type que j'ai crée en public

voila : l'aide du messaeg d'erreur

Seuls les types publics définis par l>utilisateur dans les modules objet
publics peuvent être utilisés comme paramètres ou types renvoyés pour les
procédures publiques des modules de classe ou comme champs des types publics
définis par l>utilisateur

qu'est ce que c'est ce truc, je comprend rien, lol.

merci

"david" a écrit dans le message de
news:
Salut,

les tests avec nothing s'écrivent
tbl_quelquonque Is Nothing
et les tests avec null s'écrivent
IsNull(tbl_quelquonque)

Si ton tableau (tbl_qq) est un variant tu peux tester indiférement
avec Nothing ou Null.
Rq : un tableau n'est pas un objet en VB => test avec Null

A+
Avatar
tristan
ou ij'ai deja utilisé ca pour justement commencer à creer des enregistrement
dans le tableau.

j'aurai voulu qq chose de plus simple.

"Patrice Henrio" a écrit dans le message de
news:%
Pour ma part j'utilise une gestion d'erreur, Soit T un tableau dynamique

On Error GoTo Tableau_est_vide
'Si le tableau T1 n'est pas initialisé, le traitement d'erreur permet
d'ignorer le Ubound(T1)
N = UBound(T)
'Traitement du tableau non vide

On Error GoTo 0
Exit Sub

Tableau_est_vide:
'Traitement du tableau vide
End Sub


"david" a écrit dans le message de news:

Salut,

les tests avec nothing s'écrivent
tbl_quelquonque Is Nothing
et les tests avec null s'écrivent
IsNull(tbl_quelquonque)

Si ton tableau (tbl_qq) est un variant tu peux tester indiférement
avec Nothing ou Null.
Rq : un tableau n'est pas un objet en VB => test avec Null

A+




Avatar
david
re-salut,

cela signifit que tu as créé une classe de type publique (global use,
...) et que dans une des méthodes de celle-ci tu utilises un
paramètre d'un type personnalisé.
Cela est interdit ...
En effet, dans les classes publics (accèssibles depuis un autre
programme) les types ou énumérations (même déclarée avec public)
ne sont pas utilisables à l'extérieur de ton programme (ou de ta
DLL). Cela est principalement du au fait que VB ne permet de faire que
l'activeX et non pas de l'API.

Pour eviter cela, il faut créé une classe (publique de préférence)
qui permet de stocker ton tableau dynamique.
Dans cette classe, tu peux alors facilement gérer les erreurs
(débordement ou tableau vide).
Tu peux aussi simplifier en ajoutant une variable locale qui définit
la taille actuellement utilisée par ton tableau dynamique.
Par exemple :
private mvarSz as integer 'Se limitte donc à des tableaux de
36000 éléments
private mvarTb() as variant

private sub Class_Initialize()
mvarSz=0 'inutilie, mais c'est mieux quand c'est écrit
end sub
private sub Class_Terminate()
erase mvarTb()
end sub

public property get Count()as integer
Count = mvarSz
end property
public property get Item(byval index as integer)as variant
if index>mvarSz then
Item=null
else
Item = mvarTb(Index)
end if
end property
public property let Item(byval index as integer, byval vData as
variant)
if index<=mvarSz then
mvarTb(Index) = vData
end if
end property

public sub addItem(byval vData as variant)
mvarSz=mvarSz+1
if mvarSz=1 then
redim mvarTb(1 to 1)
else
redim preserve mvarTb(1 to mvarSz)
end if
mvarTb(mvarSz) = vData
end sub

'.... plus d'autre codes qui pourrait être utile.

Grace à ça tu passes la barrière publique de ton programme activeX.
En plus, cela te permet de gérer plus facilement n tableaux dynamiques
en même temps puisque chacun d'eux gére sa propre taille...

A+
Avatar
tristan
ok merci je vais essayer de me debrouiller avec ca. tout ceci m'est tres
etranger.
"david" a écrit dans le message de
news:
re-salut,

cela signifit que tu as créé une classe de type publique (global use,
...) et que dans une des méthodes de celle-ci tu utilises un
paramètre d'un type personnalisé.
Cela est interdit ...
En effet, dans les classes publics (accèssibles depuis un autre
programme) les types ou énumérations (même déclarée avec public)
ne sont pas utilisables à l'extérieur de ton programme (ou de ta
DLL). Cela est principalement du au fait que VB ne permet de faire que
l'activeX et non pas de l'API.

Pour eviter cela, il faut créé une classe (publique de préférence)
qui permet de stocker ton tableau dynamique.
Dans cette classe, tu peux alors facilement gérer les erreurs
(débordement ou tableau vide).
Tu peux aussi simplifier en ajoutant une variable locale qui définit
la taille actuellement utilisée par ton tableau dynamique.
Par exemple :
private mvarSz as integer 'Se limitte donc à des tableaux de
36000 éléments
private mvarTb() as variant

private sub Class_Initialize()
mvarSz=0 'inutilie, mais c'est mieux quand c'est écrit
end sub
private sub Class_Terminate()
erase mvarTb()
end sub

public property get Count()as integer
Count = mvarSz
end property
public property get Item(byval index as integer)as variant
if index>mvarSz then
Item=null
else
Item = mvarTb(Index)
end if
end property
public property let Item(byval index as integer, byval vData as
variant)
if index<=mvarSz then
mvarTb(Index) = vData
end if
end property

public sub addItem(byval vData as variant)
mvarSz=mvarSz+1
if mvarSz=1 then
redim mvarTb(1 to 1)
else
redim preserve mvarTb(1 to mvarSz)
end if
mvarTb(mvarSz) = vData
end sub

'.... plus d'autre codes qui pourrait être utile.

Grace à ça tu passes la barrière publique de ton programme activeX.
En plus, cela te permet de gérer plus facilement n tableaux dynamiques
en même temps puisque chacun d'eux gére sa propre taille...

A+
Avatar
Driss HANIB
Créer une focntion qui gère le null et renvoie vrai ou faux ..

Driss
"tristan" a écrit dans le message de
news:%

ou ij'ai deja utilisé ca pour justement commencer à creer des


enregistrement
dans le tableau.

j'aurai voulu qq chose de plus simple.

"Patrice Henrio" a écrit dans le message de
news:%
> Pour ma part j'utilise une gestion d'erreur, Soit T un tableau dynamique
>
> On Error GoTo Tableau_est_vide
> 'Si le tableau T1 n'est pas initialisé, le traitement d'erreur permet
> d'ignorer le Ubound(T1)
> N = UBound(T)
> 'Traitement du tableau non vide
>
> On Error GoTo 0
> Exit Sub
>
> Tableau_est_vide:
> 'Traitement du tableau vide
> End Sub
>
>
> "david" a écrit dans le message de news:
>
> Salut,
>
> les tests avec nothing s'écrivent
> tbl_quelquonque Is Nothing
> et les tests avec null s'écrivent
> IsNull(tbl_quelquonque)
>
> Si ton tableau (tbl_qq) est un variant tu peux tester indiférement
> avec Nothing ou Null.
> Rq : un tableau n'est pas un objet en VB => test avec Null
>
> A+
>
>




Avatar
Driss HANIB
ou redimensionner systématiquement à 0
et ne commencer à remplir qu'à partir de 1
c'est cette version que j'ai prise pour ma part

Driss
"tristan" a écrit dans le message de
news:%

ou ij'ai deja utilisé ca pour justement commencer à creer des


enregistrement
dans le tableau.

j'aurai voulu qq chose de plus simple.

"Patrice Henrio" a écrit dans le message de
news:%
> Pour ma part j'utilise une gestion d'erreur, Soit T un tableau dynamique
>
> On Error GoTo Tableau_est_vide
> 'Si le tableau T1 n'est pas initialisé, le traitement d'erreur permet
> d'ignorer le Ubound(T1)
> N = UBound(T)
> 'Traitement du tableau non vide
>
> On Error GoTo 0
> Exit Sub
>
> Tableau_est_vide:
> 'Traitement du tableau vide
> End Sub
>
>
> "david" a écrit dans le message de news:
>
> Salut,
>
> les tests avec nothing s'écrivent
> tbl_quelquonque Is Nothing
> et les tests avec null s'écrivent
> IsNull(tbl_quelquonque)
>
> Si ton tableau (tbl_qq) est un variant tu peux tester indiférement
> avec Nothing ou Null.
> Rq : un tableau n'est pas un objet en VB => test avec Null
>
> A+
>
>