CrisseTof
Messages postés57Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention 2 juillet 2005
-
27 août 2004 à 18:19
cs_rene38
Messages postés1858Date d'inscriptionsamedi 29 juin 2002StatutMembreDernière intervention17 octobre 2013
-
27 août 2004 à 23:03
Bonjour,
J'ai créé une fonction dont le nombre de variables est variable :
function calcul(i as integer, ParamArray valeur() As Variant)
J'ai mis Option base 1 au début de la procédure et mon vecteur valeur() commence quand même à l'indice 0.
De plus, si je définis un tableau ou un vecteur son premier indice est bien 1, donc a priori ca devrait marcher...
Est-ce quelqu'un sait comment je peux faire pour que le premier indice soit 1 et non pas 0 ?
La ils disent que le Option Base n affecte pas le ParamArray
enfin si j ai bien compris
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 août 2004 à 20:19
Cette option est une ineptie, un bon developpeur ne devrait jamais l'employer. Elle va forcer le compilo a remettre les index corrects (base 0) a la place de ceux ecrits. Mieux vaut apprendre a gerer les tableaux correctement, il est evident que le 1er elem d'un tableau est d'offset 0 rapport a l'adresse de base. Le reste n'est que philo sterile dont il convient de se debarrasser.
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 27 août 2004 à 18:31
oups j me suis trompe c est pas ce que tu demandai ;)
attends je reessai....
desole repondu trop vite
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------
:big)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_liquide
Messages postés1016Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention24 juin 2008 27 août 2004 à 19:21
salut, je serais d'avis a ce que tu mettes le Option base 1 dans un module ou en entete de la form, pour qu'il soit initialisé au démarrage et non dans une procédure.
De plus si ton "lbound" de ton tableau le remet a 0, il doit perdre le option base
par exemple si tu as :
option base 1
dim Tab(0 to 5) as string
ton tableau perd le option base, il doit y avoir en qqe sorte un forcage sur le 0.
si par contre :
option base 1
dim Tab(7) as string
il devrait le garder, mais c'est a tester. donc il prendrait de "1 a 7)
CrisseTof
Messages postés57Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention 2 juillet 20051 27 août 2004 à 19:50
J'ai essayé de le mettre partout mais ca change rien, VB accepte pas option base dans une procédure
Donc si quelqu'un a une idée je suis preneur
Merci
(
ParamArray ca permet de définir une fonction dont le nombre de variables n'est pas fixe :
si tu veux calculer la moyenne de plusieurs nombres, tu peux faire :
function moyenne (ParamArray valeur() as double)
dim i as integer
for i=1 to ubound(valeur)
moyenne=moyenne+valeur(i)
next
moyenne=moyenne/ubound(valeur)
end function
tu peux faire moyenne(1, 5, 9) ; moyenne(4, 8)....
)
cs_liquide
Messages postés1016Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention24 juin 2008 27 août 2004 à 19:59
1 seule fois suffit dans un module ou en entete.
mais peut etre que ton tableau est a 0 d'emblé et dans ce cas il ne prend pas le option base.
apres, peut etre faut il voir, les dim, redim et redim preserve, si il y en a et comment est initialisé ton tableau
CrisseTof
Messages postés57Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention 2 juillet 20051 27 août 2004 à 20:47
OK, merci jrivet, c'est vrai que c'est pas très clair parce que c'est en anglais, mais j'ai bien l'impression qu'on peut pas mettre Option base 1 pour ParamArray, mieux vaut commencer par 0 tout le temps, on est sûr de pas se tromper.
cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 20096 27 août 2004 à 22:02
de toute façon, à aprs B6.0 et moins, tout les autres language commence à 0, docn habitut toi, ça sera l'idéal quand tu voudras passer à un autre langage
je connais pleins de monde qui se sont cassé la gueulle en faisant pleins de possibilité que VB6.0 offrais et une fois tombé sur un autre language, ben ils ont bloquer là, ben ils ont perdu beaucoup de temps mettons
donc il est toujours préférable utiliser une base qui début à 0, de toute façon en mémoire, il fait ubound - lbound
-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
cs_rene38
Messages postés1858Date d'inscriptionsamedi 29 juin 2002StatutMembreDernière intervention17 octobre 201311 27 août 2004 à 23:03
Salut CrisseTof
En bon français dans MSDN :
La base d'un tableau créé à l'aide du mot clé ParamArray a pour valeur zéro ; l'instruction Option Base n'affecte ni le mot clé ParamArray (ni la fonction Array, lorsqu'elle est qualifiée à l'aide du nom de sa bibliothèque de types, VBA.Array, par exemple).
L'instruction Option Base modifie uniquement la limite inférieure des tableaux situés dans le même module que l'instruction.