Jongler avec la fonction Evaluate

gueri

XLDnaute Nouveau
Bonjour

D'habitude j'arrive à me débrouiller avec VBA mais là je suis tombé sur un os et je n'arrive pas à trouver des réponses sur le net.
J'ai mis le bout de code qui pose problème dans le fichier joint. Le but est d'avoir la liberté d'exécuter des formules (feuille TEMPLATE) dans une autre feuille (DATA). Chaque ligne de formule est automatiquemnt annotée A1, A2, etc. et vient ainsi compléter le nom de la colonne résultat dans la feuille DATA. Dans mon exemple, la colonne résultat s'appelle toujours 'Total' mais la première formule va créer une colonne A1-Total, la deuxième A2-Total, etc.

Comment ça fonctionne. Je créé dans mon code VBA un tableau dynamique 'ZoneTT' à partir de la feuille DATA et j'applique chaque formule en utilisant la fonction EVALUATE. Dans ma formule, je peux nommer mes colonnes de la feuille DATA [A], et [C]. Quand je lis ma formule, je remplace '[' par 'ZoneTT[' et ensuite j'exécute EVALUATE.

Ainsi par exemple, la formule [A]++[C] se transforme en ZoneTT[A]+ZoneTT+ZoneTT[C].

Mon code fonctionne mais toutes les formules ne passent pas. En fait, vous verrez que je n'ai aucun résultat pour A5 et A6. En fait visiblement c'est le AND qui ne passe pas. J'ai essayé de triturer dans tous les sens mais je n'arrive pas à faire fonctionner une formule avec AND.

Alors s'il y a parmi vous des connaisseurs d'EVALUATE, leur avis m'intéresse fortement.
Merci.


Cordialement
 

Pièces jointes

  • Test EVALUATE.xlsm
    25.5 KB · Affichages: 73

job75

XLDnaute Barbatruc
Re : Jongler avec la fonction Evaluate

Bonsoir gueri, bienvenue sur XLD,

Et félicitations pour la qualité de ce 1er post :)

Dans ce problème Evaluate évalue des formules matricielles et il faut respecter les règles :

- AND (ET) doit être remplacé par un produit, avec le signe *

- les arguments de la fonction IF (SI) doivent être des matrices de mêmes dimensions.

Donc remplacez les formules des "Tag" A5 et A6 par :

Code:
IF({TRUE;TRUE;TRUE;TRUE}*TRUE,[A],[B])
IF(([A]=2)*([B]=3),[B]+[C],[A])
Edit : pour A5, si l'on veut une matrice de TRUE qui s'adapte au tableau :

Code:
IF(ISNUMBER(ROW([A])),[A],[B])
Bonne soirée.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Jongler avec la fonction Evaluate

Bonjour gueri, le forum,

Je découvre quelque chose d'intéressant.

Pour le tag A5 il suffit de mettre un seul TRUE dans la matrice :

Code:
IF({TRUE}*TRUE,[A],[B])
Il y a extension automatique de la matrice (ça je connaissais).

Mais les accolades sont indispensables sinon Excel ne comprend pas (là je découvre).

Testez avec le fichier joint.

Bonne journée.
 

Pièces jointes

  • Test EVALUATE(1).xlsm
    32 KB · Affichages: 55

gueri

XLDnaute Nouveau
Re : Jongler avec la fonction Evaluate

Merci job75 pour l'accueil et pour ta réponse !!!
Effectivement tu viens de résoudre mon problème ;o)
Le Tag A5 c'était vraiment un test bidon pour montrer que la AND ne fonctionnait pas mais ta démonstration avec {TRUE} est magistrale.
Pour une question de lisibilité pour l'utilisateur, je vais garder une syntaxe "x AND y" ou "x OR y" et je remplacerai AND par '*' et OR par '+' avant l'évaluation.
Je viens de tester, c'est tout bête et ça fonctionne nickel.
Encore un grand merci à toi.
 

gueri

XLDnaute Nouveau
Re : Jongler avec la fonction Evaluate

Bonjour,

Ah! ça m'énerve! Je testais autre chose cette fois-ci qui ne marche pas. Je veux faire un fichier de test pour montrer et là ça marche! Grrrrr!!! Bon, je vais regarder ça de plus près avant d'envoyer n'importe quoi!

Cette fois-ci, je souhaitais avoir dans le 'sinon' de la condition non plus [A] mais T([A]) afin de retourner du texte. Oui, car je vais manipuler du texte aussi et si la cellule est vide, je ne veux pas qu'il me retourne 0 mais "".
 

gueri

XLDnaute Nouveau
Re : Jongler avec la fonction Evaluate

Oui, je me suis douté que c'était un problème de matrice mais j'ai réussi à le faire fonctionner ainsi. J'aimerais bien comprendre pourquoi même si je ne devrait pas l'utiliser. Je vais essayer de te montrer mais pour l'instant je ne suis pas devant l'ordinateur. Sinon merci pour l'astuce que tu m'as donné.
 

gueri

XLDnaute Nouveau
Re : Jongler avec la fonction Evaluate

Ok je sais pourquoi ça marchouillait ! Cela dépendait de la valeur de la première ligne. Ta méthode ""& me plait bien. J'ai besoin de simuler une application c'est pour cela que je n'utilise pas le masquage excel. Je poursuis mon code, ça avance :) Merci.
 

Discussions similaires

Statistiques des forums

Discussions
312 082
Messages
2 085 167
Membres
102 801
dernier inscrit
mrclbl