[Excel] - Optimisation calcul / formules. >1 min d'execution

Bonjour le forum,

Encore une fois, j'espère trouver de supers conseils magiques ici.

J'ai des séries de mesure sur le premier onglet.

J'ai besoin de faire quelques calculs pour chaque mesure et pour chaque empreinte (LH1,LH2,RH1,RH2 -> voir colonne D)

Mes formules fonctionnent, j'étend les formules sur la droite, j'ajoute les valeurs et la.. c'est le drame ! Minimum 1 minute d'exécution pour mettre à jour les calculs ! sachant que le fichier est mis à jour 3x par jour...

Je suppose que c'est en partie à cause de formules matricielles mais je peux pas utiliser MIN.SI et MAX.SI sur Excel 2016

L'ouverture du fichier prend 1min30s sur mon ordi

Auriez vous une solution ?

Je vous remercie par avance, en plus je sais que le fichier et les formules sont très denses donc pas facile de se mettre dedans.

A+

Le fichier est sauvegardé avec la calculation en manuel

bonjour Gabin37,

je suis quasi sûr que ton problème vient du fait que tu as trop de formules qui utilisent la fonction indirect et que tes plages ne sont pas limitées aux données utiles.

Bonjour h2so4, je suppose que tu mentionnes les plages de cellules immenses comme cela ? $D$9:$D$1048576

Problème c'est que je ne sais pas combien de lignes il y a, Je crois que j'ai un fichier avec 20.000 lignes car certains projets sont maj 9 ou 12 fois par jours...

j'ai réduis les plages à $D$9:$D$100000 et c'est toujours très long. Je voudrais pas passer par VBA mais si pas le choix tant pis je ferais une macro...

EDIT: sur internet on trouve cette formule :

  • =RECHERCHE(9^9;1:1)

Faudrait pouvoir obtenir le numéro de la dernière ligne non vide, comme ca j'ajuste ma plage de calcul dans mon INDIRECT

re-bonjour

Faudrait pouvoir obtenir le numéro de la dernière ligne non vide, comme ca j'ajuste ma plage de calcul dans mon INDIRECT

si tu n'as pas de ligne vide dans ta série tu peux utiliser countA() ou nbval() en français

mais tu ne résous pas le problème que tu as trop de fonctions "INDIRECT"

Re,

J'ai utilisé NBVAL dans un cellule annex pour trouver la "dernière ligne" afin de ne pas surdimensionner mon range dans les calculs. Cependant j'utilise toujours autant de fonction INDIRECT, je ne vois pas comment réduire ce nombre..

Avec NBVAL j'ai gagné une vingtaines de secondes d'exécution c'est indéniable mais ca reste bcp trop long

Voir message suivant

Réctification, NBVAL pour redimensionner la plage à résolu mon problème. Je viens de me rendre compte que la "calculation" se fait sur tous les classeurs ! Certains Excel étaient toujours ouvert sans la modification pour cela que mes calculs étaient toujours lents.

A priori pour 5000 lignes, les calculs se font désormais en une petite secondes. Je vais appliquer la nouvelle formule à tous mes classeurs et je reviens valider le sujet si c'est OK.

Re,

Pour le moment les formules fonctionnent bien. J'ai un petit soucis sur ma formule MIN... Parfois elle renvoi 0 je ne comprend pas pourquoi.

Lorsque je fais le calcul à la main j'obtiens des résultats cohérents:

image

Egalement, la plage de recherche est bien correct :

image

Voir ligne 10 sur le deuxième onglet.

Si besoin je créerais un deuxième sujet pour cette formule..

A+

re

Pour le moment les formules fonctionnent bien. J'ai un petit soucis sur ma formule MIN... Parfois elle renvoi 0 je ne comprend pas pourquoi.

tu as une fonction IF qui renvoie des valeurs FAUX chaque fois que la condition n'est pas vérifiée sur ta plage, or FAUX est en fait 0, si tu n'as pas de valeurs négatives dans ta plage de test, 0 sera le minimum.

Ah ok... c'est idiot, j'aimerais que FAUX soit simplement ignoré !

Tu as une solution en tête ?

Bonjour tout le monde,

J'en étais arrivé au même constat que h2so4.

Juste pour donner une piste (certainement foireuse), je cherche de ce côté-là depuis un moment mais ça foire immanquablement :

