Petit probleme de test

cs_samouille666 Messages postés 12 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 11 décembre 2006 - 25 mai 2004 à 13:35
kanelesavant Messages postés 9 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 juillet 2008 - 16 avril 2008 à 19:52
samouille666

Voila la question est un, peu ras de terre mais j'ai pas trouve alors bon...
access2000, les fonctions "isempty" , "isnull" ne permette pas de verifier qu'un tableau est vide.
Ubound et Lbound declenche une erreur...
"Not is Nothing" ne fonctionne pas non plus ...
En fait aucune fonction ne permet de verifier qu'un tableau declarer n'a pas été initialiser.

20 réponses

pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
25 mai 2004 à 13:53
Oui j'ai le mm prob, j'ai ttrouvé une seule parade afin de ne pas faire bugguer le vode, mais c pas propre (On error goto...)

Dim Tableau() As String

On Error GoTo Vide
If Tableau(0) <> vbNullString Then GoTo PasVide Else GoTo Vide

PasVide:
MsgBox "Pas vide"
Exit Sub

Vide:
MsgBox "Tableau vide"

PS: c pas top, mais pour le moment c la seule chose que g trouver!!!!

Si qq a mieux????
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 mai 2004 à 14:18
n effet, a par utiliser un On Error Goto ca n'est pas très concluant....

attention, dans les options de compilation, on peut déconnecter la verification des tailles des tableaux, donc, je ne sais trop si cela fonctionne alors...

Tu peux au pire stocker un compteur du nombre d'elements de ton tableau...
0
carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
25 mai 2004 à 14:41
bonjour,

le isempty ne fonctionne QUE POUR les variables (pas les tableaux) de type VARIANT uniquement.

Pour ma part, je fais ceci :

Dim tableau(10) As String
Dim i As Integer
Dim vide As Boolean

vide = True

Do Until i = 10
If tableau(i) <> "" Then vide = False
i = i + 1
Loop

Je n'ai plus qu'à tester la variable boolean VIDE pour savoir si elle est restée à VRAI ou si une donnée l'a changer en FAUX

Colibri
0
cs_samouille666 Messages postés 12 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 11 décembre 2006
25 mai 2004 à 16:32
merci a tous , j'ai conserve la solution du booleen ...
samouille666
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
25 mai 2004 à 17:18
Dsl carnez mais ton code ne fonctionne que si un tableau a été déclararé!!!

Je ne pense pas que c la question au depart !! a moin que g pas compris!!!

essaie avec un tableau dynamique:
Dim Tableau() as string

ton code va bugger!!!!

Enfin pour mon exemple c dans le cas d'un tableau dynamique vide, c'est a dire sans aucun enregistrement, comme apres un "erase"!!!!
et c la seule facon que g trouvé!!!

Ps: sinon il y a plus simple et plus rapide que ton code :

Dim tableau(1 To 10) As String
If Trim(Join(tableau, "")) = vbNullString Then MsgBox "tableau vide"

voila ++
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
25 mai 2004 à 17:28
Renfield-->essayer de stocker le nb d'element du tableau, mais mm prob si pas diméntionné, alors bug!!!

c'est a peine plus propre lol!!!!

Dim tableau() As String
Dim nb As Integer

On Error Resume Next
nb = UBound(tableau)

If nb > 0 Then MsgBox "tableau Diméntionner" Else MsgBox "tableau non Diméntionner"

Ps: je pense qu'il n'est pas possible de tester si un tableau dynamique posséde au moin un enrg sans bug!!!! ????

Question ouverte???
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 mai 2004 à 20:04
j'utilise dans mes developpements actuels une classe qui joues le role de pile

j'ai dans un premier temps utilisé une gestion d'erreur pour savoir s'il y avait des elements dans mes piles

j'ai finallement conservé le noombre d'elements dans une variable... il est simple de tester si 'Count' = 0 ....
0
cs_samouille666 Messages postés 12 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 11 décembre 2006
26 mai 2004 à 09:11
dites moi ça a l'air d'exite pas mal les conscience de ce forum.
Je remercie pcpunch pour son assiduité à repondre "exactement " a la question, il a raison tout part d'un tab dynamique et le prob est dans la non declaration justement...(puisque des que le tab est declare il est rempli de variable "empty" visiblement un typename() le confirme)

Le probleme avec ton "on error" pcpunch c'est que au moment ou je debugg je ne sais pas du tout ce que le compilo fout si une autre erreur se declare. Je sais que le type d'erreur sur un tableau dynamique non initialise (mais declaré) que l'on essais de mesure (ubound()) est '9' , un err.number me fourni ce renseignement mais dans le cas ou une autre erreur se declare comment je fais pour qu'il reparte sur la ligne ou est née l'erreur? (me suis je bien exprimé? lol)

Renfield me parle de pile, mais je suis un petit nouveau dans la prog desole ça je connais pas ...

j'ai donc pris la solution booleen car il me suffit au moment ou je commence a le remplir (le tab) de changer sa valeur.

