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 différence entre deux dates : problème de format [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Points : 22
    Points
    22
    Par défaut Calcul de différence entre deux dates : problème de format
    Bonjour à toutes et à tous,

    Je sèche sur une formule dans le générateur de requêtes Access.

    Je suis en présence de deux dates/heure, par exemple :
    02/02/2010 10:20:00
    03/02/2010 12:40:00

    Je souhaite calculer la différence entre ces deux dates en heures/minutes, à savoir : 26:20:00.

    Le problème est que Access me renvoie comme résultat de la différence : 31/12/1899 02:20:00

    En fait, pour tout résultat supérieur à 24h, il m'extrait le nombre de jours qu'il écrit en format d'une date complète farfelue, et il garde le reste sous le bon format hh:nn:ss.

    J'ai essayé plusieurs choses: la simple soustraction, la fonction diffdate, l'ajout d'un format "hh:nn:ss", etc. Mais rien ne solutionne mon problème.

    Une précision : mon temps calculé doit rester dans un format date (et non une chaine de caractères) afin de pouvoir calculer des statistiques (min, max, moyenne,...) et dessiner des graphes.

    Voila, si quelqu'un pouvait éclairer ma lanterne, je vous en serais extrêmement reconnaissant.

    Merci.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 090
    Points : 5 207
    Points
    5 207
    Par défaut
    Bonjour,

    J'ai développé cette petite fonction qui doit répondre à ton besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'convertit des jours en heures:mn:sec
    Public Function HMS(d) As String
    Dim x As Double
    HMS = ""
    x = d * 24 'conversion en heures
    If x >= 1 Then HMS = Int(x) & "h "
    x = (x - Int(x)) * 60 'solde en minutes
    If x >= 1 Then HMS = HMS & Int(x) & "' "
    x = (x - Int(x)) * 60 'solde en sec
    If x >= 1 Then HMS = HMS & Int(x) & "''"
    HMS = Trim(HMS)
    End Function
    Si elle est dans un module elle peut être appelée partout y compris dans une requête

    PS : c'est à utiliser uniquement à l'affichage car en réalité ta variable contient la bonne valeur !

    Variante : tu multiplies par 24 et ainsi tu stockes le nombre d'heures dans un réel...
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    bonjour,
    dans une requete ceci conviendrait, peut être avec le formatage de la date rn plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    datediff("n",#02/02/2010 10:20:00#,#02/03/2010 12:40:00#)\60 & ":" & datediff("n",#02/02/2010 10:20:00#,#02/03/2010 12:40:00#)mod 60

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    Cela ressemble pas mal à ce que j'avais trouvé de mon côté (en plus simple cela dit) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (DiffDate("s";[date1];[date2]))/3600) & " h " & Ent(((Moyenne(DiffDate("s";[date1];[date2]))/3600)-Ent(Moyenne(DiffDate("s";[date1];[date2]))/3600))*60) & " m"
    J'ai quand même utilisé la fonction de nico84 qui me permet d'alléger mes requêtes et en plus de l'utiliser dans mon code vba ! Je ne savais pas qu'une fonction vba pouvait être appelée dans une requête, merci du tuyau

    Après je vais tâcher de me débrouiller pour mes statistiques car comme tu l'as dit cette solution n'est valable que pour de l'affichage (puisque le résultat est dans un format string).

    Merci à vous deux pour votre aide !

  5. #5
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 090
    Points : 5 207
    Points
    5 207
    Par défaut
    C'est pas ce que j'ai dit !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le problème est que Access me renvoie comme résultat de la différence : 31/12/1899 02:20:00
    Access renvoie la différence en nombre de jours et comme il affiche les dates à partir de 1899 cela donne cet affichage bizarre mais c'est bien le bon calcul

    S'il faut stocker le résultat, le mieux est de le faire dans une date (ou un réel après multiplication par 24 pour l'avoir en heures) et ma fonction ne sert qu'à afficher le résultat
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

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

Discussions similaires

  1. [AC-2010] Calculer la différence entre deux dates, en jour, dans une requête
    Par Just-Soft dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/10/2010, 02h19
  2. [AC-2007] calculer la différence entre deux dates en minutes
    Par sarah12 dans le forum IHM
    Réponses: 5
    Dernier message: 20/07/2010, 15h44
  3. Calculer une différence entre deux dates
    Par attif0709 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/04/2010, 12h06
  4. Calcul de différence entre deux dates cas vaut 0
    Par zanoubya dans le forum Débuter
    Réponses: 3
    Dernier message: 25/12/2008, 19h45
  5. Calculer la différence entre deux dates
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/12/2007, 08h27

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