patricktoulon
XLDnaute Barbatruc
Bonjour a tous
une fonction qui peut être bien utile dans les planning par exemple (VBA/formule)
utilisation en Formule:
'le 3 eme mercredi du mois de mars 2021
'le premier jeudi du mois de juillet 2021
'le premier vendredi du mois de décembre 2021
'le dernier lundi du mois de juin 2021(3 solutions)
'le dernier lundi du mois d'out 2021(3 solutions)
'le dernier vendredi de mars2021
'le premier lundi suivant la fin septembre 2021
'le dernier lundi de septembre 2021
comme vous avez pu le constater il y a des mois ou il y a 5 jours de semaine du même nom
donc pour le dernier cherchez plutôt le nieme "0" du mois suivant ou n="x"
c'est plus simple que de tester le 4eme ou 5 eme
pour le premier index jour du mois suivant c'est n="+"
--mis a jour le 29/06/2021--
une fonction qui peut être bien utile dans les planning par exemple (VBA/formule)
VB:
'**********************************************************
' Fonction Nieme_Day
'donne le Nieme jour de semaine du mois
'version 1 supprimée
'version 2.4
'Date 28 / 6 / 2021
'Auteur: Patricktoulon et Yeahou sur ExcelDownloads
'mises a jour:
'réévaluation de l'argument nieme en variant( 1 à 5) ou "+" ou "x"
'retour du premier index jour (demandé)du mois suivant par le nieme ="+" du mois
'retour du dernier index jour(demandé) du mois precédent par le nieme 0 du mois suivant
'retour du dernier index jour(demandé) du mois par le nieme ="x" du mois
'l'argument nieme=5 renvoie vide si le 5 eme index jour du mois demandé n'existe pas
'suppression du 5eme argument plus necessaire avec nieme="+"
' ajout de la sortie si l'argument N ne convient pas
'mise a jour 29/06/2021
'control total de la validité de l'argumentation pour (A,M,J,N)
'*************************************************************
Option Explicit
Function Nieme_Day(ByVal A&, ByVal M&, ByVal J&, ByVal N As Variant) As Variant
Dim Dat As Variant, Dy&
If N Like "[!x,+,0-5]" Or (M > 12 and N>0) Or J > 7 And A < 1900 Then Nieme_Day = "Invalid Request!": Exit Function
If N = "+" Then N = 1: M = M + 1 Else If N = "x" Then M = M + 1
Dat = DateSerial(A, M, 1): Dy = J - Weekday(Dat, 2): If Dy >= 0 Then Dy = Dy - 7
Dat = Dat + Dy + (Val(N) * 7)
If Month(Dat) > M And A = Year(Dat) Then Dat = ""
Nieme_Day = Dat
End Function
VB:
Sub test()
'
'le 3 eme mercredi du mois de mars 2021
MsgBox Format(Nieme_Day(2021, 3, 3, 3), "dddd dd mmmm yyyy")
'le premier jeudi du mois de juillet 2021
MsgBox Format(Nieme_Day(2021, 7, 4, 1), "dddd dd mmmm yyyy")
'le premier vendredi du mois de décembre 2021
MsgBox Format(Nieme_Day(2021, 12, 5, 1), "dddd dd mmmm yyyy")
'le dernier lundi du mois de juin 2021
MsgBox Format(Nieme_Day(2021, 6, 1, 4), "dddd dd mmmm yyyy")
MsgBox Format(Nieme_Day(2021, 7, 1, 0), "dddd dd mmmm yyyy") 'par le nieme 0 du mois suivant
MsgBox Format(Nieme_Day(2021, 6, 1, "x"), "dddd dd mmmm yyyy") 'l'argument N="x" donne le dernier
'le dernier lundi du mois d'out 2021
MsgBox Format(Nieme_Day(2021, 9, 1, 0), "dddd dd mmmm yyyy") 'par le nieme 0 du mois suivant
MsgBox Format(Nieme_Day(2021, 8, 1, 5), "dddd dd mmmm yyyy") 'le mois d'aout 2021 a 5 lundi
MsgBox Format(Nieme_Day(2021, 8, 1, "x"), "dddd dd mmmm yyyy") 'l'argument N="x" donne le dernier
'le dernier jeudi du mois d'avril 2021
MsgBox Format(Nieme_Day(2021, 5, 4, 0), "dddd dd mmmm yyyy") 'par le nieme 0 du mois suivant
MsgBox Format(Nieme_Day(2021, 4, 4, 5), "dddd dd mmmm yyyy") '
MsgBox Format(Nieme_Day(2021, 4, 4, "x"), "dddd dd mmmm yyyy") 'l'argument N="x" donne le dernier
'le premier lundi suivant la fin septembre 2021
MsgBox Format(Nieme_Day(2021, 9, 1, "+"), "dddd dd mmmm yyyy") 'l'argument "+" passe au premier du mois suivant
'le premier vendredi suivant la fin mars 2021
MsgBox Format(Nieme_Day(2021, 3, 5, "+"), "dddd dd mmmm yyyy") 'l'argument "+" passe au premier du mois suivant
End Sub
utilisation en Formule:
=Nieme_Day(annéee;mois;index du jour;nieme)
'le 3 eme mercredi du mois de mars 2021
VB:
=Nieme_Day(2021; 3; 3; 3)
'le premier jeudi du mois de juillet 2021
Code:
=Nieme_Day(2021;7; 4; 1)
'le premier vendredi du mois de décembre 2021
Code:
= Nieme_Day(2021; 12; 5; 1)
'le dernier lundi du mois de juin 2021(3 solutions)
Code:
=Nieme_Day(2021; 7; 1; 0) ' le lundi précédant le mois de juillet Nieme=0
=Nieme_Day(2021;6; 1; 4)
=Nieme_Day(2021;6; 1; "x")
'le dernier lundi du mois d'out 2021(3 solutions)
Code:
=Nieme_Day(2021; 9; 1; 0)
=Nieme_Day(2021; 8; 1; 5) 'le mois d’août 2021 a 5 lundi
=Nieme_Day(2021; 8; 1; "x") 'le"x" désigne le dernier
Code:
=Nieme_Day(2021; 3; 5; "x")
'le premier lundi suivant la fin septembre 2021
Code:
=Nieme_Day(2021; 9; 1; "+")
'le dernier lundi de septembre 2021
Code:
=Nieme_Day(2021; 9; 1; "x")
comme vous avez pu le constater il y a des mois ou il y a 5 jours de semaine du même nom
donc pour le dernier cherchez plutôt le nieme "0" du mois suivant ou n="x"
c'est plus simple que de tester le 4eme ou 5 eme
pour le premier index jour du mois suivant c'est n="+"
--mis a jour le 29/06/2021--
Dernière édition: