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

Requêtes et SQL. Discussion :

Calcul de date en prenant en compte les week-end [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut Calcul de date en prenant en compte les week-end
    Bonjour,

    Je dois calculer pour un projet la date de fin d'une opération en ayant pour Info de départ la date de début et le temps du projet en "jour" ouvrés.
    Quelle serait la syntaxe dans une requête pour connaître la date de fin en incluant les samedi et dimanche ?
    Voici mes champs :
    Date de début : DateDebut
    Temps du projet en jour ouvrés : NbeJour
    Date de fin recherchée : DateFin

    En vous remerciant par avance,
    Franck

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 595
    Points : 281 910
    Points
    281 910
    Par défaut
    Bonjour,

    Jette donc un œil ici : http://claudeleloup.developpez.com/t...plic-ploc/#LIV

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut
    Bonjour,

    Merci beaucoup pour le lien
    En fait je cherche plutôt à connaître le nombre de samedi, dimanche et jours fériés sur la période défini

    Merci par avance
    Franck

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 595
    Points : 281 910
    Points
    281 910
    Par défaut Calcul d'une date ouvrable future (ou passée) connaissant une date de départ et un nombre de jours ouvrables
    Je viens d'ajouter, à ton intention, cette fonction à l'article :

    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
    Public Function Echeance(DateDebut As Date, NbreJrs As Integer) As Date
     'Renvoie la date ouvrable qui vient après le nombre de jours (qui peut être négatif)
     'DateDebut sous la forme anglo-saxonne
     'Si cette DateDebut n'existe pas dans la table, la fonction renvoie 00:00:00
     
      Dim rst As Recordset
      Set rst = CurrentDb.OpenRecordset("tJoursOuvres")
      Do While Not rst.EOF
        If rst("JoursOuvres") = DateDebut Then
            rst.Move NbreJrs
            Echeance = rst("JoursOuvres")
            Exit Function
          Else
            rst.MoveNext
        End If
      Loop
    End Function
    Je crois qu'elle répond exactement à la demande formulée dans ton 1er billet.

  5. #5
    Membre régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut
    Bonsoir,

    Merci beaucoup d'avoir écris ces lignes de code spécifiquement pour ma requête
    Je suis un peux novice et je sais pas comment utiliser ce code pour trouver la date de fin "DateFin" qui sera la date de début + le nbe de jours ouvrés + le nbe de samedi et dimanche

    Merci à toi

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 595
    Points : 281 910
    Points
    281 910
    Par défaut
    Bonjour,

    On a tous été débutants, pas de souci avec cela.

    Cependant, peux-tu me dire ce que tu ne comprends pas à la lecture de : http://claudeleloup.developpez.com/t...plic-ploc/#LIV ?

    Ne te contente pas de parcourir rapidement l'article, prends le temps de recréer les tables et la requête pas à pas sur ton PC, cela te permettra d'assimiler la technique et les détails.

    Tiens-nous bientôt au courant.

  7. #7
    Membre régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut
    Bonsoir,

    Merci beaucoup pour ta réponse.
    Oui j'ai bien pris le temps de refaire pas à pas les requêtes présentés mais je ne vois pas comment l'adapter à ma demande.

    J'ai bien compris qu'avec ces requêtes ont pouvait trouver le nbe de jours ouvrés dans une période défini (début et fin) mais dans mon cas je ne connais pas la date de fin je cherche à la calculer.

    Je ne vois vraiment pas comment adapter ces requêtes calculer la date de fin de mon projet.

    Merci tout de même pour ton aide
    Franck

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 595
    Points : 281 910
    Points
    281 910
    Par défaut
    Eh bien !




    L'exemple est ici : http://claudeleloup.developpez.com/F...0428Franck.mdb


    Plus, je ne sais comment faire...

  9. #9
    Membre régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut
    Bonsoir,

    Merci beaucoup d'avoir adapté la base à ma demande, j'apprécie beaucoup !
    J'ai essayé de bien suive tout le cheminement, je ne te cacherai pas que tout n'ai pas limpide pour le profane que je suis ;-)
    Lorsque je défini comme date de début le 7/04/14 et 5 pour les jours ouvrés il affiche 14/07/14 en date de fin; que peut-on modifier pour qu'il trouve bien le 12/04/14 en date de fin ?

    Merci à toi,
    Franck

  10. #10
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 595
    Points : 281 910
    Points
    281 910
    Par défaut
    Bonjour Franck,

    Lorsque je définis comme date de début le 7/04/14 et 5 pour les jours ouvrés il affiche 14/07/14 en date de fin;
    Tu as certainement voulu écrire 14/04/14.
    De plus, si tu dis que l'activité commence le lundi 7/4/14 et qu'elle dure 5 jours, elle sera terminée le vendredi 11/4/14 et non le 12... qui est d'ailleurs non ouvrable !

    Mais tu as raison, ma réponse du billet N° 8 était incorrecte : la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Echeance(DateDebut As Date, NbreJrs As Integer) As Date
    renvoie la date ouvrable qui vient après le nombre de jours ouvrables indiqué.
    Par exemple


    N.B. Dans ce contexte, la date doit être présentée à l’anglo-saxonne et encadrée de croisillons

    Donc dans la fonction Echeance, le jour de départ n’est pas compté.

    Dans ton cas, le jour de départ doit être compté donc la source contrôle doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Echeance([txtDebut];[txtDuree]-1).


    Mes excuses pour cette erreur de ma part et merci d’avoir réagi.
    J’apporterai la modification dans l’article pour y inclure ton exemple.
    Bonne journée.

  11. #11
    Membre régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut
    Bonsoir,

    Merci beaucoup ça marche tip top !!

    Je suis un vrai passionné d'Access mais le VBA est encore pour moi la pierre de rosette dont j'aimerai un jour arriver à percer les secrets :-)
    J'ai essayer de comprendre le code de la Function Echeance mais encore beaucoup de flou
    J'ose te demander quelques commentaires explicatifs sur chaque ligne de code afin de bien comprendre.
    Sinon pas de problème tu m'as déjà beaucoup aidé

    Bonne soirée
    Franck

  12. #12
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 595
    Points : 281 910
    Points
    281 910
    Par défaut
    J'ose te demander quelques commentaires explicatifs sur chaque ligne de code afin de bien comprendre.
    Qui n'ose rien n'a rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim rst As Recordset
      Set rst = CurrentDb.OpenRecordset("tJoursOuvres")
    On définit un ensemble avec les enregistrements de la table « tJoursOuvres ».
    Cela va nous permettre de manipuler chaque ligne de la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Do While Not rst.EOF
        ….
      Loop
    C’est une boucle. Tu dis à Access :

    « Tant que vous n’avez pas traité la dernière ligne de l’ensemble, recommencez à exécuter les instructions incluses entre le Do et le Loop. Quand vous aurez traité toutes les lignes, passez outre ».

    Faire quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        If rst("JoursOuvres") = DateDebut Then
            rst.Move NbreJrs
            Echeance = rst("JoursOuvres")
            Exit Function
          Else
            rst.MoveNext
        End If
    Schématiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If  telle situation  Then
        Faire ceci
      Else
        Faire cela
    End if
    En clair :

    ** Si, dans la ligne que vous êtes en train de lire, le champ « JoursOuvres » égale la valeur du paramètre DateDebut, alors
    - avancez dans le jeu d’enregistrements autant de fois qu’il est indiqué dans le paramètre NbreJrs ;
    - vous avez alors atteint la ligne qui nous intéresse, copiez la valeur du champ « JoursOuvres » dans la fonction, c’est la valeur qu’on vous demandait ;
    - sortez, on a fini.
    ** Par contre, si dans la ligne que vous êtes en train de lire, le champ « JoursOuvres » n’est pas égal à la valeur du paramètre DateDebut, lisez l’enregistrement suivant, on va reboucler.


    D'une manière générale, pour se documenter sur les propriétés d'un formulaire ou d'un état, ou de leurs contrôles :
    - afficher l'objet en mode construction ;
    - cliquer sur la propriété => elle se met en surbrillance ;
    - enfoncer la touche <F1>
    => l'aide Access s'ouvre à la bonne page.
    De même dans le code, placer le curseur de la souris et enfoncer F1.
    On peut aussi :
    • ouvrir l'aide <F1>, choisir l'onglet « Aide intuitive » et suivre les instructions ;
    • ouvrir la fenêtre d'exécution (<Ctrl> + G), saisir un mot-clé, y placer le curseur de la souris et enfoncer F1.

    À bientôt Champollion !

  13. #13
    Membre régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut
    Merci beaucoup !
    Champollion junior ;-)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/09/2012, 20h21
  2. [MySQL] exporter un tableau php vers MySQL en prenant en compte les NULL
    Par pierricktpt dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/03/2012, 08h51
  3. XmlGregorianCalendar en date (en prenant en compte le timezone)
    Par livinho38 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/01/2011, 10h34
  4. Réponses: 2
    Dernier message: 28/08/2007, 15h40
  5. Makfile prenant en compte les changements des headers
    Par mhtrinh dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 17/05/2006, 23h45

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