Excel - Exécuter formule stockée comme texte [Fermé]

Dav - 3 mars 2008 à 22:06 - Dernière réponse :  mouftie
- 7 déc. 2017 à 15:27
Bonjour,

Sous Excel, j'aimerais savoir s'il est possible d'exécuter, dans une cellule, une formule qui serait écrite dans une autre cellule en tant que simple chaîne de caractères.
Il serait ainsi possible de remplacer une interminable formule "SI" (sinon SI, sinon SI, etc.) par une recherche dans une matrice de formules, en fonction du cas qui se présente.

Par exemple - Supposons une feuille qui convertit des unités de mesure (Celsius à Fahrenheit, gallons à litres, etc.) :
- Un onglet "Conversion" contient deux cellules modifiables : A1="Valeur à convertir" et A2-"Conversion à appliquer" et une cellule non-modifiable A3-"Résultat".
- Un onglet "Dictionnaire des formules de conversion" contient deux colonnes A:NomFormule et B:Formule. Un exemple - en A2 il y aurait "Pouce->Cm" et en B2 "'=Conversion!$A$1*2.54
- Dans la cellule Conversion!A3, est-il possible d'utiliser les formules du "Dictionnaire des formules" ???

Autre exemple pour simplifier encore ma question :
- Cellule A1 : '=Si(B1=1;"Vrai";"Faux") (Noter l'apostrophe devant la formule qui en fait une simple chaine texte)
- Cellule B1 : 1
- Cellule A2 ???Execute formule inscrite dans A1??? : Vrai

Merci !
Afficher la suite 

20 réponses

eriiic 21188 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 4 mars 2008 à 19:53
+10
Utile
2
Bonjour tout le monde,

Il est effectivement possible de le faire sans vba mais avec une astuce.
Je le livre à titre d'info (vba permet plus de souplesse) mais pour un besoin ponctuel ça peut servir, surtout si on n'est pas à l'aise avec vba.

Sous un ancien excel (le 4 ?) il y avait la fontion =EVALUER(A2) qui permettait justement de calculer le résultat de la fonction ecrite en TEXTE dans A2. Par exemple A1: 5 A2: '=A1*2.54

La fonction (plus documentée) a été désactivée. Si je saisi en A3: =EVALUER(A2) j'ai droit à 'fonction non valide'.

Par contre, en passant par la définition d'un nom on arrive à passer.
Menu 'insertion / nom / définir...'
nom : fonction_variable
fait référence à : =EVALUER(Feuil1!$A$2)

En A3 je saisis le nom: =fonction_variable et j'obtiens le résultat de'=A1*2.54 soit 12.7

Je n'ai pas regardé dans le détail si c'est facilement applicable à ton cas car de toute façon tu as la solution en vba de gb, mais c'était l'occasion de rappeler cette astuce
eric
Bonjour,

Est il possible d'afficher, non pas l'adresse de la cellule, mais la valeur de cette dernière

cad aulieu d'afficher : A1*2.54, afficher (si A1=3) : 3*2,54
+1
Utile
Excellent petit truc ! Merci Eric.
En combinant avec la RechercheV et une indirection (INDIRECT), j'arrive à ajouter la souplesse nécessaire.
(Je me souviens maintenant de cette fonction des versions antérieur de Excel... et j'imagine qu'elle a été retirée pour raison de sécurité.)
Bonjour à tous encore. Voici une note supplémentaire.

Il semble que l'utilisation du petit truc fournit par Éric est convertit d'une manière ou d'une autre par Excel en Macro. Lorsque j'ouvre le chiffrier (sous Excel 2003 SP3), un message m'indique qu'il existe des macros Excel 4.0 (Bizarre !) et le fameux champ qui utilise la fonction EVALUER (C7) affichera une erreur si on choisit de ne pas exécuter les macros.

Sur mon poste de travail, je fais ce qui suit pour remédier à cette situation (deux solutions) :
1- Accepter d'utiliser les macros malgré l'avis. Cela permettra à la fonction EVALUER de s'exécuter.

OU

1- Ignorer l'avis à propos de la macro Excel 4.0 - c'est à dire : refuser l'exécution des macros.
2- Ouvrir le menu de définition de noms (Insertion/Nom/Définir)
3- Sélectionner le nom "FormuleEvaluee"
4- Ne rien changer, simplement appuyer sur le bouton "OK"
5- Le champ C7 devrait maintenant afficher une valeur.
gbinforme 14416 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 4 mars 2008 à 00:56
0
Utile
1
bonjour

Sous Excel, j'aimerais savoir s'il est possible d'exécuter, dans une cellule, une formule qui serait écrite dans une autre cellule en tant que simple chaîne de caractères.


La réponse est positive et je te donnes un exemple de réalisation : http://cjoint.com/?deaY7Hjvod

Il faut tout de même faire attention à l'écriture syntaxique des formules qui doit être sans erreurs.

Il serait ainsi possible de remplacer une interminable formule "SI" (sinon SI, sinon SI, etc.)

Quand on est noyé dans les "SI" c'est que l'organisation des données est à revoir ou qu'il faudrait essayer de réfléchir à d'autres fonctions plus faciles à maintenir comme effectivement une recherche dans une matrice de résultats.
Merci beaucoup gbinforme !
Comme ce besoin semble assez simple et doit être récurrent, j'eus cru qu'il était possible de le faire sans VBA... Mais après tout, les quelques lignes de code à appliquer sont toutes simples, j'aurais dû jeter un oeil de ce coté plus tôt.

