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
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
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.