Page 1 sur 1

Trouver tous les jours de semaine précisés dans une année

Publié : lun. 28/nov./2016 8:50
par Micoute
Bonjour à tous,

J'aimerais à la place de saisir le numéro d'ordre du jour recherché, saisir son nom (dimanche..samedi).

Ne sachant pas comment je pourrais faire, je viens solliciter votre aide bienveillante, car je sais que je serai bien aiguillé et je vous en remercie tous par anticipation.

Code : Tout sélectionner

Procedure.s TrouverPremierJourSemaine(Annee, Mois, Joursem)
  Protected Jour=1
  Protected DatePremierJourSemaine=Date(Annee, Mois, Jour, 0, 0, 0)
  
  ;Cherche le premier JourSemaine
  While DayOfWeek(DatePremierJourSemaine)<>Joursem
    
    jour + 1
    DatePremierJourSemaine= Date(Annee, mois, jour, 0, 0, 0)
  Wend
  
  ProcedureReturn FormatDate("%dd/%mm/%yyyy", DatePremierJourSemaine)
  
EndProcedure

Procedure.s TrouverDeuxiemeJourSemaine(Annee, Mois, Joursem)
  Protected Jour=8
  Protected DateDeuxiemeJourSemaine=Date(Annee, Mois, Jour, 0, 0, 0)
  
  ;Cherche le deuxième JourSemaine
  While DayOfWeek(DateDeuxiemeJourSemaine)<>Joursem
    
    jour + 1
    DateDeuxiemeJourSemaine= Date(Annee, mois, jour, 0, 0, 0)
  Wend
  
  ProcedureReturn FormatDate("%dd/%mm/%yyyy", DateDeuxiemeJourSemaine)
  
EndProcedure

Procedure.s TrouverTroisiemeJourSemaine(Annee, Mois, Joursem)
  Protected Jour=15
  Protected DateTroisiemeJourSemaine=Date(Annee, Mois, Jour, 0, 0, 0)
  
  ;Cherche le Troisième JourSemaine
  While DayOfWeek(DateTroisiemeJourSemaine)<>Joursem
    
    jour + 1
    DateTroisiemeJourSemaine= Date(Annee, mois, jour, 0, 0, 0)
  Wend
  
  ProcedureReturn FormatDate("%dd/%mm/%yyyy", DateTroisiemeJourSemaine)
  
EndProcedure

Procedure.s TrouverQuatriemeJourSemaine(Annee, Mois, Joursem)
  Protected Jour=22
  Protected DateQuatriemeJourSemaine=Date(Annee, Mois, Jour, 0, 0, 0)
  
  ;Cherche le Quatrième JourSemaine
  While DayOfWeek(DateQuatriemeJourSemaine)<>Joursem
    
    jour + 1
    DateQuatriemeJourSemaine= Date(Annee, mois, jour, 0, 0, 0)
  Wend
  
  ProcedureReturn FormatDate("%dd/%mm/%yyyy", DateQuatriemeJourSemaine)
  
EndProcedure

Procedure.s TrouverCinquiemeJourSemaine(Annee, Mois, Joursem)
  Protected Jour = JoursDansMois(Annee, Mois)
  Protected DateCinquiemeJourSemaine
  
  ;Chercher le CinquiemeJourSemaine
  DateCinquiemeJourSemaine = AddDate(ParseDate("%dd/%mm/%yyyy", TrouverQuatriemeJourSemaine(Annee, Mois, Joursem)), #PB_Date_Week, 1)
  If Val(Mid(FormatDate("%dd/%mm/%yyyy", DateCinquiemeJourSemaine), 4, 2)) = Mois
    ProcedureReturn FormatDate("%dd/%mm/%yyyy", DateCinquiemeJourSemaine)
  Else
    ProcedureReturn ""
  EndIf  
  
EndProcedure

Question:
    Annee = Val(InputRequester("Du premier au dernier " + JourSemaine$, "Quelle année ? 1970-2037", Str(Year(Date()))))
    
    If annee < 1970 Or Annee > 2037
      Goto Question
    EndIf  
    
    Debug "Tous les " + JourSemaine$ + "s de " + Annee + #CRLF$
    
    For i = 1 To 12
      Global PremierJourSemaine.s = TrouverPremierJourSemaine(Annee, i, JourSemaine)
      Global DeuxiemeJourSemaine.s = TrouverDeuxiemeJourSemaine(Annee, i, JourSemaine)
      Global TroisiemeJourSemaine.s = TrouverTroisiemeJourSemaine(Annee, i, JourSemaine)
      Global QuatriemeJourSemaine.s = TrouverQuatriemeJourSemaine(Annee, i, JourSemaine)
      Global CinquiemeJourSemaine.s = TrouverCinquiemeJourSemaine(Annee, i, JourSemaine)
      Global texte$ = PremierJourSemaine  + " " + DeuxiemeJourSemaine + " " + TroisiemeJourSemaine + " " + QuatriemeJourSemaine + " " + CinquiemeJourSemaine
      
      Debug texte$
    Next i

Re: Trouver tous les jours de semaine précisés dans une anné

Publié : lun. 28/nov./2016 11:23
par MLD
Bonjour Micoute
Je ne comprend pas trés bien l'objet de ta demande. :oops:
Explique ce que tu veux obtenir :)

Re: Trouver tous les jours de semaine précisés dans une anné

Publié : lun. 28/nov./2016 11:57
par falsam
Si tu fais référence à ton ancien code (Voir code), l'utilisation d'un ComboBox() contenant les jours de la semaine (Lundi, Mardi, Mercredi, etc ...) associé à la fonction GetGadgetState() te permettrait de connaitre le numéro du jour et le jour.

Code : Tout sélectionner

Enumeration
  #mainForm
  #jours
  #valider
EndEnumeration

Global Dim jours.s(6)

;Plan de l'application
Declare Start()
Declare Valider()
Declare Exit()

Start()

Procedure Start()
  Protected n
  
  ;Initialisation de la tables des jours 
  jours(0) = "Lundi"
  jours(1) = "Mardi"
  jours(2) = "Mercredi"
  jours(3) = "Jeudi"
  jours(4) = "Vendredi"
  jours(5) = "Samedi"
  jours(6) = "Dimanche"
      
  OpenWindow(#mainForm, 0, 0, 500, 300, "Fermer une fenetre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(#jours, 20, 20, 150, 22)
  
  For n = 0 To 6
    AddGadgetItem(#jours, -1, jours(n))
  Next
  SetGadgetState(#jours, 0)
  
  ButtonGadget(#valider, 180, 20, 80, 22, "Valider")
  
  ;Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())
  BindGadgetEvent(#valider, @Valider())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure Valider()
  Protected n = GetGadgetState(#jours)
Debug "Numero du jour " + Str(n+1)  + " : " + jours(n)  
  
EndProcedure

Procedure Exit()  
  End
EndProcedure

Re: Trouver tous les jours de semaine précisés dans une anné

Publié : lun. 28/nov./2016 12:41
par Micoute
Merci beaucoup falsam, c'est juste ce que je souhaitais, mais en fait je ne me souvenais plus de l'avoir déjà posté, car il fait partie d'une bibliothèque des fonctions ayant trait aux dates et qui évolue au fil de mes recherches et de mes connaissances.