IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Trouver la date d'une journee de la semaine


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 33
    Points
    33
    Par défaut Trouver la date d'une journee de la semaine
    Bonjour,

    Je cherche a developper l'algo qui permet de retourner la date en fonction des parametres suivants : Annee, Semaine, Journee.

    En d'autres termes, on recherche par exemple la date du LUNDI de la semaine 28 de l'annee 2008.

    J'ai donc developper une methode, cependant j'ai qq soucis y'a toujours qq chose qui deconne :S

    Je vous post le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    PROCEDURE RetJourSem(pAnnee,pSem,pJour="LUNDI")
     
    LOCAL
    	nJourRch	est un entier
    	nJourAn		est un entier
    	nJourTot	est un entier
    	nDec		est un entier
    	dDate		est une Date
     
    //NUMERO DU JOUR DU PREMIER DE L'AN
    nJourAn = DateVersJour(pAnnee+"0101")
     
    //NUMERO DU JOUR RECHERCHE
    SELON pJour
    	CAS "LUNDI" 	: nJourRch = 1
    	CAS "MARDI" 	: nJourRch = 2
    	CAS "MERCREDI" 	: nJourRch = 3
    	CAS "JEUDI" 	: nJourRch = 4
    	CAS "VENDREDI" 	: nJourRch = 5
    	CAS "SAMEDI" 	: nJourRch = 6
    	CAS "DIMANCHE" 	: nJourRch = 7
    	AUTRE CAS
    		Erreur("Le passage du paramètre n°3 est incorrect.")
    		RENVOYER ""	
    FIN
     
    //DETERMINE LA VALEUR A DECREMENTER
    SELON nJourAn
    	CAS 1,2,3,4 	: nDec = 1
    	CAS 5,6,7	: nDec = 0
    FIN
     
    //FORMATER NUMERO DE SEMAINE
    SI pSem = 0 ALORS
    	SELON nJourRch
    		CAS 1,2,3,4
    			pAnnee = Val(pAnnee)-1
    			pSem = "53"
    			RENVOYER RetJourSem(pAnnee,pSem,pJour)
    		CAS 5,6,7
    			SI nJourRch < nJourAn ALORS
    				pAnnee = Val(pAnnee)-1
    				pSem = "52"
    				RENVOYER RetJourSem(pAnnee,pSem,pJour)
    			FIN
    	FIN
    FIN
     
    //CALCUL DU NB JOUR ECOULE PAR RAPPORT A LA REFENRENCE HF
    nJourTot = DateVersEntier(pAnnee+"0101")+7*(Val(pSem)-nDec)-(nJourAn-nJourRch)
     
    //CONVERTION AU FORMAT DATE
    dDate = EntierVersDate(nJourTot)
     
    RENVOYER dDate
    Donc si quelqu'un voit un probleme il peut me wisp Merci d'avance.

  2. #2
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    en calculant le nombre de jour depuis le premier jour de la permière semaine de l'année ? car à partir du jour de l'an çà ne marche pas. Sauf peut-être en récupérant le jour et la semaine du 01/01/2008 et en se seravnt de çà comme offset négatif

    Mais comme toujours... en semaine ISO, en semaine calendrier ?
    Emmanuel Lecoester
    => joomla addict.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 80
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    J'ai mis au point un algo répondant à ce besoin il y a quelques temps... (fonctionnel etc, bien sur).

    Je regarderais ce midi si je peux le retrouver

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Ca serait sympa oui car je n'arrive pas a trouver le bon algo :S En plus je ne trouve pas une seule source identique sur ce sujet :S

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 80
    Points : 78
    Points
    78
    Par défaut
    Alors...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    // Le code d'appel :
    dDateEnCours est une Date = RenvoitPremierJourSemaine(SAI_Semaine, SAI_Annee) 
     
    // La procédure RenvoitPremierJourSemaine
    PROCEDURE RenvoitPremierJourSemaine(nNumeroSemaine, nAnnee)
     
    dPremierJour est une Date
    // Le 4 janvier est TOUJOURS présent dans la première semaine de l'année,
    // on l'utilise donc comme date de référence pour se placer sur la première semaine de l'année
    dPremierJour..Année = nAnnee
    dPremierJour..Mois = 1
    dPremierJour..Jour = 4
     
    // On se positionne sur le lundi de cette première semaine
    dPremierJour..Jour -= EntierVersJour(dPremierJour) - 1
    // Puis on incrémente selon la semaine passée en parametre
    dPremierJour..Jour += 7 * (nNumeroSemaine - 1)
     
    RENVOYER dPremierJour
    La procédure renvoit le premier jour de la semaine pour une semaine et une année. A partir de la, il n'y a plus qu'a incrémenter selon le jour de la semaine désiré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Pour le mardi :
    dDateEnCours+=1
    // Le jeudi :
    dDateEnCours +=3
    Sauf erreur de ma part, c'est fonctionnel et stable

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Je poste ma procédure avec le code de Finar. Le résultat est plutôt bon mais il faut savoir que Windev gère la semaine "53" et "0". Par conséquent si tu passes les paramètres suivants : Année = "2008" et Semaine = "1" la fonction va bien te retourner "31/12/2007". Cependant il considère que cette date fait partie de la semaine "53".

    Du coup il y a p'tete quelques adaptions à faire mais ça fonctionne plutôt bien sinon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    PROCEDURE RetJourSem(pAnnee,pSem,pJour="LUNDI")
     
    LOCAL
    	dPremJour 		est une Date
    	nValJour		est un entier
     
    //D'APRES ISO 8601 : LA SEMAINE 1 EST CELLE QUI CONTIENT LE 04 JANVIER 
    dPremJour..Année = pAnnee
    dPremJour..Mois  = 1
    dPremJour..Jour  = 4
     
    //NUMERO DU JOUR (WINDEV) A DECREMENTER
    SELON pJour
    	CAS "LUNDI" : nValJour = 1
    	CAS "MARDI" : nValJour = 2		
    	CAS "MERCREDI" : nValJour = 3
    	CAS "JEUDI" : nValJour = 4
    	CAS "VENDREDI" : nValJour = 5
    	CAS "SAMEDI" : nValJour = 6
    	CAS "DIMANCHE" : nValJour = 7		
    FIN
     
    //POSITIONNEMENT SUR LE JOUR RECHERCHE
    dPremJour..Jour -= EntierVersJour(dPremJour)-nValJour
     
    //POSITIONNEMENT SUR LA BONNE SEMAINE
    dPremJour..Jour += 7*(Val(pSem)-1)
     
    RENVOYER dPremJour

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 80
    Points : 78
    Points
    78
    Par défaut
    En effet, la gestion des semaines de Windev n'est pas forcément au top... (bien qu'il puisse réellement exister une semaine 53, dans certains cas précis).

    Dans mon cas, ma procédure semble bien fonctionner, tant qu'on ne fait pas de "bétises" dans le passage de parametres... Par contre, j'évite de me fier au résultat de NumeroSemaine()

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Oui je ne sais pas comment les normes définissent ces semaines, mais bon nos clients ne travaillent que très rarement dans cette période de l'année.

    Merci pour ton code, bien plus simple que le mien. Beetle.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 80
    Points : 78
    Points
    78
    Par défaut
    De rien

    Bon Dev,
    Finar

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trouver les lignes suivant une date d'expiration
    Par nesswaw dans le forum Requêtes
    Réponses: 9
    Dernier message: 11/05/2012, 18h17
  2. Réponses: 9
    Dernier message: 21/07/2010, 08h43
  3. Trouver une date d'après un N° de semaine et une année
    Par lezinve dans le forum Général VBA
    Réponses: 2
    Dernier message: 26/02/2010, 12h38
  4. Trouver la date d'insertion d'une ligne
    Par shirya dans le forum Access
    Réponses: 2
    Dernier message: 03/11/2007, 17h29
  5. Réponses: 3
    Dernier message: 28/08/2007, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo