Nombre d'arguments trop nombreux pour cette fonction
RésoluPapyLuc51 Messages postés 4501 Date d'inscription Statut Membre Dernière intervention - 19 févr. 2024 à 08:41
- Nombre d'arguments trop nombreux pour cette fonction
- Fonction si et - Guide
- Nombre facile - Télécharger - Outils professionnels
- Nombre de jours entre deux dates excel - Guide
- Ascii nombre de caractères - Guide
- Fonction moyenne excel - Guide
3 réponses
Bonjour,
C'est souvent le problème quand on s'attaque à des formules complexes (genre usine à gaz), là il y a certaines fonctions qui n'ont pas leur parenthèse fermante.
En comparant une date avec une liste des jours fériés sur un autre feuillet il y a plus court comme formule. voir cet exemple
https://www.cjoint.com/c/NBrfSlWGuN6
Joindre une copie du fichier (sans les données confidentielles) si tu veux maintenir la conception que tu as mis en place.
suivre cette fiche
Cordialement
Bonjour.
De toutes façons, même si ta formule "à tiroirs" affichait le bon résultat, il ne serait valable que pour 2024 ! Pâques change de date chaque année, l'Ascension et Pentecôte aussi ...
Bonjour,
Non, dans la formule à tiroirs (si elle était écrite correctement), il est fait référence au mois et à l'année (en I3), ce qui nous permet en extrayant l'année (ou en ayant une autre cellule qui contient l'année) de calculer le dimanche de Pâques et les jours qui en dépendent (lundi de Pâques, Ascension, Pentecôte), exactement d'ailleurs comme on le fait plus simplement sans tiroirs et comme PapyLuc l'a proposé dans une liste de jours fériés annexée.
J'ai une autre formule pour le dimanche de Pâques réputée plus exacte pendant des siècles et des siècles (Amen), mais peu importe; formellement parlant, on ne devrait intégrer à la sortie ni le dimanche de Pâques ni le dimanche de Pentecôte puisque par définition ce sont des dimanches, sauf pour ceux qui travaillent les dimanches sauf fériés, mais c'est chacun qui voit.
En faisant donc dans le (très) absurde, année non datée en B3 (par exemple 2024), date recherchée en D4.
Si on ne veut pas passer par l'année en B3, la variante consiste à remplacer B3 par ANNEE(D4); on peut raccourcir la logorrhée en se servant d'une fonction OU multiple, mais qui me plante, je ne sais pas pourquoi.
=SIERREUR(SI.CONDITIONS(D4=DATE((B3);1;1);"Férié";D4=DATE((B3);5;1);"Férié";D4=DATE((B3);7;14);"Férié";D4=DATE((B3);8;15);"Férié";D4=DATE((B3);11;1);"Férié";D4=DATE((B3);11;1);"Férié";D4=DATE((B3);12;25);"Férié";D4=DATE(B3;SI((25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))>0;4;3);SI((25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))>0;(25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7));31+(25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))));"Férié";D4=DATE(B3;SI((25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))>0;4;3);SI((25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))>0;(25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7));31+(25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))))+1;"Férié";D4=DATE(B3;SI((25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))>0;4;3);SI((25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))>0;(25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7));31+(25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))))+39;"Férié";D4=DATE(B3;SI((25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))>0;4;3);SI((25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))>0;(25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7));31+(25-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29)-MOD(B3-1900+ENT((B3-1900)/4)+31-MOD((11*MOD(B3-1900;19)+4-ENT((7*MOD(B3-1900;19)+1)/19));29);7))))+50;"Férié");"")
Merci à tous pour votre participations et vos remarques.
Je travaille malheureusement souvent le dimanche et la plupart des jours fériés.
Effectivement dans ma formule du calcul de pâques une erreur c'était glissé et un oublie de parenthèses dans ma formule à tiroirs
La formule suivante permet de calculer le jour de Pâques : ARRONDI(DATE(ANNEE($I$3);4;MOD(234-11*MOD(ANNEE($I$3);19);30))/7;)*7-6+1 où I3 correspond à la date en cours
De celle ci découle Lundi de Pâques, Pentecôte et Ascension comme la spécifié Raymond.
dans ma réponse à PapyLuc vous trouverez, si cela vous intéresse, ma formule à tiroirs fonctionnelle.
Merci beaucoup.
Cordialement Jardinours
Bonsoir,
Merci de votre réponse. C'est vrai votre méthode est plus simple, je l'avais utilisé dans un autre fichier. Entre temps je me suis penché sur ma formule après correction elle fonctionne.
=SI($B12="";"";SI(JOURSEM($B12)=1;"";SI(OU($B12=DATEVAL("1/1/"&ANNEE($I$3));($B12=ARRONDI(DATE(ANNEE($I$3);4;MOD(234-11*MOD(ANNEE($I$3);19);30))/7;)*7-6+1);$B12=DATEVAL("1/5/"&ANNEE($I$3));$B12=DATEVAL("8/5/"&ANNEE($I$3));($B12=ARRONDI(DATE(ANNEE($I$3);4;MOD(234-11*MOD(ANNEE($I$3);19);30))/7;)*7-6+39);($B12=ARRONDI(DATE(ANNEE($I$3);4;MOD(234-11*MOD(ANNEE($I$3);19);30))/7;)*7-6+50);$B12=DATEVAL("14/7/"&ANNEE($I$3));$B12=DATEVAL("15/8/"&ANNEE($I$3));$B12=DATEVAL("1/11/"&ANNEE($I$3));$B12=DATEVAL("11/11/"&ANNEE($I$3));$B12=DATEVAL("25/12/"&ANNEE($I$3)));"FÉRIÉ";"")))
Merci beaucoup pour votre aide.
Cordialement Jardinours
Bonjour jardinours.
Si en Z1 (ou n'importe quelle autre cellule vide) tu mets la formule =ANNEE($I$3)
si ensuite tu définis le nom AI faisant référence à =Feuil1!$Z$1
si enfin tu fais un Rechercher/Remplacer de =ANNEE($I$3) par AI
alors ta formule de 569 caractères descend à 443 caractères :
' '=SI($B12="";"";SI(JOURSEM($B12)=1;"";SI(OU($B12=DATEVAL("1/1/" &ANNEE($I$3));($B12=ARRONDI(DATE(ANNEE($I$3);4;MOD(234-11*MOD(ANNEE($I$3);19);30))/7;) ...
'=SI($B12="";"";SI(JOURSEM($B12)=1;"";SI(OU($B12=DATEVAL("1/1/"
&AI);($B12=ARRONDI(DATE(AI;4;MOD(234-11*MOD(AI;19);30))/7;) ...
Bonjour jardinous et salutations à Raymond
'
Pour compléter :
'
Puisqu'en B12 il est cherché, en début de formule, le JOURSEM équivalent au dimanche, c'est donc une date.
'
Alors pourquoi utiliser DATEVAL()
'
En reprenant l'indication de Raymond en ce qui concerne l'année nommée AI
'
Remplacer DATEVAL("1/1/"&ANNEE($I$3)) par DATE(AI;1;1) et faire la même chose pour les autres dates.
'
Retirer aussi les parenthèses "(" et ")" qui englobent les OU() n°2,5 et 6.
'
Ce qui donne un total de 390 caractères
'
=SI($B12="";"";SI(JOURSEM($B12)=1;"";SI(OU($B12=DATE(AI;1;1);$B12=ARRONDI(DATE(AI;4;MOD(234-11*MOD(AI;19);30))/7;)*7-6+1;$B12=DATE(AI;5;1);$B12=DATE(AI;5;8);$B12=ARRONDI(DATE(AI;4;MOD(234-11*MOD(AI;19);30))/7;)*7-6+39;$B12=ARRONDI(DATE(AI;4;MOD(234-11*MOD(AI;19);30))/7;)*7-6+50;$B12=DATE(AI;7;14);$B12=DATE(AI;8;15);$B12=DATE(AI;11;1);$B12=DATE(AI;11;11);$B12=DATE(AI;12;25));"FÉRIÉ";"")))
'
Cordialement