Optimisation de formule

Bonjour,

J'ai un problème de formule qui est très (trop) grosse et qui pourrait être optimisée.

Je fait un calculateur de consommation électrique, j'ai besoin de rentrer les conso suivant les plages tarifaire du site client.

Suivant les pays et les sites, il peut y avoir 2, 3 ou 4 plages horaire (ou plus why not ?).

Un tableau indique les heures de début et fin de chaque plage ainsi que le nombre d'heure de celles-ci.

J'ai besoin ensuite de me construire une journée type de 0h à 23h. pour chaque heure je veux avoir le nom de la plage qui s'affiche à côté. Jusque là tout va bien.

Sauf que parfois les horaires sont par ex. de 7h à 18 et 18h à 7h, donc pour le passage de minuit c'est 18h-24h+0h-7h il faut faire le test si mon horaire est compris dans le créneau de la dites plage, etc.

Bon c'est compliqué à expliquer, je vous joint un fichier plus clair. vous y trouverez le choix de la plage horaire, les heures de début et de fin ainsi que le calcul sur 24h.

Actuellement la formule fonctionne presque (sauf si un horaire fini à 24h pile). Mais pour la beauté des calculs j'aimerai optimiser ma formule qui est horrible !

Merci à celle ou celui qui m'aidera.

Gilles

18horaires.xlsx (17.19 Ko)

Bonjour GMBD

Je ne comprends pas ce que vous souhaitez changer et où dans votre tableau

De plus, je n'ai vu aucune "grosse" formule

A+

Bonjour,

Je pense qu'il veut changer la formule en cellule G3:

