Eval d'une variable

cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 - 1 déc. 2006 à 11:15
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 1 déc. 2006 à 16:35
Bonjour,

J'ai une macro qui selon la langue de l'utilisateur écrit un texte en anglais ou en français.
Plutôt que faire un test sur la langue je voudrais savoir s'il est possible de faire un eval de ma variable. Par exemple j'ai trois variables :

TEXTE_EN = "English"
TEXTE_FR = "Français"
Language = "FR"

Je voudrais pouvoir faire un truc dans ce genre pour qu'il m'affiche "Français" dans la cellule A1 (cela ne fonctionne pas, j'ai testé )

ActiveSheet.Range("A1").Value = Eval("TEXTE" & Language)

Je ne sais pas si cela est possible à faire en VBA.



-=[JuS]=-



Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live

10 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
1 déc. 2006 à 11:43
Salut! Eval(quelquechose) c'est une fonction excel, vb?

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 déc. 2006 à 11:59
salut,
eval est bien une fonction excel oui, pour "3+2" par exemple.

par contre çà ne fonctionnera pas pour construire une chaîne. (c'est pas du PHP )
donc la réponse : beh non, pas possible ni en VBA ni en VB6
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 déc. 2006 à 12:50
Bonjour,

Je ne sais pas si la fonction Switch existe sous VBA.
Si oui : intéresse-toi à elle
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
1 déc. 2006 à 13:03
Le switch existe mais justement je ne voulais pas passer par là ...

Dur dur de passer d'un language objet à du VBA ... Régression quand tu nous tiens !




Merci pour vos réponses




-=[JuS]=-



Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 déc. 2006 à 13:09
Alors, si tu ne veux pas passer par la fonction Switch :

1) soit deux chaines de caractères composées de "mots" séparés par un "séparateur" de ton choix
2) soit deux tableaux dynamiques
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 déc. 2006 à 13:14
Maintenant, sous VB (je connais très mal VBA), on utilise volontiers pour celà des Fichiers de ressource... et c'est alors très simple...
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
1 déc. 2006 à 13:41
PCPT : Je ne connaissais pas cette fonction, et pire, je ne la trouve pas dans ma version d'Excel (je suis en Excel 2003 pourtant). Où la trouve-t-on ?

Pour répondre à la question, en VBA, il existe la méthode Evaluate par contre (documentée dans l'aide), à vue de nez, je dirais que ça correspond à ton besoin mais j'ai du mal à me rendre compte en fait.

Sinon, il y a peut être moyen de biaiser :
Ton cas c'est ceci :
TEXTE_EN = "English"
TEXTE_FR = "Français"
Language = "FR"

On pourrait envisager de le résoudre de la façon suivante, à condition que tu sois dans un user form :

    Dim Language As String
    Dim Ctrl As Control
    Language = "FR"
  
    For Each Ctrl In UserForm1.Controls
        If Ctrl.Name = "TEXTE_" & Language Then
            Worksheets("Feuil1").Range("A1").Value = Ctrl.Value
        End If
    Next

Ca fonctionne, par contre, je n'arrive pas à faire la même chose avec des objets textes directement dans une feuille Excel, la ligne 
For Each Ctrl In Worksheets("Feuil1").Controls
refuse d'être reconnue, alors qu'à priori, la syntaxe est bonne.

Molenn
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 déc. 2006 à 13:50
salut Molenn,
je ne sais pas "où" on la trouve ni quelles sont toutes ses possibilités puisque je ne fais pas de VBA... mais elle existe

et pour ton exemple, çà peut marcher uniquement parce que tu prends le nom des objets, or c'est impossible avec des variables
(sauf secret spécifique à VBA mais j'en doute)

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
1 déc. 2006 à 14:30
Aaah, je n'avais pas tilté que TEXTE_EN et TEXTE_FR étaient des variables !! Je lis TEXTE, j'imagine tout de suite Zone de texte
Vu comme ça, je comprends mieux à présent à quoi peut servir une fonction de type Eval ^^

Sinon, je ne cherche pas "où" on trouve EVAL dans le VBA, je cherche cette fonction dans EXCEL ^^ ... Moi, dans une cellule, quand je tape "=EVAL()", la fonction n'est pas connue. Ce qui est dommage, parce qu'en fait, si une fonction existe par le biais d'une formule Excel toute faite, on peut l'utiliser telle quelle en VBA, pas besoin de s'embêter à écrire de code.

Molenn
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
1 déc. 2006 à 16:35
Salut,

je confirme, Eval n'est pas fourni en aide, mais c'est bel et bien pris en compte.
En excel, je sais pas l'utiliser, mais en VBA :

MsgBox Application.Evaluate("12+3") ' donne 15

Pour un projet VB, utiliser la source de Renfield.

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Rejoignez-nous