Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formule pour premier jour ouvré du mois

12 réponses
Avatar
RENAUD Eric
Bonjour,

Je ne sais pas si cela est possible mais pour une application de gestion de
présence,
j'aimerai pouvoir pour chaque mois, mettre une formule qui me donnerai la
date du premier jour ouvré du mois considéré

Ex.
Avril : 01/04/05
Mai : 02/05/05
Juin : 01/06/05

D'avance merci

10 réponses

1 2
Avatar
ChrisV
Bonjour Eric,

Comment sont saisis les mois... "Janvier", "Février"... etc, ou 1, 2, 3 ?


ChrisV


"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Je ne sais pas si cela est possible mais pour une application de gestion
de
présence,
j'aimerai pouvoir pour chaque mois, mettre une formule qui me donnerai la
date du premier jour ouvré du mois considéré

Ex.
Avril : 01/04/05
Mai : 02/05/05
Juin : 01/06/05

D'avance merci





Avatar
RENAUD Eric
Bonjour,

Normalement les mois sont écrits en toutes lettres dans les cellules
(Janvier, février, etc)


"ChrisV" a écrit dans le message de
news:
Bonjour Eric,

Comment sont saisis les mois... "Janvier", "Février"... etc, ou 1, 2, 3 ?


ChrisV


"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Je ne sais pas si cela est possible mais pour une application de gestion
de
présence,
j'aimerai pouvoir pour chaque mois, mettre une formule qui me donnerai
la


date du premier jour ouvré du mois considéré

Ex.
Avril : 01/04/05
Mai : 02/05/05
Juin : 01/06/05

D'avance merci









Avatar
ChrisV
Re,

Sur la base d'une fonction de LL

=PremierJO(2005;MOIS(A1&1))


dans un module

Function PremierJO(année As Integer, mois As Integer) As Double
'retourne le premier jour ouvré
'pour un mois donné
'utilise la fonction TYPEJOUR
Dim PremierJourMois As Date
Dim jour As Date
PremierJourMois = DateSerial(année, mois, 1)
For jour = PremierJourMois To PremierJourMois + 5
If TYPEJOUR(jour) = 0 Then Exit For
Next jour
PremierJO = jour
End Function

Function TYPEJOUR(D As Date)
Dim A As Integer, T As Integer
Dim LP As Date, LD As Long
A = Year(D)
If A > 2099 Then
TYPEJOUR = CVErr(xlErrValue)
Exit Function
End If
LD = Int(D)
If LD <= 2 Then
If LD = 1 Then TYPEJOUR = 2
Exit Function
End If
T = (((255 - 11 * (A Mod 19)) - 21) Mod 30) + 21
LP = DateSerial(A, 3, 2) + T + (T > 48) _
+ 6 - ((A + A 4 + T + (T > 48) + 1) Mod 7)
Select Case D
' Jours fériés mobiles
Case Is = LP, Is = LP + 38, Is = LP + 49
TYPEJOUR = 2
' Jours fériés fixes
Case Is = DateSerial(A, 1, 1), Is = DateSerial(A, 5, 1), _
Is = DateSerial(A, 5, 8), Is = DateSerial(A, 7, 14), _
Is = DateSerial(A, 8, 15), Is = DateSerial(A, 11, 1), _
Is = DateSerial(A, 11, 11), Is = DateSerial(A, 12, 25)
TYPEJOUR = 2
Case Else
' Samedi ou dimanche
If Weekday(D, vbMonday) >= 6 Then TYPEJOUR = 1
End Select
End Function


ChrisV


"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Normalement les mois sont écrits en toutes lettres dans les cellules
(Janvier, février, etc)


"ChrisV" a écrit dans le message de
news:
Bonjour Eric,

Comment sont saisis les mois... "Janvier", "Février"... etc, ou 1, 2, 3 ?


ChrisV


"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Je ne sais pas si cela est possible mais pour une application de
gestion
de
présence,
j'aimerai pouvoir pour chaque mois, mettre une formule qui me donnerai
la


date du premier jour ouvré du mois considéré

Ex.
Avril : 01/04/05
Mai : 02/05/05
Juin : 01/06/05

D'avance merci













Avatar
RENAUD Eric
C'est sympa.
Encore merci

