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

Comment améliorer Sommeprod()

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Comment améliorer Sommeprod() lorsque cette fonction

- travaille sur des champs de taille importante
- est recopiée x1000 fois

Sur l'exemple en PJ, avec une fonction perso matricielle, on passe d'un temps de recalcul de 3 sec à 0,05 sec pour 4.000 lignes

=SOMMEPROD((dates=A2)*(numero=B2))

ou

=CombienFois(numero; dates)

Code:
Function CombienFois(champ, champcritere)
  Application.Volatile
  Set mondico = CreateObject("scripting.dictionary")
  a = champ
  b = champcritere
  For i = 1 To UBound(a)
    temp = a(i, 1) & " " & b(i, 1)
    mondico(temp) = mondico(temp) + 1
  Next i
  Dim retour()
  ReDim retour(LBound(b) To UBound(b))
  For i = LBound(b) To UBound(b)
    temp = a(i, 1) & " " & b(i, 1)
    retour(i) = mondico(temp)
  Next i
  CombienFois = Application.Transpose(retour)
End Function


JB
Formules Matricielles
 

Pièces jointes

  • CombienPerso.xls
    399 KB · Affichages: 74
  • CombienSommeprod.xls
    397.5 KB · Affichages: 42
  • MatricielPerso.xls
    36.5 KB · Affichages: 55
  • MatricielPerso.xls
    36.5 KB · Affichages: 54
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Comment améliorer Sommeprod()

Bonsour®

Merci Jacques pour ce rappel à privilégier l'utilisation de ("scripting.dictionary")dans de nombreux cas matricielles.

pour info :
(merci Misange pour la "résurrection" du site de LL)

Ce lien n'existe plus

Ce lien n'existe plus
 

david84

XLDnaute Barbatruc
Re : Comment améliorer Sommeprod()

Bonjour,

SOMMEPROD étant une fonction faite avant tout pour faire la somme des produits, autant la comparer dans ce cadre.

Ci-joint 2 tests entre SOMMEPROD et 2 fonctions personnalisées utilisant Dictionary et la trame initiale de Jacques.

Attention toutefois à comparer ce qui est comparable : outre le fait qu'une fonction personnalisée bien construite sera généralement plus rapide qu'une fonction matricielle "généraliste" (puisque pensée et construite pour ce problème spécifique), le mode de validation de ces fonctions personnalisées (entrée de la formule en une seule fois dans l'ensemble de la plage d'un côté, validation de SOMMEPROD cellule par cellule de l'autre) ne permet pas à mon avis de jauger la vitesse de traitement de SOMMEPROD.

Constatons simplement que les fonctions personnalisées sont plus rapides et plus adaptées dans ce contexte précis.
A+
 

Pièces jointes

  • SommeProd.xls
    874 KB · Affichages: 37
  • SommeProd.xls
    874 KB · Affichages: 48
  • SommeProd.xls
    874 KB · Affichages: 43
  • SommeProdMat.xls
    616 KB · Affichages: 43

Discussions similaires

Réponses
12
Affichages
253
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…