Index, equiv, plusieurs critères [Fermé]

Signaler
-
Messages postés
23994
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 avril 2021
-
Bonjour,

Je cherche où j'ai pu faire une erreur dans cette formule :

=SIERREUR(INDEX(plage06;EQUIV($K$639;groupe06;0);EQUIV(HY636;semaine06;0)+EQUIV(HY637;jour06;0)-1);0)

Elle devrait me donner une réponse en fonction d'un jour de semaine et d'un numéro de semaine mais la réponse est décalée, et varie selon le numéro de semaine que j'inscris.

mais un bon exemple vaut mieux qu'un long discours, le fichier peut se télécharger à cette adresse : http://www.cjoint.com/?CGzrq7mTbPe



3 réponses

Messages postés
23994
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 avril 2021
6 719
Bonjour,

Déjà on peut peut-être remettre en cause plusieurs choses même si elles ne sont pas à l'origine de ton problème.

1) NO.SEMAINE(...;2) ne retourne pas le n° de semaine ISO utilisé en europe, mais le n° de semaine américain. Des fois c'est bon, des fois non.
Si ton fichier est toujours utilisé sur 2010 mettre NO.SEMAINE(...;21).
S'il doit être compatible 2003 utiliser une formule. Par exemple :
=ENT((D-SOMME(MOD(DATE(ANNEE(D-MOD(D-2;7)+3);1;2);{1E+99;7})*{1;-1})+5)/7)

2) tu pourrais utiliser la fonction date() qui est prévue pour fabriquer une date, plutôt que concatener() et laisser excel interpréter.
D'ailleurs j'aurais plutôt fabriqué le 1er du mois en L1, et en S1: =L1+1, à recopier vers la droite en sélectionnant 7 cellules. Plutôt que d'aller écrire les n° de jour un par un dans les cellules R5, Y5, etc... On se poserait moins de questions sur tes dates.

3) ...;EQUIV($K$639;groupe06;0);...
A quoi ça sert ?
groupe06=K639:K643. Pourquoi ne pas écrire directement 1 ?
On va dire que tu as simplifié et que c'est normal.

4)EQUIV(HY636;semaine06;0)+EQUIV(HY637;jour06;0)-1
Là je crois qu'on touche le noeud du problème. C'est vraiment cette colonne que que veux ? La 71ème de L:HT, c'est à dire CD639 (=98) ?

Calcule plutôt la date du lundi de la semaine qui t'intéresse avec :
=7*HY636+DATE($B$1;1;3)- JOURSEM(DATE($B$1;1;3))-5
(+x pour les autres jours)
et recherche avec equiv() cette date en L1:HT1 pour avoir la 1ère colonne qui t'intéresse.

eric
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
3
Date d'inscription
jeudi 25 juillet 2013
Statut
Membre
Dernière intervention
26 juillet 2013

Tu es génial !!
Mes premiers tests semblent donner le bon résultat partout, ma patronne va encore dire que j'ai trouvé une formule "de la mort qui tue" et je partagerai volontiers le compliment avec toi.

Merci encore.


PS Je n'ai pas utilisé NO.SEMAINE(...;21) si l'année commence un mercredi, ce qui sera le cas l'an prochain, mon fichier ne comptera pas les cinq premiers jours, ce qui me paraît un peu limite, et m'obligerait à compter une semaine supplémentaire sur 2013 ? Si j'ai bien compris l'explication de la méthode de calcul...
Messages postés
23994
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 avril 2021
6 719
Bonjour,

PS Je n'ai pas utilisé NO.SEMAINE(...;21)
Si tu travailles en europe tu dois utiliser tout le temps NO.SEMAINE(...;21) ou une formule si tu dois être compatible excel 2003.
Quelle que soit l'année ou le jour où elle commence.
Regarde par exemple pour le 30/12/2013.
Sur un calendrier c'est la semaine 1.
=NO.SEMAINE(A1;2) => 53 !!!!
=NO.SEMAINE(A1;2) => 1
En europe toutes nos semaines font 7 jours. La semaine 1 est la 1ère semaine ayant au moins 4 jours, les jours de fin de l'année précédente lui sont rattachés. Les américains eux, ont des semaines de 3 et 4 jours...

si l'année commence un mercredi, ce qui sera le cas l'an prochain, mon fichier ne comptera pas les cinq premiers jours, ce qui me paraît un peu limite

C'est à toi à t'adapter aux règles du calendriers, l'inverse ne se fera jamais.
Maintenant tu peux très bien choisir d'utiliser le système américain. Certaines années tu auras un décalage de 1 semaine sur toute l'année par rapport à un calendrier, et non plus juste sur les derniers jours (voir 05/01/2016). A toi d'estimer si c'est gênant ou pas. Ca peut très bien ne pas l'être.

eric
Messages postés
3
Date d'inscription
jeudi 25 juillet 2013
Statut
Membre
Dernière intervention
26 juillet 2013

méthode de calcul microsoft :
Système 1 La semaine contenant le 1er janvier est la première semaine de l'année ; elle est numérotée semaine 1.
Système 2 La semaine contenant le premier mardi de l'année est la première semaine de l'année ; elle est numérotée semaine 1. Ce système correspond à la méthodologie spécifiée dans la norme ISO 8601, appelé couramment système de numérotation des semaines européen.

Rien à voir avec "La semaine 1 est la 1ère semaine ayant au moins 4 jours, les jours de fin de l'année précédente lui sont rattachés."
Messages postés
23994
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 avril 2021
6 719
Ben, il faudrait qu'ils arrêtent de boire chez krosoft...

https://fr.wikipedia.org/wiki/Num%C3%A9rotation_ISO_des_semaines :
Définitions équivalentes pour la semaine 01 de l'année ISO :
- La semaine avec le premier jeudi de l'année,
- La semaine avec le premier jour ouvré de l'année (les samedis, dimanches et 1er janvier étant comptés comme non ouvrés),
- La semaine du 4 janvier,
- La première semaine de l'année avec au moins quatre jours,
- La semaine dont le lundi est compris entre le 29 décembre et le 4 janvier,
- La semaine dont le jeudi est compris entre le 1er et le 7 janvier.


Toutes ces définitions sont équivalentes : la semaine avec le 1er jeudi est bien la 1ère semaine ayant au moins 4 jours .

Exemple pas plus loin que l'année prochaine : le 01/01/2014 est un mercredi, semaine 5 jours donc semaine 01.
Le 1er mardi est le 07/01/14 qui sera en semaine 02
Mais heureusement ils n'appliquent pas ce qui est dit dans l'aide, le calcul est correct avec ;21
eric