|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Inscription : octobre 2005 Messages : 471 ![]() |
Bonjour à toutes et tous !
Petit pb propre à l'utilisation de VBA: Dans une fonction ayant 3 paramètres (Param1, Param2, Param3) J'ai une boucle qui fait des traitements et qui a parfois besoin de Param1, Param2 ou Param3. C'est la valeur ValX qui me le détermine (égale à "Param1", "Param2" ou "Param3" selon les besoins). Comment utiliser ValX pour qu'elle me sorte la valeur des paramètres et non leur nom (dont je me fous) ?? J'ai utilisé la fonction Eval() sans succès. Une autre idée ? Bien à vous,
__________________
puis et puis et encore . Sinon sans oublier et
|
|
|
00
|
|
|
#2 | ||
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 462 ![]() |
Ta boucle est à l'extérieur de ta fonction oU à l'intérieur ?
Peut-être ceci t'aidera Code :
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
||
|
|
00
|
|
|
#3 | ||
|
Membre éclairé
![]() Inscription : octobre 2005 Messages : 471 ![]() |
Hello ! Merci marot_r
Ma boucle est dans ma fonction. Mon problème n'est pas très critique mais c'est déja la deuxième fois que je ressens ce genre de besoin. Je m'en tire effectivement toujours avec un SELECT CASE. Mais dans certain cas, ça peut être fastidieux. Mon code est un peu complexe tel qu'il est et j'ai peur que vous ne passiez un temps inutile à le comprende. J'en poste un qui correspond à mon besoin: Code :
Bien à vous !
__________________
puis et puis et encore . Sinon sans oublier et
|
||
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() jean mauryInscription : mars 2009 Messages : 116 ![]() |
Bonjour.
Selon moi il faut remplacer : par Cdlt. |
|
|
00
|
|
|
#5 | ||
|
Membre éclairé
![]() Inscription : octobre 2005 Messages : 471 ![]() |
Merci jj4822,
dans ma fonction, ValX est une valeur d'un champ dans un jeu de données. Je lis ce jeu de données qui m'indique quelle valeur prendre (Param1, Param2, Param3) Code :
__________________
puis et puis et encore . Sinon sans oublier et
|
||
|
|
00
|
|
|
#6 | ||||
|
Membre habitué
![]() jean mauryInscription : mars 2009 Messages : 116 ![]() |
Si l'on met Param1 entre guillemet, VBA considere que la valeur est egale au texte Param1 et non a la valeur de la variable Param1.
A chaque fois que j'utilise une variable je fais de la maniere suivante : Code :
Code :
Cdlt. |
||||
|
|
00
|
|
|
#7 | ||
|
Membre éclairé
![]() Inscription : octobre 2005 Messages : 471 ![]() |
Non. En étant plus clair :
Code :
Est-ce plus clair ??
__________________
puis et puis et encore . Sinon sans oublier et
|
||
|
|
00
|
|
|
#8 | ||
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 462 ![]() |
Que penses-tu de
Code :
comme cela tu va évaluer la fonction GetParam1, getParam2 ou getParam3 selon la valeur de ValX. Je ne suis pas sur que cela simplifie vraiment ton code car c'est un select case déguisé mais cela devrait marcher. Note que tu perds aussi tous contrôles à la compilation sur le type de tes données et que tu te retrouves à manipuler des variables globales ce qui est toujours à faire avec précaution. Il me semble d'ailleurs que si tu veux appeler des fonction il y a d'autres mécanismes que le Eval(). A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
||
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : octobre 2005 Messages : 471 ![]() |
Oui, ça marcherait mais comme tu dis, ça ne simplifiera pas mon code et ça revient en même qu'un Select Case.
Merci de ta réponse en tout cas !
__________________
puis et puis et encore . Sinon sans oublier et
|
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() jean mauryInscription : mars 2009 Messages : 116 ![]() |
Bonsoir.
Pour eviter les case ou autre, pourquoi ne pas : 1) 1 1ere table deja existante contenant le champ "MonParametre" 2) 1 2eme table contenant deux champs. Le 1er champ "parametre" contient les valeurs param1, param2 etc, le 2eme champ "Valeur" contient les valeurs correspondantes ("A", "B" etc). 3) 1 requete rapprochant les deux tables et faisant ressortir la valeur correspondante au Parametre choisi. Si la 1ere table contient "param1" alors la requete fait apparaitre "A". Dans le module, on recupere la valeur de la requete (ici "A"). Il suffit ensuite de rapprocher ValX de la valeur recuperee dans la requete. Valx est donc alors egale a "A" dans l'exemple et non plus a "param1". Avantage supplementaire : si je dois rajouter un param4, il suffit de mettre a jour la 2eme table. Idem si la valeur de Param1 (ou param2 etc) change. J'espere avoir apporte une reponse satisfaisante. Cdlt. |
|
|
10
|
|
|
#11 | ||
|
Membre Expert
![]() |
bonjour
Faisons comme ceci pour voir: Code :
@+ |
||
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
Le type de variable Collection peut faire l'affaire : Code :
|
||
|
|
10
|
|
|
#13 |
|
Membre éclairé
![]() Inscription : octobre 2005 Messages : 471 ![]() |
Keita,
Ta fonction Essai ne fait que renvoyer la valeur que tu lui as donné en paramètre. donc si ValX= "Param1", il va me ressortir exactement "Param1". JJ4822, Ted001 Vos deux solutions se ressemblent, l'un avec une table l'autre une collection. C'est effectivement une bonne approche, mais qui implique avant d'executer le code de ma fonction de remplir la table ou la collection des paramètres. J'aurais peut être la préférence pour une collection qui est facile à créer et facile à manipuler. J'aurais simplement cru qu'il existait dans VBA une fonction toute faite qui permettait d'interpréter une chaine de caractère comme une valeur. Mais ça n'est peut être pas possible. Je clos le sujet, merci à JJ4822 et Ted001 pour leurs meilleures réponses et merci à vous tous!!
__________________
puis et puis et encore . Sinon sans oublier et
|
|
|
00
|
|
|
#14 | |
|
Membre Expert
![]() |
bonjour
Citation:
@+ |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com