N’essayez pas à la maison ! Un petit challenge…

Suite à une discussion avec Dominique Handelsman (qui intervient régulièrement ici), je me lance dans une petite expérimentation sur l'optimisation des formules

Première colonne:
15
16
17
15
que je recopie comme tel vers le bas sur 1 000 000 de lignes (bin oui, si on a maintenant un million de lignes, il faut s'en servir !)

Deuxième colonne
Un nombre aléatoire
=alea()
que je copie colle en valeur pour éviter d'avoir ce recalcul

Troisème colonne :
Cette formule, ici pour la cellule A2 :
=SOMME.SI($A$2:$A$1000000;A2;$B$2:$B$1000000)

Et je commence le calcul, qui évidemment utilise toute la mémoire de l'ordinateur et quelques minutes plus tard...Pouf plus rien, le disjoncteur général de l'ordi a dit stop et a littéralement crashé l'ensemble ! (Il fait un peu chaud ici, mais quand même !)

Donc 1 000 000 de lignes, c'est bien, mais il faut quand même veiller à pas lui demander trop de calculs !

En réduisant à 30 000 lignes et en changeant la formule pour ceci :
=SOMME.SI($A$2:$A$30000;A2;$B$2:$B$30000)
On arrive à calculer, une trentaine de secondes chez moi.

Cette formule peut cependant être largement améliorée.

Des idées?

Je donnerai mes propres pistes dans un prochain post!

Gaetan Mourmant

Pour marque-pages : Permaliens.

2 réponses à N’essayez pas à la maison ! Un petit challenge…

  1. alexandre dit :

    Bonjour Gaëtan,
    Est ce que en mettant une affectation pour la plage cela rend le cacul plus rapide? $A$2:$A$1000000 par exemple plage_A et $B$2:$B$30000 plage B soit
    =SOMME.SI(plage_A;A2;plage_B)

    Merci de ton retour si tu trouves une piste.
    Cordialement,
    Alexandre ADAM

  2. dominique.handelsman@noos.fr dit :

    Bonjour. Une idée dont je n’ai pas testé l’efficacité :

    Si Zone_des_Data est le nom de l’ensemble des lignes qui contiennent les data de la table des données (par exemple, la plage A2:BE9635, notamment si c’est une plage dynamique, concept cher à certains auteurs, dont gaetan), alors la formule =SOMME.SI($A$2:$A$30000;A2;$B$2:$B$30000) deviendrait : =SOMME.SI(Zone_des_Data $A$2:$A$30000;A2;Zone_des_Data $B$2:$B$30000)
    L’expression “Zone_des_Data $B$2:$B$30000” désigne l’intersection des deux plages, l’une désignée par “Zone_des_Data”, l’autre désignée par “$B$2:$B$30000”. il est ici rappelé que l’intersection de deux références (plages) s’écrit en insérant un espace entre ces deux références.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.