Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/10/2011, 15h20   #1
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
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 : 83
Points : 22
Points : 22
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 !
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 18h23   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
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 :
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+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/10/2011, 20h18   #3
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
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 : 83
Points : 22
Points : 22
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
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 20h48   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Re,

Essai de mettre ce code dans un module VBA :
Code :
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 :
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 :
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+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 21h15   #5
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
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 : 83
Points : 22
Points : 22
Je vais potasser tout çà et reviens vers toi...

Merci infiniment User
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 17h21   #6
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
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+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 08h34   #7
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
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 : 83
Points : 22
Points : 22
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
Type de fichier : jpg R_HeuresOuvrees.JPG (63,6 Ko, 7 affichages)
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 12h21   #8
Membre Expert
 
Inscription : avril 2006
Messages : 1 050
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 050
Points : 1 230
Points : 1 230
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 :
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 :
 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
ilank est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 12h52   #9
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
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+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 19h36   #10
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
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 : 83
Points : 22
Points : 22
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 !
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 22h01   #11
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Renomme ton module en "Module1" par exemple :

Pourquoi nommes-tu ton module de la même manière que ta fonction ?
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 22h47   #12
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
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 : 83
Points : 22
Points : 22
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
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h39.


 
 
 
 
Partenaires

Hébergement Web