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

VBA Access Discussion :

Conversion heure en décimales


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut Conversion heure en décimales
    bonjour,

    ma question est peut-être simpliste,

    mais pourquoi en vba il n'existe pas de méthode directe pour convertir une heure en décimal et inversement, du style

    ConvertVersDec (hh:mm)

    quand on voit le nombre de personne qui en aurait l'utilité
    ce serait génial

    merci pour vos commentaires

    Pascal

  2. #2
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?CDate(41351)
    18/03/2013
    @+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    bonjour Dolphy35

    mais si j'ai en entrée

    3.5 et que j'utilise ta fonction ainsi

    Cdate(3.5)
    j'aurai en sortie

    03:30

    et si j'ai
    en entrée 04:30
    et que j'utilise

    Cdec(#04:30#)

    j'aurai en sortie

    4.5

    c'est ça?

    merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,

    Si ça peut t'aider :

    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
    Public Function HeureToDec(pHeure As Date) As Single
        Dim nbHeures As Integer, nbMinutes As Integer, nbSecondes As Single
     
        nbHeures = DatePart("h", pHeure, vbMonday, vbFirstFourDays)
        nbMinutes = DatePart("n", pHeure, vbMonday, vbFirstFourDays)
     
        nbSecondes = nbMinutes * 60 + DatePart("s", pHeure, vbMonday, vbFirstFourDays)
        nbSecondes = nbSecondes / 3600
        HeureToDec = nbHeures + nbSecondes
     
    End Function
     
    Public Function DecToHeure(pHeure As Single) As Date
        Dim nbHeures As Integer, nbMinutes As Integer, nbSecondes As Single
     
        nbHeures = Int(pHeure)
        nbSecondes = (pHeure - nbHeures) * 3600
        nbMinutes = Int(nbSecondes / 60)
        nbSecondes = nbSecondes - (nbMinutes * 60)
     
        DecToHeure = TimeSerial(nbHeures, nbMinutes, nbSecondes)
     
    End Function

  5. #5
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Bonjour,

    Désolé je suis partit sur les date, je ne sais pas pourquoi. En fait c'est les heures qui t'interresse ?

  6. #6
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    mais pourquoi en vba il n'existe pas de méthode directe pour convertir une heure en décimal et inversement, du style
    En fait, je comprend que tu parles de convertir une date/heure, qui est fondamentalement un instant, en une durée. Ceci n'a pas trop de sens sans avoir deux moments à comparer.

    Pour représenter une durée, il faut savoir de quelle durée on parle : années, jours, secondes, millisecondes, trimestres, semaines, phases lunaires ? et bien sur le type de la variable à représenter qui nous donnera la précision et l'étendue de cette durée : décimal, entier, réel ?

    Si ensuite on désire afficher cette durée, il faut connaître les bornes de l'intervalle à représenter : de la milliseconde au millénaire ?

    Par ta question, tu demandes implicitement la durée écoulée en heures depuis le début de la journée, à représenter dans un nombre à virgule. Et c'est ce que te répond paidge avec ses deux procédures. Access à sa propre représentation interne qui est le nombre de millisecondes écoulées depuis le début de la journée, et c'est ce que te répond Dolphy.

    C'est pour ces raisons que Access ne propose pas de fonction toute faite. Il est impossible de prédire la fourchette d'utilisation que chacun voudra en faire, alors qu'il est facile de fabriquer sa propre nomenclature.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    j'ai essayé ainsi,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Thhmmss As Date
    Thhmmss = (Tdecimal / 24)

    apparement cela fonctionne, dois-je m'attendre à qqch que le vba Access ne gère pas,genre incohérence des données , limitation de transformation.....

    merci pour votre avis,
    cette solution me paraît en regard des autres solutions proposées trop simple,
    pour être exploitable.....


    Pascal

  8. #8
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?HeureToDec(#04:30#)
    4,5

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Pago283, copies/colles les 2 fonctions que j'ai postées dans un module. Ensuite, comme l'a écrit mumen, tu peux utiliser ces fonctions dans des procédures, des fonctions, des requêtes, des expressions....Normalement cela répond à ce que tu souhaites faire Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Commande0_Click()
     
    MsgBox HeureToDec(Time())
     
    End Sub
    Ca va t'afficher l'heure actuelle sous forme décimale HF

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    bonjour à tout deux...

    merci tout d'abord pour ton aide....

    j'ai essayé ton code et il marche très bien,

    mais si je fais

    donc si je fais avce la façon si dessous

    la conversion decimal vers heure, ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Thhmmss As Date
    Thhmmss = (Tdecimal / 24)
    ce serait ok comme cela aussi?

    j'ai vu que mumen avait rajouter

    un ? devant la fonction a veux dire quoi?


    merci et désolé pour mes nombreuses questions

  11. #11
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Salut,

    Oups.

    Quand tu veux tester une variable ou une fonction dans la fenêtre de débogage, tu tapes Ctrl G et dans cette fenêtre du tapes print xxx. Une abréviation (qui remonte aux premiers Basics) pour cette instruction est le ? justement. Donc dans la fenêtre de débogage,

    est identique à

    De plus, si tu veux faire la même chose dans le code tu es obligé de mettre

    pour indiquer que tu fais print dans l'objet débogage

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    bonsoir....
    j'avance gentiment ....

    mais mon bout de code est-il bon ou pas pour convertir du décimal en hhmmss
    ou non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Thhmmss As Date
    Thhmmss = (Tdecimal / 24)
    merci

    Pascal

  13. #13
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Citation Envoyé par pago m'a dit en privé
    aurais-tu la gentilesse de me dire si ce code si dessous fonctionne de manière correcte ou non,
    j'ai essayé ainsi et cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Thhmmss As Date
    Thhmmss = (Tdecimal / 24)
    vais-je avoir un soucis à la longue?
    Ton code ne semble pas adapté à ce que tu demandes.

    La bonne méthode t'a été rapportée par paidge. Les procédures
    HeureToDec et DecToHeure font ce qu'il te faut. Tu dois juste le copier coller dans un module et le utiliser comme ça par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim TDec As Single
    Dim Thhmmss As Date
     
    Thhmmss=#04:30#
    TDec = HeureToDec(Thhmmss)
     
    TDec=4,5
    Thhmmss = DecToHeure(Tdecimal)

  14. #14
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,
    Citation Envoyé par Pago283 Voir le message
    mon bout de code est-il bon ou pas pour convertir du décimal en hhmmss
    ou non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Thhmmss As Date
    Thhmmss = (Tdecimal / 24)
    Ton bout de code fonctionne si Tdecimal est en heures.
    On peut lire ici que VBA stocke la date et l'heure sous la forme d'un nombre réel.
    Et dans ce format de stockage 1H = 1/24.

    A+

Discussions similaires

  1. [Débutant] Conversion heure décimale -> réel
    Par lucazzo dans le forum C#
    Réponses: 4
    Dernier message: 13/06/2013, 10h18
  2. Formule conversion heures minutes en décimales
    Par futurist dans le forum Formules
    Réponses: 1
    Dernier message: 29/11/2012, 16h30
  3. Conversion d'un décimal en entier
    Par _developpeur_ dans le forum Access
    Réponses: 1
    Dernier message: 12/01/2006, 15h00
  4. Conversion heures minutes en heures centièmes
    Par shaman262 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/10/2005, 17h53
  5. [MsSQL 2000]Conversion heure GMT
    Par prophetky dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/08/2005, 17h27

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