avant tout, je tiens à m'excuser si je n'écris pas ce message au bon endroit, sachant qu'il traite à la fois de formules dans calc ET de programmation.
Pour diverses raisons, je me retrouve avec une formule de plus de 3000 caractères avec entre autres des SI imbriquées et des INDIRECT(ADRESSE(...)) vers une feuille contenant des constantes ou vers des feuilles précédentes. Cette formule se retrouve dans chaque cellule d'une colonne de plus de 300 lignes. Cette colonne se retrouve elle-même dans une quarantaine de groupe de colonnes. Et tout ceci se trouve sur une feuille. Selon différentes conditions, la formule récupère des valeurs de la feuille courante ou de la feuille précédente. Une fois que j'aurai fini mes tests, la dernière feuille sera dupliquée autant de fois que nécessaire, et sera capable de récupérer des valeurs de la feuille précédente, en fonction des valeurs des autres colonnes. Tout ceci marche parfaitement bien... mais ça rame, ce qui bien sûr ne me surprend pas .
Je précise que j'utilise des plages nommées autant que possible, mais les calculs se faisant principalement en fonction des valeurs précédentes ou adjacentes à la cellule, je ne vois pas comment en utiliser plus.
En outre, j'ai écris diverses macros qui ne modifient pas le contenu des cellules mais qui simplement me permettent d'afficher ou masquer des colonnes selon mes besoins (saisis ou consultation d'informations). Ces macros désactivant et réactivant le calcul automatique le temps de leur exécution afin de les rendre plus rapide.
Mon objectif actuel consiste à simplifier/optimiser cette formule complexe, afin :
- d'une part qu'elle soit plus lisible (actuellement je travaille dessus dans notepad++ en la mettant en forme et avec des commentaires pour qu'elle soit lisible puis je supprime la mise en forme et les commentaires et je la colle pour la tester )
- et d'autre part qu'elle prenne moins de temps de calcul.
- Est-ce que rajouter des colonnes contenant des calculs intermédiaires pourrait réduire le temps de traitement ? Pour la lisibilité, éventuellement pourquoi pas, mais je crains de me retrouver avec quinze colonnes supplémentaires pour chaque groupe de colonnes .
- Je sais à priori que je peux passer pas une fonction personnalisée pour réduire cette formule dans calc et la rendre plus lisible via des commentaires dans l'éditeur basic de l'IDE. Mais pour une question de praticité et d'efficacité en temps de traitement, je ne sais pas s'il vaut mieux que je la récrée totalement en basic, ou si je dois appeler en basic les fonctions utilisés dans cette formule à l'aide de la fonction callFunction. J'espère que j'arrive à me faire comprendre... J'avoue appréhender cette méthode, sachant que j'ai l'impression que cette fonction personnalisée risque d'avoir de nombreux arguments à faire passer, ce qui au final ne rendra pas forcément plus lisible la formule dans calc... D'ailleurs il me faudrait peut-être plutôt utiliser plusieurs fonctions personnalisées au lieu d'une seule.
- La longueur de la formule tient entre autre au fait que je teste des valeurs qui selon leur résultats seront ou non utilisées comme résultat. Autrement dit, du genre SI(valeur1>valeur2;valeur1+x;valeur2+y). Sachant que valeur1 et valeur2 contiennent elle-mêmes d'autres fonctions. Du coup je me retrouve a écrire et calculer plusieurs fois valeur 1 et/ou valeur 2 dans la formule. Je me dis que je gagnerais en lisibilité et en longueur de formule si je pouvais écrire quelques chose du genre SI(valeur1>valeur2;$0+x;$1+y) ou $0 ferait référence à valeur1 et $1 à valeur2, un peu comme dans une expression régulière. J'ai cherché, mais ça ne semble pas possible. Je me dis aussi que ça réduirait le temps de traitement dans le cas des SI imbriqués, puisque d'après ce que j'ai compris, dans le cas d'un SI, tous les arguments sont testés, même si seuls ceux correspondant aux critères sont renvoyés. Finalement la seule solution semble de créer deux colonnes dans lesquelles seraient calculées valeur1 et valeur2... En somme je réponds moi-même à deux questions . Mais ça vient probablement du fait que j'ai initialement tout fait pour réduire au maximum le nombre de colonne...
Et pour ceux qui en douterait, je précise que ma signature est à jour