J'ai retrouvé récemment tout à fait par hasard, un topic que j'avais créé sur un forum informatique au sujet d'une formule Excel en 2005.(Quand je vous disais que j'avais mis le doigt dans l'informatique et que j'avais trouvé ça fantastique !)

Ça m'a fait bizarre de me relire, plus de 10 ans après, surtout que ça fait longtemps que je suis passé à autre chose: à ma première relecture, je n'y ai rien compris et pourtant c'était bien moi qui avait écrit: j'ai encore le fichier Excel en question, même si je ne m'en sers plus. A la deuxième relecture, les souvenirs ont commencé d'affluer, j'ai commencé à re-comprendre, et à la troisième j'ai compris tout à fait ! [:D]

Ben oui, j'suis fier de moi, et alors ?  [:D]

Y avait des têtes sur ce forum-là...

Voyez plutôt:

Intitulé du topic: excel: formule trop longue

Gaston (c'est moi)
j'ai la formule suivante (attention, c'est vrai que c'est long !) [;)]
=SI((SI((DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4)<0;-DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4+180;DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4))>360;(SI((DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4)<0;-DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4+180;DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4))-360;SI((DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4)<0;-DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4+180;DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4))
je voulais rajouter que si le résultat donnait une erreur, mettre un tiret, avec la formule =esterreur(maformule;\"-\";maformule)
or bien sûr excel me répond que ma formule est trop longue.
Comment puis-je contourner ça, autrement qu\'en rajoutant une cellule ?

Intervenant1:
Question: Comment fais-tu pour ne pas te tromper dans le nombre de parenthèses ?

Gaston:
Excel a ça de bien qu\'il colore les parenthèses, de façon à mettre en évidence les ocrrespondantes, et d\'autre part, il propose de corriger tout seul si on en oublie une. Autrement cette formule je l\'ai faite en plusieurs fois, petit à petit...et elle fonctionne bien 

Intervenant2:
gaston: tout un calcul compliqué,  je ne le ferais pas à la main...ça non

Intervenant1:
En tous cas, bravo Gaston!
Je crois bien que c\'est la formule la plus longue que j\'aie vu de ma vie!!
...Que ce soit sur Excel ou ailleurs!!!

Gaston:
ben justement, si on trouvait à la raccourcir ça m\'arrangerait bien

Intervenant1:
Tu te rends compte du travail??? [:o] 
Ça doit sûrement être possible....Mais alors! [:o] 
Quelle prise de tête ça a dû être déjà pour la faire!
Il faudrait la reconvertir sur papier mais c\'est de la folie!
Einstein à travaillé la moitié de sa vie professionnelle sur E=MC2, faut pas oublier...

Gaston:
ça serait bien si on pouvait \"nommer\" la formule de base (par exemple \"formuleA\"):
DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4
qui comme vous l\'avez peut-être constaté, apparait plusieurs fois dans la formule finale, ainsi ça raccourcirait énormément la formule complète

Intervenant1:
En la remplaçant par une macro par exemple?
Ce qui reviendrait, dans ce cas, à carrément un fichier xls qui contiendrait l\'ensemble des formules portant un identifiant et d\'enchaîner les macros.
Ce qui permettrait d\'introduire un programme dans la cellule au lieu de la formule....
Waouuuhhh!! Y\'a quelquechose à faire là!
Donc, il faudrait d\'abord séparer les formules entre elles puis les introduire dans le fichier .xls
Ensuite, il faudrait faire des macros en chaîne qui pointent vers la formule adéquate au fil du programme.
Puis, il faudrait introduire l\'ensemble de ces macros dans un fichier macro qui serait introduit dans perso.xls et c\'est ce fichier macro qui serait introduit dans la cellule!
Joli travail de développement.
En théorie, c\'est joli! Mais en réalité, il y a risque de plantage, il faudrait tester le programme en défilement DANS Excel!
Je pense que, dans ce cas, il vaudrait bien mieux faire un vrai programme et le raccourci vers ce programme serait simplement introduit dans la cellule, ce serait bien plus simple et plus fonctionnel.
Je me demande si un langage simple, comme Python, ne pourrait pas faire ce travail?
C\'est qu\'en réalité, il suffirait d\'éditer la formule en mode texte simple. Excel traduirait les fonctions au fur et à mesure qu\'il les rencontre!
Donc un langage simple, si appliqué comme ça devrait pouvoir faire ce programme. Une macro dans la cellule pointerait vers le lien....
Pfouhhh! Ca me semble possible, parce que c\'est logique....Mais alors, il y a un brainstorming à faire là!
Un an de travail....Au moins!!! [:D]

Intervenant3:
tu peux faire certains calculs dans différentes cellules puis associer l\'ensemble dans une formule globale ce qui devrait \"raccourcir\" ta formule surtout si tu nommes les cellules contenant les formules intermédiaire

Gaston:
La formule totale parait compliquée mais elle ne l'est pas tant que cela:
formule de base:
degres(atan((c*sin(radians(c4-d4))/(d3+(c3*cos(radians(c4-d4)))+d4
si on l'appelle par exemple "formule1"
la formule définitive donne:
si((si(formule1<0;-formule1+180;formule))>360;(si(formule1<0;-formule1+180;formule1))-360;si(formule1<0;-formule1+180;formule1))
et si on appelle si(formule<0;-formule+180;formule): formule2
la formule définitive donne:
si(formule2>360;formule2-360;formule2)
en fait la formule de base est soumise à 2 conditions.
j'avais bien pensé faire ça en macro, ou plus exactement transformer cette formule en fonction, mais ça me paraît un peu lourd, surtout que je n'en ai besoin que dans un seul classeur
Par contre je pencherais plutôt pour la solution de Intervenant3, à laquelle j'avais pensée: faire le calcul de base dans une cellule (qui sera cachée par la suite), puis la première condition dans une autre (cachée également) et la définitive dans une cellule visible.
mais...aaargh ! je viens de me rendre compte que y a un problème dans la formule !!! [;(]

bon je vais vous expliquer ce que je cherche à faire:
je voudrais additionner deux prismes et et j'utilise pour cela les vecteurs:


j'utilise pour cela la formule:

pour la valeur, pour l'angle:

seulement ça ne s'arrête pas là:tout ceci se place dans le repère suivant:

donc d'après ce schéma TABO, la valeur de l'angle du vecteur résultant doit être:

c'est tout [;)]
alors mon problème est ici:

là c'est ok, la valeur de l'angle est bonne
mais ici:

elle n'est pas bonne, tout simplement parce que les valeurs de départ sont inversées. Comment faire pour que ça soit bon qu'elles soient inversées ou non ? y-a-t-il une solution ?

Intervenant1:
Je ne comprends pas où le programme prend cette variation d\'angle alors que les cellules l\'affichent toujours correctement...Même inversé.
Pourquoi l\'affichage est-il inversé et pourquoi l\'angle Pr est-il augmenté???
C\'est curieux!...Mais je pense quand même qu\'il doit bien y avoir une erreur dans la formule, je ne peux pas croire qu\'il soit possible de faire une telle formule sans erreur!
Je trouve étonnant cette inversion des angles P1<>P2...C\'est étonnant....
Franchement, Gaston, personnellement je suis intelligent...mais pas physicien et je ne crois pas qu\'il y en ait beaucoup sur Memoclic, va sur le forum de Futura-Sciences, tu vas avoir des milliers de gars tous ingénieurs, tu vas mettre d\'autres ressources à ton pouvoir, non plus axée sur l\'informatique, mais sur la formule elle-même.
Crois-moi!
www.futura-sciences.com/
Tu vas là-dessus et tu donnes en titre: \"Addition conditionnelle de prismes: Enigme???\"
....tu vas voir, toute la Francophonie tertiaire va s\'y mettre!! [:D]
Mais je trouve cette particularité étonnante! Je me demande bien pourquoi à un moment donné de la formule Excel inverse deux cellules??? c\'est incroyable!
Euh, si quelqu\'un te trouve la réponse, viens nous le dire, ça nous sera utile pour la suite!

Gaston:
ah mais attendez, z\'avez pas compris mon problème: y a pas d\'erreur dans ma formule !
degres(atan((c*sin(radians(c4-d4))/(d3+(c3*cos(radians(c4-d4)))+D4
dans cette formule ci-dessus, vous voyez bien que si on inverse les valeurs de C4 et D4, on va pas trouver la même chose, ne serait-ce simplement qu\'ainsi:
si ATAN(...)= 10° si D4 vaut 270°, ATAN(...)+D4=280°
mais si on remplace la valeur de D4 par 0°, ça va donner:
ATAN(...)+ D4=270°
ok ?
de même:
dans le premier cas, C4-D4 = -270
dans le deuxième cas, C4-D4 = 270
et donc ATAN(...) n\'a pas la même valeur non plus
alors ce que je voudrais trouver, c\'est comment faire en sorte que la formule finale donne toujours le bon résultat, même en inversant les valeurs.
pour futura-science, j\'y ai déjà été [;)]
mon problème actuel n\'est pas un problème de science, mais de logique avec Excel, euh...vous me suivez ? [:D]
c\'est juste un truc pour qu\'on ne se trompe pas à la saisie des données...

Intervenant1:
en faisant un programme qui ferait le travail, il faudrait tout convertir...Le problème c\'est que les données sont dans Excel, donc chaque formule devrait contenir une macro pour rapatrier la donnée contenue dans le fichier Excel correspondant, c\'est ça qui est pas évident.
Ceci dit, Gaston....Pour moi, la seule solution est de faire deux feuilles de calcul, une avec une formule et l\'autre avec l\'inverse, personnellement, je n\'ai vraiment pas d\'autre idée.
Surtout que je suis nul à l\'utilisation d\'Excel!
Je ne pense pas que tu trouveras la solution de sitôt...  Désolé..

Gaston:
voyons, voyons: déjà je puis dire qu\'il faut que la valeur d\'angle dans C4 soit la plus proche de 0°.
purée ! faut queje rajoute une autre condition:
si(C4<C3;....;...)
elle était déjà pas assez longue !!!

Intervenant1:
Franchement Gaston, tu m\'assieds! [:D] [:D]
Enfin, façon de parler, parce que j\'ai une chaise de bureau grand luxe, signée et tout!!!

Gaston:
bon, cette fois, je crois que ça y est [:D] :
dans la cellule H1, je mets:
=SI(ESTERREUR(SI(C4<D4;DEGRES(ATAN((D3*SIN(RADIANS(D4-C4))/(C3+(D3*COS(RADIANS((D4-C4))))))))+C4;DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4));\"-\";SI(C4<D4;DEGRES(ATAN((D3*SIN(RADIANS(D4-C4))/(C3+(D3*COS(RADIANS((D4-C4))))))))+C4;DEGRES(ATAN((C3*SIN(RADIANS(C4-D4))/(D3+(C3*COS(RADIANS((C4-D4))))))))+D4))
dans la cellule I1, je mets:
=SI(H1<0;360+H1;H1)
dans la cellule E4 (ma cellule de résultat), je mets:
=SI(ESTERREUR(SI(I1>360;I1-360;I1));\"-\";SI(I1>360;I1-360;I1))
et là ça colle, quelles que soient les valeurs de C4 et D4
je n\'ai plus qu\'à cacher les colonnes H et I
elle est pas belle la vie ? [:D]

source