Option base 1 [Résolu]

Signaler
Messages postés
57
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
2 juillet 2005
-
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
-
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

12 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
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)
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 150 internautes nous ont dit merci ce mois-ci

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
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++
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 150 internautes nous ont dit merci ce mois-ci

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
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)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
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)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
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)
Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

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
Messages postés
57
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
2 juillet 2005

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)....
)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
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)
Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

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
Messages postés
57
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
2 juillet 2005

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
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
4
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
-------------------------------------------------
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
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.