calcul du premier jour ouvré d'un mois donné
Publié : mer. 24/mars/2021 9:07
Bonjour à tous,
je vous offre ce petit bout de code permettant de calculer le premier jour ouvré d'un mois et d'une année donnés, je suis passé par une structure, mais il y a d'autres façons plus simples.
je vous offre ce petit bout de code permettant de calculer le premier jour ouvré d'un mois et d'une année donnés, je suis passé par une structure, mais il y a d'autres façons plus simples.
Code : Tout sélectionner
;Premier jour ouvré du mois
;par Micoute 23 mars 2021
EnableExplicit
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Txt_Enonce
#Str_Annee
#Cmb_Annees
#Lst_Mois
#Btn_Quitter
EndEnumeration
Enumeration Polices
#Police
EndEnumeration
Structure sMois
Nom.s
Numero.i
EndStructure
Structure sJour
Nom.s
Numero.i
EndStructure
Structure Jour_ouvre
NomMois.s
NomJour.s
J.i
M.i
A.i
EndStructure
LoadFont(#Police, "Verdana", 12)
SetGadgetFont(#PB_Default, FontID(#Police))
Global Evenement, i, Jour_ouvre.Jour_ouvre, Jour, Mois, Annee, JourSem, DatePremierJourOuvre
Global Dim TabNomMois.sMois(12), Dim TabNomJours.sJour(6)
For i = 1 To 12
TabNomMois(i)\Nom=StringField("janvier février mars avril mai juin juillet août septembre octobre novembre décembre",i," ")
TabNomMois(i)\Numero=i
Next i
For i = 0 To 6
TabNomJours(i)\Nom=StringField("dimanche lundi mardi mercredi jeudi vendredi samedi",i+1," ")
TabNomJours(i)\Numero=i
Next i
Declare Programme_principal()
Declare Calcul_Dates()
Declare Quitter()
Declare.s Premier_Jour_ouvre(Annee, Mois)
Programme_principal()
Procedure Programme_principal()
If OpenWindow(#Fenetre_principale, 0, 0, 400, 420, "Premiers jours ouvrés", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(#Txt_Enonce, 20, 20, 360, 20, "", #SS_CENTERIMAGE|#SS_CENTER)
ListIconGadget(#Lst_Mois, 30, 60, 350, 270, "Date", 340, #LVS_NOCOLUMNHEADER)
ComboBoxGadget(#Cmb_Annees, 140, 350, 100, 30)
i = 2010
While i <= 2037
AddGadgetItem(#Cmb_Annees, -1, Str(i))
i + 1
Wend
;SetGadgetState(#Cmb_Annees, Year(Date())-2010)
ButtonGadget(#Btn_Quitter, 140, 390, 100, 20, "Quitter")
BindGadgetEvent(#Cmb_Annees, @Calcul_Dates())
BindGadgetEvent(#Btn_Quitter, @Quitter())
BindEvent(#PB_Event_CloseWindow, @Quitter())
Repeat
Evenement = WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Quitter
EndSelect
EndSelect
ForEver
EndIf
EndProcedure
Procedure Calcul_Dates()
ClearGadgetItems(#Lst_Mois)
Annee = Val(GetGadgetText(#Cmb_Annees))
SetGadgetText(#Txt_Enonce, "Premiers jours ouvrés en " + Annee)
i = 1
While i <= 12
Premier_Jour_ouvre(Annee, i)
AddGadgetItem(#Lst_Mois, i, Jour_ouvre\NomJour + " " + Jour_ouvre\J + " " +TabNomMois(i)\Nom + " " + Jour_ouvre\A)
i + 1
Wend
EndProcedure
Procedure Quitter()
Select EventType()
Case #PB_EventType_LeftClick
CloseWindow(#Fenetre_principale)
End
EndSelect
EndProcedure
Procedure.s Premier_Jour_ouvre(Annee, Mois)
Jour=1
JourSem = DayOfWeek(Date(Annee, Mois, Jour, 0, 0, 0))
Select Mois
Case 1, 5, 11
Select JourSem
Case 0:Jour + 1:JourSem = 1
Case 1 To 4:Jour + 1:JourSem + 1
Case 5:Jour + 3:JourSem = 1
Case 6:Jour + 2:JourSem = 1
EndSelect
Case 2 To 4, 6 To 10, 12
Select JourSem
Case 0:Jour + 1:JourSem = 1
Case 1 To 5:DatePremierJourOuvre=Date(Annee,Mois,Jour,0,0,0)
Case 6:Jour + 2:JourSem = 1
EndSelect
EndSelect
DatePremierJourOuvre=Date(Annee,Mois,Jour,0,0,0)
Jour_ouvre\A = Annee
Jour_ouvre\J = Day(Date(Annee, Mois, Jour, 0, 0, 0))
Jour_ouvre\NomJour = TabNomJours(DayOfWeek(DatePremierJourOuvre))\Nom
Jour_ouvre\M = Mois
Jour_ouvre\NomMois = TabNomMois(Mois)\Nom
EndProcedure