Optimisation d'un classeur

Bonjour,

J'ai un classeur de 68 Ko qui met une dizaine de secondes au recalcul. Le classeur ne comporte que 9 formules (en bleu sur la feuille Mesures TA) portant sur 900 lignes. Les fonctions utilisées sont MAP, BYROW, TRIER et UNIQUE. Elles n'exécutent pas de calcul compliqués.

Le but est, à partir des données en colonnes A à E, d'obtenir 1 ligne par demi-journée (s'il y a eu des mesures). Pour chaque ligne, on fait la moyenne des mesures de la1/2 journée. Il y a un schéma explicatif sur la feuille "détail du calcul".

Dans la mesure du possible, je souhaiterais éviter une solution avec PQ. Mais, bon, faute de grives...

Je vous remercie par avance.

Daniel

Hello,

Elles n'exécutent pas de calcul compliqués.

Ben si !!!

Vous utilisez des formules bien trop complexe pour ce qu'elle doivent faire et en plus ce sont des matricielles qui utilisent 1 048 576 lignes !

Pire que ça y'a pas.

Si j'ai bien compris ce que vous voulez faire, voici un tableau largement simplifié et qui ne prend que quelques pouième de seconde.

Bonjour

Je pense que c'est la fonction FILTRE à l'intérieur du BY.ROW qui est très lourde

Voici une fonction GROUPER.PAR immédiate (même sans format tableau qui serait quand même plus pratique)

=GROUPER.PAR(
CNUM(SUBSTITUE(DECALER(A2;;;NBVAL(A:A)-1);".";""))+SI(CNUM(DECALER(A2;;1;NBVAL(A:A)-1))>0,5;15/24;1/24);
ASSEMB.H(
   CNUM(SUBSTITUE(DECALER(A2;;;NBVAL(A:A)-1);".";""));
   CNUM(DECALER(A2;;2;NBVAL(A:A)-1;2))/10;
   CNUM(DECALER(A2;;4;NBVAL(A:A)-1)));
LAMBDA(x;ARRONDI(MOYENNE(x);1));;0)
image

Stéphane

Bonjour,

@ Nain porte koi :

Je n'ai pas encore regardé ton classeur. Je réagis juste sur ce que tu écris. Les seules fonctions qui balaient une colonne sont les NBVAL. Est-ce que tu as déjà mesuré avec une macro le temps que prends NBVAL pour s'exécuter ? Je te rappelle que depuis Excel 2007, on peut exécuter des formules matricielles sur des colonnes entières (même si ce n'est pas recommandé). Ou j'ai oublié quelque chose, ou il n'y a pas de fonction matricielle sur une colonne entière.

Daniel

@ Nain porte koi : OK, ton classeur fait le job, merci. A ceci près qu'il faut ajouter un test en colonnes M:O pour prévoir les nouvelles données.

Daniel

@Raccourcix :

Génial. Pour moi GROUPER.PAR ne pouvait avoir qu'un champ de calcul. Ca m'ouvre des horizons.

Merci. Merci également à Nain porte koi.

hello,

Ou j'ai oublié quelque chose, ou il n'y a pas de fonction matricielle sur une colonne entière.

Pour info, les fonctions : FILTRE, UNIQUE, TRIER, MAP, BYROW (et d'autres) sont des matricielles

@DanielC

Comme je l'ai écrit, c'est le FILTRE dans le BY.ROW des colonnes N, O et P qui pose problème car lui aussi balaye toutes les lignes (et pas uniquement le NBVAL)

=BYROW($L$2#;LAMBDA(x;ARRONDI(MOYENNE(CHOISIRCOLS(FILTRE($G:$J;$F:$F=x);2));1)))

pour chaque ligne il filtre toutes les lignes à la même date pour faire la moyenne.

Stéphane

Bonjour,

essai avec un TCD (sans garantie et sans conviction)

P.

@Nain porte koi :

Je n'utilise pas UNIQUE, TRIER, MAP, BYROW (et d'autres) sur des colonnes entières. Pour FILTRE, ok.

@Raccourcix :

Pour FILTRE, c'est exact, ça m'avait échappé. De toute façon j'ai adopté ta super formule.

Et je vais passer au TS comme vous l'avez tous deux suggéré.

@patrick1957 :

Bonjour,

Je ne vois pas de TCD dans ton classeur (ou alors, c'est mes yeux ?). Ta solution fonctionne. Elle est assez semblable à celle de Nain porte koi.

Daniel

Dans la feuille "Détail du calcul" Colonne "L" à "N"

P.

Bonsoir DanielC, bonsoir à tous,

Pour un peu de vitesse, avec un peu de VBA dans le module de la feuille "Mesures TA". Le code est un tout petit peu commenté.

Pour mettre à jour le résultat :

  • re-valider une des cellules des colonnes sources
  • ou modifier une ou des valeurs des colonnes sources
  • ou cliquer sur le bouton bleu

Bonsoir mafraise,

Un merci à toi également.

Daniel

Rechercher des sujets similaires à "optimisation classeur"