=MIN(SI(ET(INDIRECT($A$2&"!$D$9:$D$"&$B$23)=F1;INDIRECT($A$2&"!"&ADRESSE(9;5+ARRONDI.INF((COLONNE(F1)-2)/4;0))&":"&ADRESSE($B$23;5+ARRONDI.INF((COLONNE(F1)-2)/4;0)))<>"");
INDIRECT($A$2&"!"&ADRESSE(9;5+ARRONDI.INF((COLONNE(F1)-2)/4;0))&":"&ADRESSE($B$23;5+ARRONDI.INF((COLONNE(F1)-2)/4;0)))))

Bonjour 21Formatic,

Merci de te pencher sur le sujet =)

J'avais également essayé quelque chose de semblable.

à savoir qu'on ne peut pas exclure la valeur 0 car elle peut survenir parfois.

image

Quel c**,

j'avais mal fermé la parenthèse.

=MIN(SI(ET(INDIRECT($A$2&"!$D$9:$D$"&$B$23)=F1;INDIRECT($A$2&"!"&ADRESSE(9;5+ARRONDI.INF((COLONNE(F1)-2)/4;0))&":"&ADRESSE($B$23;5+ARRONDI.INF((COLONNE(F1)-2)/4;0))))<>"";
INDIRECT($A$2&"!"&ADRESSE(9;5+ARRONDI.INF((COLONNE(F1)-2)/4;0))&":"&ADRESSE($B$23;5+ARRONDI.INF((COLONNE(F1)-2)/4;0)))))

Cela dit, ça fausse certains de tes résultats, donc ce n'est toujours pas ça. Mais j'imagine que sur le principe on avance.

Edit : je crois bien que je me suis embrouillé et que j'ai fait à peu près n'importe quoi. Bon courage pour t'y retrouver 😁

Bonjour Gabin37, Le Forum,

Mes formules fonctionnent, j'étend les formules sur la droite, j'ajoute les valeurs et la.. c'est le drame ! Minimum 1 minute d'exécution pour mettre à jour les calculs ! sachant que le fichier est mis à jour 3x par jour...

Est ce que tu mets ta feuille en calcul manuel avant d'étendre les formules et d'ajouter les valeurs?

Car à chaque fois que tu étends ou rajoutes une valeur le calcul se fera sur l'ensemble de la feuille.

Si tu bloques le calcul automatique, puis ensuite faire F9 pour recalculer. Le recalcul ne se fera que sur l'ensemble.

j'aimerais que FAUX soit simplement ignoré !

Crée un sujet dessus avec seulement l'exemple présenté (un p'tit fichier). Ce sera plus facile (et moins long en calcul) pour ceux qui y répondront.

Bonjour X Cellus,

Est ce que tu mets ta feuille en calcul manuel avant d'étendre les formules et d'ajouter les valeurs?

Ouaip, problèmes c'est que les opérateurs vont venir ajouter une nouvelles valeurs plusieurs fois par jours, et je pense que les personnes qui exploiteront les résultats n'aurons pas la présence d'esprit de F9...

Comme j'ai dit dans un précédent message je créerais un nouveau sujet si je n'ai point de réponses sous peu. Heureusement ce n'est pas un sujet urgent pour moi je continue de chercher un peu :)

A++

Re, Comme on dit la nuit porte conseil... en quelques minutes j'ai réussi s à faire ça tout simplement:

image

En validation matricielle cette formule fonctionne. Malheureusement je n'arrive pas encore à l'adapter à mon gros fichier cela me renvoi une erreur... Je vais continuer de chercher

+

Re, désolé je sais qu'on s'éloigne du problème initiale..

image

Dans ma formule, j'utilise INDIRECT et tout le tralala comme d'habitude. Mais ici pour définir la plage où je dois exclure en matricielle les valeurs égale à rien :

J'ai bien INDIRECT({"onglet!$F$9:$F$15"}) avec les crochets {} qui m'indiquent que je suis en matricielle ? et pourtant, sur cette image je fais évaluer et ca me donne:

image

une erreur... j'ai pris comme exemple une petit plage mais même avec la plage complète c'est pareil.

Si jamais certains d'entre vous ont déjà eu ce problème ? =)

Bonjour,

C'est l'erreur que j'avais hier aussi en essayant. Je n'arrive pas vraiment à me l'expliquer.

Bonjour,

Je clôture ce sujet et en ouvre un autre pour ma formule MIN.Si je ne trouve aucunes solutions et ça commence à sérieusement m'embêter

A+

Rechercher des sujets similaires à "optimisation calcul formules min execution"