VBA - Evaluate (formule)

vgendron

XLDnaute Barbatruc
Bonjour à tous

j'ai un souci avec la fonction Evaluate
dans le fichier ci joint (issu d'un post sur lequel j'essaie de proposer une solution...)
par VBA je colle une formule à rallonge dans le tableau FU14:TU23

dans le code, je commence par identifier les adresses à utiliser dans la formule (DebPeriodeX et FinPerdiodeX)
je fabrique la formule
et je la colle et la tire..tout ca. c'est OK, ca fonctionne bien

maintenant. plutot que de coller la formule, je souhaite coller le RESULTAT de cette formule
donc.. je fais intervenir la fonction EVALUATE.. enfin.. j'essaie..
je ne comprend pas comment fonctionne cette fonction..
y a t il une syntaxe particulière? des impossibilités d'utilisation?

dans le code. j'ai essayé plusieurs syntaxes...
avec ou sans "=" dans la formule. meme résultat
les Résultats me donnent tous une erreur 2015
sauf les résultats 4 et 8: qui eux. me redonnent la formule...???

si vous avez des idées sur le pourquoi comment..

sinon. ca va se finir en copier collage spécial valeur..:-D
 

Pièces jointes

  • DEMO.xlsm
    204.4 KB · Affichages: 46

eriiic

XLDnaute Barbatruc
Bonjour,

La formule est trop longue, 250 caractères maxi pour vba.

En passant par un nom ça va :
VB:
        ActiveWorkbook.Names.Add Name:="test", RefersTo:=formule
        Resultat2 = [test]
à voir si tu obtiens le résultat attendu.
Comme j'ai vu que tu as une référence relative je me demande s'il ne sera pas sensible à la cellule active.

On bien extraire en plusieurs morceaux au niveau des + et reconstituer l'ensemble ensuite si tu tiens aux Evaluates
eric
 
Dernière édition:

Si...

XLDnaute Barbatruc
Bon_soir
j'ai un souci avec la fonction Evaluate
...maintenant. plutot que de coller la formule, je souhaite coller le RESULTAT de cette formule
donc.. je fais intervenir la fonction EVALUATE.. enfin.. j'essaie..
je ne comprend pas comment fonctionne cette fonction..
y a t il une syntaxe particulière? des impossibilités d'utilisation?
...si vous avez des idées sur le pourquoi comment..

Autre raison, tiré de l'aide :
La méthode Evaluate n'est réservée qu'à certains types de noms, les chaînes n'en font pas partie !
Pour celles-ci, on passe par les [].
 

vgendron

XLDnaute Barbatruc
Hello !!
Enfin de retour !
Je vous adresse tous mes voeux pour cette nouvelle année !

et je vous remercie pour ces réponses
Donc.. pas plus de 250 caractères: Noté !, j'irai tester la solution du Nom

et si je comprend bien, Evaluate n'est donc pas strictement équivalent à []
j'imagine que la meme subtilité réside entre Range("A1") et [A1]
moi qui pensais que c'était juste une écriture "simplifiée"
 

eriiic

XLDnaute Barbatruc
Bonjour,

pour moi si, [] est l'écriture raccourcie de Evaluate lorsque les [] sont utilisables. Peut-être que Si... nous en dira plus, je n'ai pas trouvé ce qu'il citait dans l'aide (2010).

Mais Range("A1") n'est pas tout à fait équivalent à [A1], en terme de performance vu que ce dernier est un Evaluate.
eric
 

Dranreb

XLDnaute Barbatruc
Bonjour.
.[TexteConstant] est strictement équivalent à .Evaluate("TexteConstant")
.Evaluate(ExpressionVariable) n'est pas traduisible à l'aide de crochets droits.
La méthode Range renvoie toujours un objet Range, tandis que la méthode Evaluate est susceptible de renvoyer d'autres choses selon l'expression spécifiée. Elle est un peu moins performante, c'est vrai, mais compte tenu de ce qu'ils doivent de toute façon être utilisés le moins souvent possible l'un comme l'autre, on peut tout à fait considérer en pratique que .[RéfPlage] est une écriture simplifiée de .Range("RéfPlage")
 

Statistiques des forums

Discussions
312 104
Messages
2 085 326
Membres
102 862
dernier inscrit
Emma35400