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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message par MLD »

Bonjour Micoute
Je ne comprend pas trés bien l'objet de ta demande. :oops:
Explique ce que tu veux obtenir :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre