[Excel] Appliquer une formule variable

Bonjour,

je cherche à appliquer une formule stockée dans un tableau, à une valeur donnée. Par exemple, si j'ai un tableau du type :
.......A........B..........C..........D
1 1*x+1 2*x+2 3*x+1 4*x+1
2 1*x+2 2*x+2 3*x+2 4*x+2
3 1*x+3 2*x+3 3*x+3 4*x+3
4 1*x+4 2*x+4 3*x+4 4*x+4
5 1*x+5 2*x+5 3*x+5 4*x+5
6 1*x+6 2*x+6 3*x+6 4*x+6
Je voudrais pouvoir calculer, lorsque je donne une adresse de cellule et un x, la valeur de la fonction.
Exemple :
Cellule B3, x=-2
Résultat : -1
Contraintes (sinon c'est pas drôle) :
- Pas de macro
- Office 2003

NB : J'ai trouvé un fichier qui fait presque ce que je veux, en utilisant une fonction EVALUER(), laquelle ne marche que lorsqu'elle est utilisée dans le champ "Données sources"-> "Série" d'un graphique O_o
X=-5+(LIGNE(A1:A100))*0,1
Y=EVALUER(Courbe!$B$2)
(la cellule B2 contient une formule avec X en inconnue)
Couplé avec des EQUIV(), INDEX() et autres SUBSTITUE(), ça marcherait, mais je ne pervient pas à utiliser EVALUER() dans la feuille de calcul :(

J'espère avoir été compréhensible, merci pour votre aide.
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. Contributeur
    bonjour

    avec la réponse d'eriiiic, tu as une solution qui te permet de tout faire.... regarde le post 11, comme cette macro XL4 sont des macros natives elle sont utilisables en tant que formule dans ce qu'on appelle une formule nommée.
    2
    1. Visiblement il n'y a pas moyen (sans macro) de transformer un texte en formule ; je dirais donc que la seule solution est de rentrer les formules comme des... formules ! Mais le truc pour être économique en calcul est de ne pas les évaluer si c'est inutile. Il faut donc que, au lieu par exemple de 2*x+4 en C5 (je reprends le fichier fourni en exemple), tu écrives :
      =SI(ET($Feuille2.D3=4;$Feuille2.D4=2);2*x+4;"")

      Evidemment au lieu de mettre 4 et 2 en dur tu récupères les numéros de ligne et de colonne qu'il faut.

      J'ose espérer que la sémantique du tableur est suffisamment bien programmée pour ne pas évaluer 2*x+4 dans le cas où le test est faux...

      Ainsi tu évalueras "beaucoup" de SI (avant que ce soit sensiblement lent il doit y en avoir vraiment beaucoup !) et une seule "formule compliquée".
      0
      1. Contributeur
        bonjour Raymond,

        C'est bien essayé mais tu n'as pas tout lu :

        Et comme mon fichier original comporte beaucoup de formules compliquées, je préfèrerai éviter cette solution.

        Pas sûr que la formule unique de test soit suffisante...
        0
        1. Contributeur
          Exact ! Mais j'avais travaillé à partir de la question initiale, sans m'apesantir sur le post 4.
          Alors je vous laisse continuer, Wilfried et toi ...
          Cordialement.
          0
      2. Contributeur
        Pourquoi faire simple quand on peut faire compliqué ?

        Je supprime la feuille avec la collection de formules semblables (et donc inutiles).
        Je mets directement la formule en B12. Simplissime, sans macro, sans fonction, efficace et propre !

        https://www.cjoint.com/?cptLkiDMhk
        0
        1. Contributeur
          bonjour gbinforme

          merci, je ne connaissais pas cette macro EXcel4, ca va bien m'aider

          c'est une macro native, elle est utilisable

          0
          1. Contributeur
            bonjour

            Tu as la solution ici par eriiic

            En A12 tu mets la formule : =SUBSTITUE(B9;"x";x)
            En B12 : =evaluer
            après avoir défini en B12 "evaluer" avec la formule =EVALUER("="&Feuil1!A12)

            et tu peux mettre autant de x que tu veux dans ta formule.
            0
            1. Contributeur
              Bonjour tout le monde,

              Une petite précision qui a son importance :
              comme dans =EVALUER("="&Feuil1!A12) la référence A12 est passée en relatif il faut absolument que B12 soit sélectionné lorsqu'on défini le nom. Ainsi c'est la cellule de gauche de =evaluer qui est évaluée.
              Sinon on risque de s'arracher les cheveux pour que ça marche...
              De la même façon on peut définir evaluer pour qu'il évalue une formule située 1 ou 2 cellules au-dessus si on préfère une autre mise en page

              eric
              0
          2. Contributeur
            re:

            formule à placer :
            =CNUM(GAUCHE(B9;TROUVE("*";B9)-1))*x+CNUM(DROITE(B9;NBCAR(B9)-TROUVE("+";B9)))
            0
            1. Tout d'abord, merci pour vos réponses aussi rapides.

              @lermitte :
              je prends x=-2, d'où :
              2*(-2)+3 = -1
              Je ne crois pas me tromper...

              @wilfried :
              Ta solution me permet effectivement de remplacer x par sa valeur dans A1 et dans F1, mais ça n'est pas beaucoup plus efficace que de mettre 3 dans E1, insertion -> nom x : E1
              Au final, ça me permet bien de calculer ce que je cherche, mais il faut calculer toutes les formules... Et comme mon fichier original comporte beaucoup de formules compliquées, je préfèrerai éviter cette solution.

              Je joins un exemple, mon fichier réel ne peut malheureusement pas être diffusé. Les formules sont dans l'onglet Feuil2.

              http://www.cijoint.fr/cjlink.php?file=cj200902/cij82XDZLN.xls
              0
              1. Contributeur
                Bonjour,
                1ère remarque !!
                2*-1+3 ça fait pas -1 mais +1
                A+
                -1
                1. Contributeur
                  re:

                  j'ai trouvé peut etre une solution
                  en A1 mettre : =2*x+2 ' Cela provoquera une erreur mais pas grave
                  en D1 mettre : A1
                  en E1 mettre : x=3
                  une formule nommée : menu insertion / noms / définir
                  le nom : x
                  fait référence à : =CNUM(STXT(Feuil1!$E$1;TROUVE("=";Feuil1!$E$1)+1;NBCAR(Feuil1!$E$1)-TROUVE("=";Feuil1!$E$1)))
                  valider
                  en F1 mettre la formule suivante
                  =Indirect("D1")
                  0
                  1. Contributeur
                    bonjour

                    Tu mets une contreinte : pas de macro sauf que ce que tu as trouvé Evaluer, n'est pas une fonction native d'excel (enfin de ce que j'en connais) donc c'est une macro soit dans le classeur soit une macro complémentaire.

                    si tu pouvais fournir un classeur exemple, ce serait peut etre réalisable sans macro

                    @ te lire
                    0