=SI(af-ad>0;SI(ET(ad<=$F3;$F3<af);plage1;SI(bf-bd>0;SI(ET(bd<=$F3;$F3<bf);Plage2;SI(cf-cd>0;SI(ET(cd<=$F3;$F3<cf);Plage3;SI(df-dd>0;SI(ET(dd<=$F3;$F3<df);Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur11");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)));SI(OU(ET(0<=$F3;$F3<df);ET(dd<=$F3;$F3<24));Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur12");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)))));SI(OU(ET(0<=$F3;$F3<cf);ET(cd<=$F3;$F3<24));Plage3;SI(df-dd>0;SI(ET(dd<=$F3;$F3<df);Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur13");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)));SI(OU(ET(0<=$F3;$F3<df);ET(dd<=$F3;$F3<24));Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur14");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)))))));SI(OU(ET(0<=$F3;$F3<bf);ET(bd<=$F3;$F3<24));Plage2;SI(cf-cd>0;SI(ET(cd<=$F3;$F3<cf);Plage3;SI(df-dd>0;SI(ET(dd<=$F3;$F3<df);Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur15");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)));SI(OU(ET(0<=$F3;$F3<df);ET(dd<=$F3;$F3<24));Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur16");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)))));SI(OU(ET(0<=$F3;$F3<cf);ET(cd<=$F3;$F3<24));Plage3;SI(df-dd>0;SI(ET(dd<=$F3;$F3<df);Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur17");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)));SI(OU(ET(0<=$F3;$F3<df);ET(dd<=$F3;$F3<24));Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur18");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)))))))));SI(OU(ET(0<=$F3;$F3<af);ET(ad<=$F3;$F3<24));plage1;SI(bf-bd>0;SI(ET(bd<=$F3;$F3<bf);Plage2;SI(cf-cd>0;SI(ET(cd<=$F3;$F3<cf);Plage3;SI(df-dd>0;SI(ET(dd<=$F3;$F3<df);Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur19");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)));SI(OU(ET(0<=$F3;$F3<df);ET(dd<=$F3;$F3<24));Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur110");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)))));SI(OU(ET(0<=$F3;$F3<cf);ET(cd<=$F3;$F3<24));Plage3;SI(df-dd>0;SI(ET(dd<=$F3;$F3<df);Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur111");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)));SI(OU(ET(0<=$F3;$F3<df);ET(dd<=$F3;$F3<24));Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur112");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)))))));SI(OU(ET(0<=$F3;$F3<bf);ET(bd<=$F3;$F3<24));Plage2;SI(cf-cd>0;SI(ET(cd<=$F3;$F3<cf);Plage3;SI(df-dd>0;SI(ET(dd<=$F3;$F3<df);Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur1");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)));SI(OU(ET(0<=$F3;$F3<df);ET(dd<=$F3;$F3<24));Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur113");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)))));SI(OU(ET(0<=$F3;$F3<cf);ET(cd<=$F3;$F3<24));Plage3;SI(df-dd>0;SI(ET(dd<=$F3;$F3<df);Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur114");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2)));SI(OU(ET(0<=$F3;$F3<df);ET(dd<=$F3;$F3<24));Plage4;SI(ef-ed>0;SI(ET(ed<=$F3;$F3<ef);Plage5;"erreur115");SI(OU(ET(0<=$F3;$F3<ef);ET(ed<=$F3;$F3<24));Plage5;erreur2))))))))))

Personnellement je n'y touche pas, je passais juste guider notre cher Bruno Bonne chance!

Salut Ausecour

Oh punaise, je pensais qu'il s'agissait de paramètres, je ne suis absolument pas allez voir dedans

@GMBD, il y a donc quelque chose que je ne comprends pas
les plages HC ou HP sont déjà connues en général, pourquoi aller faire ce genre de formule tarabiscotée
Il suffirait de faire un abac des différents sites avec leurs plages respectives...

Hello,

Une petite propal qui devrait te simplifier la vie :)

J'ai viré toutes tes zones de nom parce que c'était l'enfer et pas forcément utile. Et c'est facilement adaptable si tu veux rajouter d'autres catégories style "hors pointe" etc

Dis moi si ça te va :)

@+

6horaires-1.xlsx (12.40 Ko)

Bonjour,

En effet, c'est de "cette" grosse formule qu'il s'agit !

Ce calculateur sera utilisé sur plusieurs sites. Il faut rentrer les plages horaires pour calculer le potentiel photovoltaïque d'un site.

la difficulté est que :

- Les sites peuvent avoir différentes plage horaire (1, 2, 3, 4 ou 5)

- Les plages peuvent être à des horaires différent d'un site à l'autre (heure début et heure fin)

- Il y aura toujours une plage sur la tranche de minuit mais qui ne sera pas forcement la première inscrite

En regardant ton calcul je n'ai pas l'impression que ce soit très différent de ce que j'avais fait. Tu as découpé ma 'Grosse' formule en plusieurs 'petite' et tu n'as fait que 3 créneaux horaire.

Mais en positif, ta présentation est bien plus lisible.

Je vais encore un peut regarder comment améliorer la chose.

Si vous avez d'autres idées je suis preneur.

Voici le fichier (et calcul) qui m'avait amené à ma 'grosse' formule

6horaires3.xlsx (18.10 Ko)

Hello,

J'ai adapté la formule à ton cas en spécifique mais si il en faut plus je peux déjà créer la formule pour 6 ou 7 créneaux horaires et que ca fonctionne correctement :)

Comme ça ils auront directement tout et ils ne seront pas obligés de remplir toutes les plages horaires

@+

bonjour

je risque .............................

cordialement

7gmbd.xlsx (18.66 Ko)

Bonsoir,

Baroute78, tu dis que tu as adapté la formule, mais tu n'as pas joint de fichier. :o)

Le maximum de plage que j'ai vu c'est 4, j'en ai mis une cinquième au cas ou, mais je ne pense pas que ça aille plus que cela.

Tulipe_4, je ne suis pas un as des formules, mais d'après ce que j'ai compris tu as inscrit des horaires en dur dans la fonction Equiv alors que les plages horaire sont presque toutes différentes d'un pays à l'autre. Quand je change les horaires, ça ne change pas dans la distribution horaire. Mais en tout cas j'aime bien l'utilisation de ton Index et Equiv. A quoi sert le @ au début de Index ?

Merci en tout cas pour vos suggestions.

Gilles

Hello tiens :)

@+

3horaires-1.xlsx (12.52 Ko)

Bonjour à tous !

Une proposition via Power Query :

Précision en l'absence d'information de votre profil....(A modifier donc !) : Power Query nécessite un complément gratuit pour Excel 2010 et 2013. Nativement intégré dans les versions postérieures.

Merci pour votre contribution. J'ai mis mes informations dans mon profil.

Je n'ai pas encore eu l'occasion de travailler avec PowerQuery. Je vais regarder tout ça, merci encore.

Bonjour le fil

Pour PQ c'est ici (au cas ou)

image

Baroute, ta solution est parfaite et très clair.

Par contre je ne comprend pas, si j'ai trois créneaux heure pleine, heure creuse, heure nuit et que je met un quatrième libellé heure normal sans les horaires ça foire toute la colonne. En parcourant les formules, je ne vois pas où est le problème.

Hello,

Hop c'est corrigé :) C'était dans la formule de la colonne "Oui" / "Non"

Merci pour ton retour

2horaires-1-1.xlsx (12.55 Ko)

Quel travail efficace !

Merci bien.

Rechercher des sujets similaires à "optimisation formule"