Option base 1 [Résolu]

CrisseTof 57 Messages postés jeudi 5 août 2004Date d'inscription 2 juillet 2005 Dernière intervention - 27 août 2004 à 18:19 - Dernière réponse : cs_rene38 1858 Messages postés samedi 29 juin 2002Date d'inscription 17 octobre 2013 Dernière intervention
- 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 ?

Merci pour votre aide.

CrisseTof
Afficher la suite 

12 réponses

jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 27 août 2004 à 19:57
+3
Utile
A y est j ai trouve...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vastmoptionbase.asp

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
-------------------------------------------------

:big)
Cette réponse vous a-t-elle aidé ?  
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 27 août 2004 à 20:19
+3
Utile
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.

ciao...
BruNews, Admin CS, MVP VC++
Cette réponse vous a-t-elle aidé ?  
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 27 août 2004 à 18:29
0
Utile
Salut j viens d essayer ca et ca marche le premier indice est bien 1

Dim tr() As Integer
For i = 1 To 10
ReDim Preserve tr(i)
tr(i) = i
Next
MsgBox LBound(tr) & ", " & UBound(tr)

-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 27 août 2004 à 18:31
0
Utile
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)
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 27 août 2004 à 18:36
0
Utile
Essaie de le faire en enlevant le ParamArray....

PS: C est coi d ailleurs le ParamArray (si tu pouvais m explique ca serait cool)..

moi sans paramarray ca marche indice 1

-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
cs_liquide 1018 Messages postés samedi 22 mars 2003Date d'inscription 24 juin 2008 Dernière intervention - 27 août 2004 à 19:21
0
Utile
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)

je pense que ca vient de là

Bonne prog, poele_a_frire@hotmail.com
liquide
CrisseTof 57 Messages postés jeudi 5 août 2004Date d'inscription 2 juillet 2005 Dernière intervention - 27 août 2004 à 19:50
0
Utile
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)....
)
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 27 août 2004 à 19:54
0
Utile
Peu etre simplement que le paramArray est en base 0 et que tu ne peut pas le changer....

car si tu le quitte ca marche donc ca peut etre que ca....

J vais faire une petite recherche

@+
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
cs_liquide 1018 Messages postés samedi 22 mars 2003Date d'inscription 24 juin 2008 Dernière intervention - 27 août 2004 à 19:59
0
Utile
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

Bonne prog, poele_a_frire@hotmail.com
liquide
CrisseTof 57 Messages postés jeudi 5 août 2004Date d'inscription 2 juillet 2005 Dernière intervention - 27 août 2004 à 20:47
0
Utile
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.

Merci à tous
cs_dragon 2336 Messages postés samedi 14 juillet 2001Date d'inscription 5 mai 2009 Dernière intervention - 27 août 2004 à 22:02
0
Utile
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 1858 Messages postés samedi 29 juin 2002Date d'inscription 17 octobre 2013 Dernière intervention - 27 août 2004 à 23:03
0
Utile
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.