"ChrisV" a écrit dans le message de
news:%23iKhf%
Re,

Sur la base d'une fonction de LL

=PremierJO(2005;MOIS(A1&1))


dans un module

Function PremierJO(année As Integer, mois As Integer) As Double
'retourne le premier jour ouvré
'pour un mois donné
'utilise la fonction TYPEJOUR
Dim PremierJourMois As Date
Dim jour As Date
PremierJourMois = DateSerial(année, mois, 1)
For jour = PremierJourMois To PremierJourMois + 5
If TYPEJOUR(jour) = 0 Then Exit For
Next jour
PremierJO = jour
End Function

Function TYPEJOUR(D As Date)
Dim A As Integer, T As Integer
Dim LP As Date, LD As Long
A = Year(D)
If A > 2099 Then
TYPEJOUR = CVErr(xlErrValue)
Exit Function
End If
LD = Int(D)
If LD <= 2 Then
If LD = 1 Then TYPEJOUR = 2
Exit Function
End If
T = (((255 - 11 * (A Mod 19)) - 21) Mod 30) + 21
LP = DateSerial(A, 3, 2) + T + (T > 48) _
+ 6 - ((A + A 4 + T + (T > 48) + 1) Mod 7)
Select Case D
' Jours fériés mobiles
Case Is = LP, Is = LP + 38, Is = LP + 49
TYPEJOUR = 2
' Jours fériés fixes
Case Is = DateSerial(A, 1, 1), Is = DateSerial(A, 5, 1), _
Is = DateSerial(A, 5, 8), Is = DateSerial(A, 7, 14), _
Is = DateSerial(A, 8, 15), Is = DateSerial(A, 11, 1), _
Is = DateSerial(A, 11, 11), Is = DateSerial(A, 12, 25)
TYPEJOUR = 2
Case Else
' Samedi ou dimanche
If Weekday(D, vbMonday) >= 6 Then TYPEJOUR = 1
End Select
End Function


ChrisV


"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Normalement les mois sont écrits en toutes lettres dans les cellules
(Janvier, février, etc)


"ChrisV" a écrit dans le message de
news:
Bonjour Eric,

Comment sont saisis les mois... "Janvier", "Février"... etc, ou 1, 2, 3
?





ChrisV


"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Je ne sais pas si cela est possible mais pour une application de
gestion
de
présence,
j'aimerai pouvoir pour chaque mois, mettre une formule qui me
donnerai




la
date du premier jour ouvré du mois considéré

Ex.
Avril : 01/04/05
Mai : 02/05/05
Juin : 01/06/05

D'avance merci

















Avatar
AV
Avec un nom de mois en A1 (c'est pas une date !), pour l'année 2005 (à adapter)
et avec une plage nommée "Jrf" :
Matricielle (validation par ctrl+maj+entrée)

=PETITE.VALEUR(SI((JOURSEM((1&"/"&A1&"/2005")+LIGNE(INDIRECT("1:5"));2)<6)*(ESTN
A((EQUIV((1&"/"&A1&"/2005")+LIGNE(INDIRECT("1:5"));Jrf;0))));(1&"/"&A1&"/2005")+
LIGNE(INDIRECT("1:5")));1)

PS : c'est toujours "mieux" de manipuler des vraies dates
PS bis : il y a un fil pas si vieux à regarder (01/06/05 16:21)
AV
Avatar
AV
Heu...ça marche avec les mois en littéral comme précisé par le demandeur ?

AV
Avatar
SL
Bonjour

En A1 tu as ton mois en toute lettre ("juin") et dans la plage
"Jours_fériés" la liste des jours fériés susceptibles de tomber en semaine
et le 1er jour du mois (nouvel an, lundi de pâques - en 2013, fête du
travail, jeudi de l'ascension - en 2008, feu lundi de pentecôte - si rétabli
en 2009 ;-) , toussaint).

=SERIE.JOUR.OUVRE(CNUM("1"&A4&"2005")-1;1;Jours_fériés)

Change 2005 par l'année voulue si nécessaire.

CNUM("1"&A4&"2005")-1 te donne le dernier jour du mois précédant et donc la
formule complète te donne le 1er jour ouvré après le dernier jour du mois
précédent en excluant les jours fériés.

