Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Sommeprod et vitesse

T

ThierryR

Guest
Rebonjour à tous

J'utilise sommeprod beaucoup pour le genre de formule suivante :

=SOMMEPROD((GAUCHE(Comptes;NBCAR(A23))=A23)*(Recettes-Dépenses))

Ma question est de savoir s'il y a possibilité d'augmenter la vitesse de traitement. J'ai une grosse machine 3.2Ghz, 1 Go de mémoire...

Par exemple, pour les zones : si je définis ma zone sur les 65536 lignes et que mes données sont sur 12000 lignes, cela aura-t'il une influence ?

Ou y aurait-il une solution plus rapide ?
Merci à tous.

ThierryR
 
G

Gérard DEZAMIS

Guest
Bonjour Thieery

Ta "grosse bestiole" ne doit pas être très effrayée par les 40000 lignes sup à examiner mais il serait surement plus raisonnable de limiter les zones de recherches à la taille probable de tes données.
Pour toi 15000 serait très raisonnable et cela serait toujours ça de gagné ...

@+ GD
 
T

Ti

Guest
tu peux limiter la plage des cellules examinées par un DECALER() ajusté au nombre de valeur trouvées dans la plage par un NBVAL ou autre.
Les formules enflent très vite, mais au final tu y gagnes en rapidité.
 
J

Jean-Marie

Guest
Bonjour

1) Il faut à regarder dans ta formule si tu peux diminuer les temps de calculs

=SOMMEPROD((GAUCHE(Comptes;NBCAR(A23))=A23)*(Recettes-Dépenses))

GAUCHE(Comptes;....) la valeur retournée varie en fonction du contenu de la cellule.
Recettes et dépenses ne peuvent pas être changé, il y a une soustraction à chaque ligne, ou voir la fin du post (*).

Par contre NBCAR(A23) est exécutée à chaque ligne, il suffirait de la mettre cette fonction dans une cellule par exemple Z1
=SOMMEPROD((GAUCHE(Comptes;Z1)=A23)*(Recettes-Dépenses))


2) Tu peux remplacer cette formule par celle-ci
=SOMME.SI(Compte;A23&"*";Recettes)-SOMME.SI(Compte;A23&"*";Dépenses)
je ne crois pas que cette solution travail plus vite.

3) Trier la base sur les n° de comptes, définir la zone par calcul
=DECALER(1èreCelluleDeLaColonneCompte;Equiv(A23&"*";ColonneCompte;0);;NB.SI(ColonneCompte;A23&"*"))
Cette formule remplacerai la "fait référence à :" dans la définition du Nom.

C'est avec cette déclaration que tu vas gagner énormément de temps.


(*)=SOMMEPROD(SI(A3:A5="a";B3:B5-C3:C5;0)), mais elle devient matricielle donc à valider par Ctrl+Shift+Entrer, pas sûre que ce soit plus rapide.

@+Jean-Marie
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…