XL 2013 Jours fériers et jour ouvrés pour manipuler des dates

  • Initiateur de la discussion GuestRC
  • Date de début
G

GuestRC

Guest
Bonjour,

Je dois réaliser un formulaire de contrôle de maintenance en excel. Il y a des note allant de 0 à 2 en fonction de certains critère.
Lorsqu'il y a une note à 0, je dois créer un incident et donc lui donner une date qui par défaut est J+1 à 8h00. Mon problème est le suivant: Comment faire pour dire J+1 à 8h00 en prenant en compte les jours fériers et ouvrés? Pour le moment j'ai une énorme formule pour gérer les weekends, en gros si le jour est un vendredi tu fais J+3. La date (pour export CSV) a un format bizarre type AAA-MM-JJThh:mm:ss que je suis obligé de garder.

Pour le moment la formule est comme ça : =SI($H11=1;$AE2;SI(JOURSEM($I$8;2)=5;TEXTE($I$8+3;"aaaa-mm-jj")&"T8:00:00";TEXTE($I$8+1;"aaaa-mm-jj")&"T8:00:00"))

En gros si $Hxx (la note) est à 1 on prend la date du jour (déjà formatée en AE2) si non si c'est vendredi on fait J+3 au bon format si non on fait J+1 là j'ai toute l'année mais pas les jours fériers. il faudrait dire que si la date est dans la liste des jours fériers alors ça fait J+2 sauf si le jour J+2 est un vendredi ... comment puis-je faire ça simplement et sans macros ?

(Je ne dois pas utiliser de macros car le fichier est exporter après pour être complété du coup pas de macros ...)

D'avance merci pour votre aide! :)
 

CISCO

XLDnaute Barbatruc
Bonjour

Dans un premier temps, tu peux faire plus court avec
Code:
=SI($H11=1;$AE2;TEXTE($I$8+SI(JOURSEM($I$8;2)=5;3;1);"aaaa-mm-jj"))&"T8:00:00"

J'essaye de trouver une formule plus complète prenant en compte les jours fériés.

@ plus
 
G

GuestRC

Guest
Merci !

Effectivement cette formule est moins compliquée ;-) merci pour ça !

J'ai déjà une plage dans une autre feuille avec tous les jours fériers de l'année si besoin (genre FeuilleX!C8:C20, c'est pas ça mais c'est l'idée)
 

CISCO

XLDnaute Barbatruc
Bonjour

Cf. en pièce jointe, avec une formule matricielle à valider avec Ctrl+maj+entrer pour obtenir les {} devant et derrière la formule.

Le principe : On liste les 10 jours qui suivent la date dans I8 avec $I$8+LIGNE(INDIRECT("1:10")). Avec trois tests, on élimine ceux correspondants aux dimanches, aux lundis et aux jours fériés contenus dans la plage nommée fériés. Finalement, on ne garde que la date la plus petite de toutes celles convenant dans la liste restante, et on la met au format désiré.

Donc, cela ne fonctionne que s'il ni y a que 10 jours successifs au plus fériés, W.E inclus. S'il y a en a plus, il faut remplacer les 10 dans la formule par un nombre plus grand.

@ plus
 

Pièces jointes

  • essaijoursfériés.xlsx
    9.3 KB · Affichages: 52
Dernière édition:
G

GuestRC

Guest
Merci bien, petite question, comment on fait pour déclarer le tableau "fériers" ? (enfin où est-ce qu'on dit qu'il s'appelle comme ça? )

Si non merci beaucoup pour ce coup de main ça m'aide énormément :)
 
G

GuestRC

Guest
Ok c'est bon pour ça et dernière question, les jours ouvrés c'est juste les WE donc on inclus le lundi (pour mon projet du moins). C'est quelle formule que je dois modifier du coup? (et comment si possible?)

Merci beaucoup en tout cas! je connais très mal excel, d'habitude j'utilise le format web (donc PHP, JS, SQL) qui sont beaucoup plus souples ...
 

CISCO

XLDnaute Barbatruc
Bonjour

Jocelyn, par mail privé, m'a proposé une autre solution, plus simple, et n'utilisant pas de formule matricielle, à savoir
Code:
SI($H11=1;$AE2;TEXTE(SERIE.JOUR.OUVRE.INTL(I8;1;1;fériés);"aaaa-mm-jj"))&"T8:00:00"
valable pour éliminer les W.E et les jours fériés définis comme précédemment. Cette solution a l'avantage, outre le fait de ne pas utiliser une formule matricielle, de ne pas être limitée par les 10 jours fériés+WE successifs cités précédemment.

Si tu veux aussi éliminer les dimanches, les lundis et les samedis, il faut faire avec
Code:
SI($H11=1;$AE2;TEXTE(MIN(SI(NON(JOURSEM($I$8+LIGNE(INDIRECT("1:10")))=1)*NON(JOURSEM($I$8+LIGNE(INDIRECT("1:10")))=2)*NON(JOURSEM($I$8+LIGNE(INDIRECT("1:10")))=7)*NON(ESTNUM(EQUIV(($I$8+LIGNE(INDIRECT("1:10")));fériés;0)));$I$8+LIGNE(INDIRECT("1:10"))));"aaaa-mm-jj"))&"T8:00:00"
c.-à-d. la même formule que précédemment, avec un test *NON(JOURSEM($I$8+LIGNE(INDIRECT("1:10")))=2) en plus.

@ plus
 

Jocelyn

XLDnaute Barbatruc
Bonjour le Forum,
Bonjour skollrc, re CISCO :),

pour revenir sur le fait d'enlever en plus du samedi et du dimanche le lundi dans la formule

=SI($H11=1;$AE2;TEXTE(SERIE.JOUR.OUVRE.INTL(I8;1;1;fériés);"aaaa-mm-jj"))&"T8:00:00"

il suffit de remplacer SERIE.JOUR.OUVRE.INTL(I8;1;1;fériés)

par SERIE.JOUR.OUVRE.INTL(I8;1;"1000011";fériés)

ou la série "1000011" représente les jours de la semaine du lundi au dimanche 1 indiquant un jour non ouvré et 0 un jour ouvré

Cordialement

EDIT de la on peut considérer comme jours non ouvrés n'importe quel jour de la semaine ne pas oublier d'encadrer la série des ""
 

CISCO

XLDnaute Barbatruc
Bonjour

Ca, utiliser des 1 et des 0 dans une série du style "1000011", pour éliminer certains jours de la semaine et en garder d'autres, je ne connaissais pas. Merci, Jocelyn.

@ plus
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
554