Stéphane

"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Je ne sais pas si cela est possible mais pour une application de gestion
de
présence,
j'aimerai pouvoir pour chaque mois, mettre une formule qui me donnerai la
date du premier jour ouvré du mois considéré

Ex.
Avril : 01/04/05
Mai : 02/05/05
Juin : 01/06/05

D'avance merci





Avatar
SL
Pardon
=SERIE.JOUR.OUVRE(CNUM("1"&A1&"2005")-1;1;Jours_fériés)
j'avais mis A4 et non A1

Stéphane

"SL" a écrit dans le message de news:
%
Bonjour

En A1 tu as ton mois en toute lettre ("juin") et dans la plage
"Jours_fériés" la liste des jours fériés susceptibles de tomber en semaine
et le 1er jour du mois (nouvel an, lundi de pâques - en 2013, fête du
travail, jeudi de l'ascension - en 2008, feu lundi de pentecôte - si
rétabli en 2009 ;-) , toussaint).

=SERIE.JOUR.OUVRE(CNUM("1"&A4&"2005")-1;1;Jours_fériés)

Change 2005 par l'année voulue si nécessaire.

CNUM("1"&A4&"2005")-1 te donne le dernier jour du mois précédant et donc
la formule complète te donne le 1er jour ouvré après le dernier jour du
mois précédent en excluant les jours fériés.

Stéphane

"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Je ne sais pas si cela est possible mais pour une application de gestion
de
présence,
j'aimerai pouvoir pour chaque mois, mettre une formule qui me donnerai la
date du premier jour ouvré du mois considéré

Ex.
Avril : 01/04/05
Mai : 02/05/05
Juin : 01/06/05

D'avance merci









Avatar
ChrisV
Salut Alain,

=PremierJO(2005;MOIS(A1&1))

et le MOIS(A1&1), y sert à quoi à ton avis...?
;-)


ChrisV


"AV" a écrit dans le message de news:
ePf$
Heu...ça marche avec les mois en littéral comme précisé par le demandeur ?

AV




Avatar
ChrisV
Heu... j'obtiens les résultats suivants pour l'année 2005, le mois (en
littéral)

Février: 02/02/2005 ?
Mars: 02/03/2005 ?
Avril: 04/04/2005 ?
Juin: 02/06/2005 ?
Juillet: 04/07/2005 ?
Août: 02/08/2005 ?
Septembre: 02/09/2005 ?
Décembre: 02/12/2005 ?

Alors que pour chacune des autres formules proposées, ou encore celle-ci (si
on ne souhaite pas utiliser l'utilitaire d'analyse)...

=SI(OU(DATE(2005;MOIS(A21&1);1+SI(JOURSEM(DATE(2005;MOIS(A21&1);1))=7;2;SI(JOURSEM(DATE(2005;MOIS(A21&1);1))=1;1)))=jrF)úUX;DATE(2005;MOIS(A21&1);1+SI(JOURSEM(DATE(2005;MOIS(A21&1);1))=7;2;SI(JOURSEM(DATE(2005;MOIS(A21&1);1))=1;1)));SI(JOURSEM(DATE(2005;MOIS(A21&1);1))=6;DATE(2005;MOIS(A21&1);4);DATE(2005;MOIS(A21&1);2)))

les résultats renvoyés sont bien conformes au calendrier des peteuteu...


ChrisV


"AV" a écrit dans le message de news:
%
Avec un nom de mois en A1 (c'est pas une date !), pour l'année 2005 (à
adapter)
et avec une plage nommée "Jrf" :
Matricielle (validation par ctrl+maj+entrée)

=PETITE.VALEUR(SI((JOURSEM((1&"/"&A1&"/2005")+LIGNE(INDIRECT("1:5"));2)<6)*(ESTN
A((EQUIV((1&"/"&A1&"/2005")+LIGNE(INDIRECT("1:5"));Jrf;0))));(1&"/"&A1&"/2005")+
LIGNE(INDIRECT("1:5")));1)

PS : c'est toujours "mieux" de manipuler des vraies dates
PS bis : il y a un fil pas si vieux à regarder (01/06/05 16:21)
AV




1 2