cs_samouille666
Messages postés12Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention11 décembre 2006
-
25 mai 2004 à 13:35
kanelesavant
Messages postés9Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 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.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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...
pcpunch
Messages postés1243Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention18 février 20195 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"
cs_samouille666
Messages postés12Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention11 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.
cs_samouille666
Messages postés12Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention11 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
cs_koolstuff
Messages postés4Date d'inscriptionlundi 15 mars 2004StatutMembreDernière intervention23 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
cs_koolstuff
Messages postés4Date d'inscriptionlundi 15 mars 2004StatutMembreDernière intervention23 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).
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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 ?
cs_koolstuff
Messages postés4Date d'inscriptionlundi 15 mars 2004StatutMembreDernière intervention23 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.
melenn
Messages postés2Date d'inscriptionlundi 3 février 2003StatutMembreDerniè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
kanelesavant
Messages postés9Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 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
kanelesavant
Messages postés9Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 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
kanelesavant
Messages postés9Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 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
kanelesavant
Messages postés9Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 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