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 :

Heures ouvrées 8/20h ? [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 109
    Points : 64
    Points
    64
    Par défaut Heures ouvrées 8/20h ?
    Bonjour,

    Mon activité court de 8 à 20H => 365 jours/an et mes délais d'interventions techniques contractuels sont de 4h.
    Dans ma BDD, j'ai réalisé une requête qui me calcule des délais d'interventions, moyennes...
    Les calculs sont OK tant que la date de la demande d'intervention, l'intervention elle même, les heures de début et de fin se passent le même jour.
    Dès lors, que la demande d'intervention est faite à 19h et que l'intervention à lieu le lendemain à 10h les calculs sont faux !

    Sachant que je ne maitrise pas le "code", quel pourrait être la formule d'heures ouvrées de 8 à 20h ?

    Thanks for your help !

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 593
    Points
    19 593
    Billets dans le blog
    65
    Par défaut
    Salut,

    J'ai eu recours par le passé à une fonction VBA un peu du même style que la tienne, bien sur à adapter à ton cas :

    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
    Public Function HeuresOuvrees(DD As Date, DF As Date) As Integer
     
       If DateDiff("d", DD, DF) = 0 Then
     
          If (#8:00:00 AM# <= TimeValue(DD)) And (#8:00:00 PM# >= TimeValue(DF)) Then
     
             HeuresOuvrees = DateDiff("h", DD, DF)
     
          ElseIf (#8:00:00 AM# > TimeValue(DD)) And (#8:00:00 PM# <= TimeValue(DF)) Then
     
             HeuresOuvrees = 12 ' N'arrivera jamais
     
          ElseIf (#8:00:00 AM# > TimeValue(DD)) And (#8:00:00 AM# < TimeValue(DF)) Then
     
             HeuresOuvrees = DateDiff("h", #8:00:00 AM#, TimeValue(DF))
     
          ElseIf (#8:00:00 PM# > TimeValue(DD)) And (#8:00:00 PM# <= TimeValue(DF)) Then
     
             HeuresOuvrees = DateDiff("h", TimeValue(DD), #8:00:00 PM#)
     
          End If
     
       Else
     
          If TimeValue(DD) >= (#8:00:00 AM#) And TimeValue(DD) <= (#8:00:00 PM#) Then
     
             HeuresOuvrees = DateDiff("h", TimeValue(DD), #8:00:00 PM#)
     
          ElseIf TimeValue(DD) < (#8:00:00 AM#) Then
     
             HeuresOuvrees = 12 ' N'arrivera jamais
     
          End If
     
          If TimeValue(DF) >= (#8:00:00 AM#) And TimeValue(DF) <= (#8:00:00 PM#) Then
     
             HeuresOuvrees = HeuresOuvrees + DateDiff("h", #8:00:00 AM#, TimeValue(DF))
     
          ElseIf TimeValue(DF) > (#8:00:00 PM#) Then
     
             HeuresOuvrees = HeuresOuvrees + 12
     
          End If
     
       End If
     
    End Function
    J'espère que ça correspond à ta demande car je ne suis pas sur de comprendre ce que tu entend par délai d'intervention, à voir

    A+

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 109
    Points : 64
    Points
    64
    Par défaut
    Je n'ai pas été très explicite en effet, je reprends :

    les champs de ma table sont les suivant:
    Date_demande_d'inter / Heure_demande_inter/ Date_inter / H_Début_inter / H_Fin_inter.

    Ma requête basée sur cette table qui me sert à calculer mes délais d'interventions est la suivante:

    Délais_inter: [Heure_demande_inter]-[H_Début] <= Temps que j'ai mis pour intervenir.
    Mon calcul est juste quand tout se passe le même jour et par conséquent l'heure de demande d'inter et toujours inférieure à l'heure de début d'inter.
    Là où ça se passe pas bien c'est quand la demande d'inter est, par exemple, le 14/10 à 19h et que la date d'inter est le 15/10 à 9H.
    Dans ce cas l'Heure de demande d'inter est supérieure à l'Heure d'inter.

    Voilà mon dilemme ...

    Merci User pour ton bout de code, mais je ne suis pas calé pour l'adapter à mon cas.

    Encore merci

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 593
    Points
    19 593
    Billets dans le blog
    65
    Par défaut
    Re,

    Essai de mettre ce code dans un module VBA :
    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
     
    Public Function HeuresOuvrees(DD As Date, HD As Date, DF As Date, HF As Date) As Integer
     
       If DateDiff("d", DD, DF) = 0 Then
     
          If (#8:00:00 AM# <= TimeValue(HD)) And (#8:00:00 PM# >= TimeValue(HF)) Then
     
             HeuresOuvrees = DateDiff("h", HD, HF)
     
          ElseIf (#8:00:00 AM# > TimeValue(HD)) And (#8:00:00 PM# <= TimeValue(HF)) Then
     
             HeuresOuvrees = 12 ' N'arrivera jamais
     
          ElseIf (#8:00:00 AM# > TimeValue(HD)) And (#8:00:00 AM# < TimeValue(HF)) Then
     
             HeuresOuvrees = DateDiff("h", #8:00:00 AM#, TimeValue(HF))
     
          ElseIf (#8:00:00 PM# > TimeValue(HD)) And (#8:00:00 PM# <= TimeValue(HF)) Then
     
             HeuresOuvrees = DateDiff("h", TimeValue(HD), #8:00:00 PM#)
     
          End If
     
       Else
     
          If TimeValue(HD) >= (#8:00:00 AM#) And TimeValue(HD) <= (#8:00:00 PM#) Then
     
             HeuresOuvrees = DateDiff("h", TimeValue(HD), #8:00:00 PM#)
     
          ElseIf TimeValue(HD) < (#8:00:00 AM#) Then
     
             HeuresOuvrees = 12 ' N'arrivera jamais
     
          End If
     
          If TimeValue(HF) >= (#8:00:00 AM#) And TimeValue(HF) <= (#8:00:00 PM#) Then
     
             HeuresOuvrees = HeuresOuvrees + DateDiff("h", #8:00:00 AM#, TimeValue(HF))
     
          ElseIf TimeValue(HF) > (#8:00:00 PM#) Then
     
             HeuresOuvrees = HeuresOuvrees + 12
     
          End If
     
       End If
     
    End Function
    Et après si ta table se nomme "Table1", tu appelles la fonction dans la requête comme ceci :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Table1.Date_demande_inter, Table1.Heure_demande_inter, Table1.Date_inter, Table1.H_Début_inter, HeuresOuvrees([Date_demande_inter],[Heure_demande_inter],[Date_inter],[H_Début_inter]) AS HeuresOuvrées
    FROM Table1;


    Ou plus simplement la fonction adapté à ton cas précis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function HeuresOuvrees(DD As Date, HD As Date, DF As Date, HF As Date) As Integer
     
       If DateDiff("d", DD, DF) = 0 Then
     
         HeuresOuvrees = DateDiff("h", HD, HF)
     
       Else
     
         HeuresOuvrees = DateDiff("h", TimeValue(HD), #8:00:00 PM#)
         HeuresOuvrees = HeuresOuvrees + DateDiff("h", #8:00:00 AM#, TimeValue(HF))
     
       End If
     
    End Function
    A+

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 109
    Points : 64
    Points
    64
    Par défaut
    Je vais potasser tout çà et reviens vers toi...

    Merci infiniment User

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 593
    Points
    19 593
    Billets dans le blog
    65
    Par défaut
    Salut,

    A noter que, dans le cas de 1/2 heures ou tranche d'heure, pour le calcul des heures tu as cette formule:
    http://www.developpez.net/forums/d11...s/#post6305302

    A+

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 109
    Points : 64
    Points
    64
    Par défaut
    Bonjour Denis,

    J'ai tenté en vain de mettre en application tes recommandations... Il doit y avoir quelque chose qui m'échappe.

    => Le module "HeuresOuvrees" est bien crée.
    Concernant la requête qui fait appel à la fonction "HeuresOuvrees", j'ai procédé comme suit => Voir screen shot .

    L'erreur retournée est: Fonction HeuresOuvrees non définie dans l'expression.

    Encore merci pour ta patience
    Images attachées Images attachées  

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour à tous,

    Il suffit d'ajouter le nombre d'heures ouvrés entre la date de demande et la date d'intervention en utilisant la méthode DateDiff("d",DateDemande,DateInter).

    Nombre d'heures écoulées entre la date de demande et la date d'intervention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("d",DateDemande,DateInter) * (1+HeureMax-HeureMin)
    Et le nombre d'heures écoulées entre l'heure de demande et l'heure d'intervention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     HeureInter - HeureDemande + DateDiff("d",DateDemande,DateInter) * (1+HeureMax-HeureMin)
    Dans ton cas (1+HeureMax-HeureMin) = (1+20-8) => 13
    Et d'après ton exemple, 9-19 + 1*13=> 3 Heures

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 593
    Points
    19 593
    Billets dans le blog
    65
    Par défaut
    Salut,

    Concernant la fonction :

    Dans la fenêtre base de données du cliques sur l'onglet "Modules", Puis tu fais nouveau, et enfin tu copies la fonction dans ce module que tu compiles et enregistres sous 1 nom de ton choix.

    Et normalement ta requête devrait reconnaître la fonction

    Question :

    De quel type sont les champs [Heure_Appel] et [Heure_Deb] ?

    A+

  10. #10
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 109
    Points : 64
    Points
    64
    Par défaut
    Bonsoir,

    User:
    1> j'ai effectivement collé le code dans un module que j'ai nommé "Heuresouvrees".
    2> j'ai crée une requête en mode "SQL" ou j'ai également collé ton instruction en prenant soin de bien renommer les champs faisant référence à ma table source...
    Après quelques recherches, je comprends comment est composé le code, et comment on y fait appel via l'instruction SQL...Hélas ça ne fonctionne pas. Vue de ma "fenêtre", je dirai qu'il manque la "liaison" entre les 2.
    Mes champs date et heures sont tous au format "Date/Heure".

    ilank:

    Dès que j'ai réussi à mettre en application le "code" d'User, je tenterai ta solution. A ce moment là, je risque de solliciter ton aide

    Merci à vous deux.

    j'y retourne !

  11. #11
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 593
    Points
    19 593
    Billets dans le blog
    65
    Par défaut
    Renomme ton module en "Module1" par exemple :

    Pourquoi nommes-tu ton module de la même manière que ta fonction ?

  12. #12
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 109
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par User Voir le message
    Renomme ton module en "Module1" par exemple :

    Pourquoi nommes-tu ton module de la même manière que ta fonction ?
    Parce que personne ne me l'avait dit ! même pas "VBA pour les nuls" !!
    Disons que je ne voyais pas comment la requête arrivait à pointer sur la fonction ...
    Ça fonctionne parfaitement User et je t'en remercie !!

    Merci infiniment

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

Discussions similaires

  1. fonction calcul heures ouvrées
    Par zeloutre dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/12/2011, 12h16
  2. Pb performances pendant les heures ouvrées
    Par Fouvreaux dans le forum Administration
    Réponses: 1
    Dernier message: 29/04/2009, 13h37
  3. Macro et jours/heures ouvrées
    Par BENSAISAI dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/05/2008, 13h15
  4. Calcul d'heures ouvrées
    Par kenobyalex dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/04/2008, 15h06
  5. [BO 6.51] durée en jour ouvré et heure "ouvrée"
    Par aurelie83 dans le forum Deski
    Réponses: 1
    Dernier message: 12/02/2008, 18h20

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