samouille666
0
cs_samouille666 Messages postés 12 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 11 décembre 2006
26 mai 2004 à 10:03
bon pcpunch a la palme ...
son code :
Dim tableau(1 To 10) As String
If Trim(Join(tableau, "")) = vbNullString Then MsgBox "tableau vide"

marche avec un tableau dynamique non dimensionne.
neanmoins a partir d'une certaine longeur de tableau genre quelque millier de case on peut se demander si au niveau temps de calcul le booleen n'est pas une meilleur solution.
a mediter
merci a tous en tous cas j'ai plus de solutions et de pistes que jamais
samouille666
0
cs_koolstuff Messages postés 4 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 23 février 2006
22 févr. 2006 à 23:56
Si je peux me permettre, je me suis inspiré de tout ce que vous avez dit (à peu près) pour sortir ça :

Public Function Array_Count(arr As Variant)
On Error GoTo errCount
If UBound(arr) <> -1 And LBound(arr) <> -1 Then
Array_Count = UBound(arr) - LBound(arr) + 1
End If


Exit Function


errCount:
Array_Count = 0
End Function

Utilisation :

Dim arr() as Integer
MsgBox Array_Count(arr)
'renvoi 0

Dim arr(1 To 5) as Integer
MsgBox Array_Count(arr)
'renvoi 5

Dim arr(0 To 5) as Integer
MsgBox Array_Count(arr)
'renvoi 6
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 févr. 2006 à 08:37
c'est pas mal, quoi qu'un peu gourmand, si utilisé trop souvent....

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
cs_koolstuff Messages postés 4 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 23 février 2006
23 févr. 2006 à 08:42
oué c'est un peu gourmand comme tu dis mais c'est la seule solution que j'ai trouvé qui renvoi un résultat "propre". J'ai passé une heure et demi sur le net hier soir à éplucher toutes les docs et les forums et je n'ai absolument rien trouvé. Je ne suis pas un pro du VB mais c'est quand même étonnant de galérer autant pour compter les éléments d'un tableau (à une dimension dans mon cas).
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 févr. 2006 à 08:51
il t'est pas possible de conserver le nombre d'elements dans une
variable.... et de se baser dessus, pour connaitre, a chaque instant le
nombre d'elements ?

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
cs_koolstuff Messages postés 4 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 23 février 2006
23 févr. 2006 à 09:18
Si bien sûr mais je trouve que ça fait trop "bidouillage" d'autant plus qu'il faut entretenir une variable compteur à chaque altération du tableau ce qui peut être source d'ennuis.
Ca oblige pour un seul tableau à gérer 2 objets (au sens variables).
D'autant plus que quand on gère une grande quantité de tableaux, ça oblige à créer un compteur pour chaque et donc doubler les déclarations.

Ma fonction Array_Count doit pouvoir s'optimiser pour être moins couteuse, je trouve ce système surtout plus fonctionnel.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 févr. 2006 à 09:46
ok.... tout dépend du contexte ^^

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
melenn Messages postés 2 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 5 septembre 2007
10 mai 2007 à 12:46
Je viens moi aussi de me cogner à ce problème : tester proprement si un tableau dynamique est vide (c.à.d. non initialisé, et non un tableau "plein de  vide"). Comme il a été dit, une (la?) solution est de tester une erreur. Dans mon cas :

   Public Function IsEmptyArray(tbl As Variant) As Boolean

         Dim n As Integer



         On Error Resume Next
         n = LBound(tbl)
         If Err Then IsEmptyArray = True
    
   End Function


et ensuite dans le corps de code :

   If IsEmptyArray(MonTableau) then ...

Y aurait-il mieux ?
0
kanelesavant Messages postés 9 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 juillet 2008
16 avril 2008 à 19:52
kanelesavant
marche avec un tableau dynamique non dimensionne.
neanmoins a partir d'une certaine longeur de tableau genre quelque millier de case on peut se demander si au niveau temps de calcul le booleen n'est pas une meilleur solution.
a mediter
0
kanelesavant Messages postés 9 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 juillet 2008
16 avril 2008 à 19:52
kanelesavant
marche avec un tableau dynamique non dimensionne.
neanmoins a partir d'une certaine longeur de tableau genre quelque millier de case on peut se demander si au niveau temps de calcul le booleen n'est pas une meilleur solution.
a mediter
0
kanelesavant Messages postés 9 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 juillet 2008
16 avril 2008 à 19:52
kanelesavant
marche avec un tableau dynamique non dimensionne.
neanmoins a partir d'une certaine longeur de tableau genre quelque millier de case on peut se demander si au niveau temps de calcul le booleen n'est pas une meilleur solution.
a mediter
0
kanelesavant Messages postés 9 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 juillet 2008
16 avril 2008 à 19:52
kanelesavant
marche avec un tableau dynamique non dimensionne.
neanmoins a partir d'une certaine longeur de tableau genre quelque millier de case on peut se demander si au niveau temps de calcul le booleen n'est pas une meilleur solution.
a mediter
0
Rejoignez-nous