simplification de formule

icetea

XLDnaute Nouveau
Bonjour à tous,

Je suis à la recherche d'une simplification de formule auriez vous des pistes pour simplifier ce genre de choses?

+SOMMEPROD((ANNEE(Horaires!$B$11:$ABD$11)=ANNEE($B$10))*(MOIS(Horaires!$B$11:$ABD$11)=MOIS($B$10))*(Horaires!$B130:$ABD130=T3)*(Horaires!$B129:$ABD129))+SOMMEPROD((ANNEE(Horaires!$B$11:$ABD$11)=ANNEE($B$10))*(MOIS(Horaires!$B$11:$ABD$11)=MOIS($B$10))*(Horaires!$B132:$ABD132=T3)*(Horaires!$B131:$ABD131))

Vous remerciant par avance
 

M12

XLDnaute Accro
Bonjour,
sans classeur pas trés évident, mais tu pourrais commencer par nommer les plages
Ex: Horaires!$B$11:$ABD$11 ----> Horaire1
Horaires!$B130:$ABD130 -----> Horaire2 etc
la formule serait moins longue et tu saurais de quoi tu parles en lisant la formule
 

ODVJ

XLDnaute Impliqué
Bonjour à tous,

tu peux commencer à mettre en facteur tes comparaisons d'année et de mois :
VB:
=SOMMEPROD((ANNEE(horaires!$B$11:$ABD$11)=ANNEE($B$10))*(MOIS(horaires!$B$11:$ABD$11)=MOIS($B$10))*((horaires!$B130:$ABD130=T3)*horaires!$B129:$ABD129+(horaires!$B132:$ABD132=T3)*horaires!$B131:$ABD131))

cordialement
 

Dranreb

XLDnaute Barbatruc
C'est un peu ce que j'ai proposé sauf que mets aussi en facteur (Horaires!$B130:$ABD130=T3) et que je laisse un minimum de travail à la fonction SOMMEPROD proprement dite et non pas tout seulement au dispositif externe qui l'encadre et qui veille à l'évaluation préalable des paramètres constitués d'expressions matricielles. SOMMEPROD est fait pour calculer une somme de produits, pas une simple somme d'éléments donnés dans un seul paramètre.
 

ODVJ

XLDnaute Impliqué
Oui, Dranreb, j'ai bien vu ce que tu as fait mais, sauf erreur, (Horaires!$B130:$ABD130=T3) ne peut pas être mis en facteur.

Tu as d'un côté (Horaires!$B132:$ABD132=T3) et de l'autre (Horaires!$B130:$ABD130=T3)

C'est pour cela que j'ai décalé la mise en facteur.

Cordialement
 

Dranreb

XLDnaute Barbatruc
Au temps pour moi, je n'avais pas vu cette différence.
Alors je remplacerais seulement quand même probablement au milieu un "*" par ";" pour bien distinguer les valeurs à sommer des tests purement logiques convertis en 0 et 1 là ou c'est possible.
 
Dernière édition:

ODVJ

XLDnaute Impliqué
Une autre façon d'écrire la formule, en reprenant ta mise en facteur, et en mettant un point virgule :
VB:
=SOMMEPROD((ANNEE(Horaires!$B$11:$ABD$11)=ANNEE($B$10))*(MOIS(Horaires!$B$11:$ABD$11)=MOIS($B$10))*(horaires!$B130:$ABD132=T3);(horaires!$B129:$ABD131)*{1;0;1})

Mais c'est peut-être moins lisible
 

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 865
dernier inscrit
FreyaSalander