Merci encore !
0
Utile
2
Bonjour,

Dav à Ecrit:
Excellent petit truc ! Merci Eric.
En combinant avec la RechercheV et une indirection (INDIRECT), j'arrive à ajouter la souplesse nécessaire.
(Je me souviens maintenant de cette fonction des versions antérieur de Excel... et j'imagine qu'elle a été retirée pour raison de sécurité.)


Pourriez-vous m'éclairer sur la méthode avec RECHERCHEV et fonction Indirect?

Merci d'avance,
La fonction RECHERCHEV permet de rechercher rapidement une valeur dans une matrice à partir d'un index. La fonction INDIRECT permet d'interpréter le contenu d'une cellule comme s'il s'agissait d'une référence à une plage. La conjugaison de ces différentes fonctions permet de pointer vers une cellule qui contiendra une formule à passer à la fonction EVALUER.
C'est plutôt complexe à expliquer en qq mots. Si tu veux plus de détails, créé un e-mail temporaire sur hotmail, écris le ici et j'enverrai un chiffrier exemple.
tracker54 6 Messages postés jeudi 30 juillet 2009Date d'inscription 5 août 2009 Dernière intervention > Dav - 31 juil. 2009 à 00:06
Bonsoir, merci pour ta réponse rapide, voici une adresse mail: tracker54@hotmail.fr
En fait j'avais créer un autre poste entre temps, tu trouveras plus d'explication dans le lien ci-dessous,
http://www.commentcamarche.net/...
eriiic 21188 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 31 juil. 2009 à 06:45
0
Utile
Bonjour tout le monde,

Pour que tout le monde puisse en profiter il est possible de déposer le fichier sur cijoint.fr et de coller le lien fourni ici.
eric
tracker54 6 Messages postés jeudi 30 juillet 2009Date d'inscription 5 août 2009 Dernière intervention - 31 juil. 2009 à 09:34
0
Utile
4
Bonjour, voici le lien du fichier,
http://www.cijoint.fr/cjlink.php?file=cj200907/cijUvjA1nG.xls
gbinforme 14416 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 31 juil. 2009 à 22:56
bonjour

Avec la méthode d'Éric que je salue, tu peux le faire ainsi en utilisant les références relatives et en introduisant une colonne de calcul :

http://www.cijoint.fr/cjlink.php?file=cj200907/cijmwYqnG1.xls

Il te faudra définir en relatif les noms pour les angles des coudes et autres paramètres.
tracker54 6 Messages postés jeudi 30 juillet 2009Date d'inscription 5 août 2009 Dernière intervention > gbinforme 14416 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 2 août 2009 à 18:07
Bonjour et merci gbinforme, ton exemple résoud mon problème même si je n'ai pas bien compris!!! Je vais l'intégrer dans mon fichier avec angle des coudes et tout le tralala...
Merci encore,
gbinforme 14416 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention > tracker54 6 Messages postés jeudi 30 juillet 2009Date d'inscription 5 août 2009 Dernière intervention - 2 août 2009 à 19:29
bonjour

même si je n'ai pas bien compris!!!

En fait tes noms pour les formules étaient nommés sur toute la colonne et si pour certaines fonctions cela fonctionne pour "EVALUER" il faut que la formule s'adresse à la cellule de la ligne concernée seulement.
tracker54 6 Messages postés jeudi 30 juillet 2009Date d'inscription 5 août 2009 Dernière intervention > gbinforme 14416 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 5 août 2009 à 11:41
OK, bien saisi maintenant... Merci encore
--
eriiic 21188 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 31 juil. 2009 à 19:55
0
Utile
1
Bonjour,

Beau fichier exemple dav

Oui, c'est bien une macro excel 4. Dans cette version les macros étaient des formules qu'on saisissait les unes en dessous des autres dans une feuille.
Et même si certaines fonctions comme supprimer.fichier() pourrait être considérées comme dangereuses elles semblent ne pas fonctionner sur les autres versions excel. Très peu de ces fonctions sont réutilisables, on peut donc accepter ces macros.
De toute façon les solutions demandent souvent du vba qui permet aussi beaucoup de choses...
Un indice de fiabilité pourrait être le nombre de messages déposés sur forum par la personne te fournissant le fichier.
eric
Merci Éric !
(J'ai pas de mérite, c'était ton truc !)

Une dernière note à propos des formules versus le VBA.
Je programme personnellement du VBA depuis 12 ans. Je le connais bien. Cependant je l'utilise de moins en moins... Pas que ce ne soit pas efficace (au contraire, cela fait très bien le travail et souvent plus facilement qu'avec des enchaînement de formules) mais ce n'est pas portable.
On voit de plus en plus des solutions bureautique Web (GoogleDocs, ThinkFree, Zoho, etc.). Lorsqu'on créé une feuille Excel dans laquelle on réussit à implémenter la logique entièrement par des formules, on accroit la portabilité de l'application et les possibilités d'en faire le partage.

Bonne fin de semaine à tous et au plaisir !
0
Utile
Bonjour
il est même possible de faire comme ça :
par exemple définir un nom "test1" comme suit : =EVALUER(DIM)
où DIM est aussi le nom d'une plage de cellules dans une colonne. Ainsi, pour chaque ligne "test1" renverra une valeur selon la valeur de la cellule de la ligne de "DIM".
c'est sympa pour ne pas à chaque fois définir un nom pour une tâche qui va se répéter.
salutations.