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

Macros et VBA Excel Discussion :

Conversion heure en décimale et inversement


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    sécrétaire
    Inscrit en
    Avril 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : sécrétaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 3
    Par défaut Conversion heure en décimale et inversement
    Bonjour,
    Je souhaite pouvoir saisir des heures en hh:mm et les convertir en décimale ou inversement.
    Je ne peux pas utiliser de simples formules car il y a alors un problème de références circulaires.

    Je tente par du VBA, j'ai créé un petit userform avec ces 2 champs : Heure (HEU) que je veux en hh:mm et décimal (DEC) avec 2 chiffres après la virgule.
    Je veux pouvoir remplir l'un ou l'autre de ces 2 champs et avoir le résultat dans l'autre.
    Mais mes connaissances ne sont pas assez bonnes pour mener à bien ce que je souhaite. Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,

    Citation Envoyé par sésé95 Voir le message
    Bonjour,
    Je souhaite pouvoir saisir des heures en hh:mm et les convertir en décimale ou inversement.
    Sans VBA, il suffit de multiplier le contenu de la cellule au format [h]:mm par 24 pour obtenir des heures décimales (et inversement diviser par 24).
    Il faut mettre la cellule résultat au format standard (ou nombre avec xx décimales)

    Le problème de référence circulaire est un problème de référence à la cellule concernée, VBA ne résoudra pas ce problème

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Est-ce qu'il pourrait arriver que la saisie "décimale" soit inférieure à 1 ?
    Est-ce qu'il pourrait arriver que la saisie "heure:minute" soit supérieure à 24:00 ?

  4. #4
    Candidat au Club
    Femme Profil pro
    sécrétaire
    Inscrit en
    Avril 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : sécrétaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 3
    Par défaut
    Patrice, merci pour ton retour, mais je dois pouvoir saisir soit l'une, soit l'autre des infos, donc il me faudrait mettre une formule dans les 2 cellules, chacune se rapportant à l'autre, donc référence circulaire ...

    Menhir, merci de ton retour. Il s'agit en fait d'un compteur horaire, donc les valeurs peuvent être inférieures à 1 et supérieures à 24h. On pourrait lire 234:30, ou 0,5 h.

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Citation Envoyé par sésé95 Voir le message
    Patrice, merci pour ton retour, mais je dois pouvoir saisir soit l'une, soit l'autre des infos, donc il me faudrait mettre une formule dans les 2 cellules, chacune se rapportant à l'autre, donc référence circulaire ...
    Ou simplement employer 3 cellules : une pour la saisie horaire, une pour la saisie décimale et une dernière pour le résultat.
    Il t'en restera encore plus de 17 milliards, c'est pas la peine d'économiser !

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il reste une petite idée.
    Dans un Worksheet_Change, analyser la propriété Text de la cellule.
    Cette propriété donne le contenu de la cellule tel qu'il est affiché, donc en tenant compte du format.
    Avec une fonction InStr(), tu pourras savoir si elle contient ou non un ":" et la modifier en fonction en la divisant ou multipliant par 24 et en lui appliquant le format souhaité avec la propriété FormatNumber.

    Mais ça fait bien lourd pour une si petite chose.

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Dans un Worksheet_Change, analyser la propriété Text de la cellule...
    Le problème, c'est que lorsque la cellule est au format [h]:mm, la saisie d'un nombre décimal est automatiquement convertie, et donc on ne peut pas détecter la virgule !
    Il faudrait passer par textbox, ou par l'API, je te dit pas l'usine à gaz ....

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La proposition de Patrice avec trois colonnes me semble la plus intéressante, respect de format unique dans une même colonne, surtout si on utilise les tableaux structurés et pas besoin de VBA.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Le problème, c'est que lorsque la cellule est au format [h]:mm, la saisie d'un nombre décimal est automatiquement convertie, et donc on ne peut pas détecter la virgule !
    J'ai conseillé d'utiliser la propriété Text du Range de la cellule, uniquement pour détecter le format.
    Ensuite, pour la convertir (dans un sens ou dans l'autre), il sera possible d'utiliser Value pour avoir la valeur précise.

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Citation Envoyé par Menhir Voir le message
    J'ai conseillé d'utiliser la propriété Text du Range de la cellule, uniquement pour détecter le format.
    C'est bien ce que j'ai compris.
    Ça ne fonctionne plus après une saisie horaire, on ne peut plus détecter la saisie de la virgule car la saisie décimale est automatiquement convertie en heures (.Text ne contient pas de virgule). Essayes !

  11. #11
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    J'ai supposé que l'utilisateur laissait la cellule au format Standard et que le format serait appliqué par la macro.
    Donc, s'il saisit une valeur décimale, ça reste une valeur décimale.

    Cela dit, je ne comprends pas trop sa formulation Je souhaite pouvoir saisir des heures en hh:mm et les convertir en décimale ou inversement., en particulier le ou inversement..
    Quel est le format qui est souhaité au final ?
    Est-ce qu'il faut avoir les deux formats dans deux cellules séparées ?

    Dans ce cas, ce serait encore plus simple.
    Avec une Worksheet_Change, on détermine dans quelle cellule (colonne ?) la saisie a été faite. On en déduit la conversion à faire et on place le résultat dans l'autre cellule.

    Mais ça ne me semble pas très pratique ni esthétique. Mieux vaudrait saisir dans une seul cellule et choisir définitivement un format d'affichage.

  12. #12
    Candidat au Club
    Femme Profil pro
    sécrétaire
    Inscrit en
    Avril 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : sécrétaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 3
    Par défaut
    Bonjour,
    Merci pour votre implication. Menhir, c'est exactement ça, j'ai les 2 colonnes, une avec saisie en heure hhh:mm, et l'autre en décimale, mais je ne sais pas laquelle de ces 2 cellules je vais pouvoir remplir et les 2 infos doivent être affichées.

    N'y arrivant pas directement sur la feuille excel, j'ai voulu passer par un userform. C'est ce que j'ai fait pour un tableau de conversion (exemple Celcius-Farhenheit) où je saisis l'une des 2 valeurs et l'autre se calcule directement. Mais je n'arrive pas à l'adapter pour mes heures.

    Voilà ce que j'avais fait :

    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
    Private Sub CEL_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    CEL = Replace(CEL, ".", ",")
    If Len(CEL) > 0 Then
        FAR = CEL.Value * 1.8 + 32
     
       FAR = Round((FAR), 1)
     
    Else
        FAR = ""
     
    End If
    End Sub
     
    Private Sub FAR_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    FAR = Replace(FAR, ".", ",")
    If Len(FAR) > 0 Then
     
        CEL = (FAR.Value - 32) / 1.8
     
        CEL = Round((CEL), 1)
     
    Else
        CEL = ""
     
    End If
    End Sub

  13. #13
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pas besoin de UserForm.

    En supposant que tu saisisses les valeurs hh:mm en colonne A et les valeurs décimales en colonne B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target as Range) 
        Select Case Target.Row
        Case 1 : Target.Offset(0, 1).Value = Target.Value * 24
        Case 2 : Target.Offset(0, -1).Value = Target.Value / 24
        End Select
    End Sub
    Je n'ai pas testé mais ça devrait fonctionner.
    Par sécurité, il faudrait peut-être ajouter un test au début pour vérifier que Target n'est qu'une seule cellule.

  14. #14
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour Menhir,
    Citation Envoyé par Menhir Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target as Range) 
        Select Case Target.Row
        '...
    Je n'ai pas testé mais ça devrait fonctionner.
    Ce sera mieux avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Select Case Target.Column

  15. #15
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Très juste

Discussions similaires

  1. Conversion heure décimale en heure normale vba
    Par beaujack dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/08/2018, 20h42
  2. Conversion heure minute seconde en décimal
    Par kidmig dans le forum Requêtes
    Réponses: 11
    Dernier message: 19/06/2018, 05h25
  3. [Débutant] Conversion heure décimale -> réel
    Par lucazzo dans le forum C#
    Réponses: 4
    Dernier message: 13/06/2013, 10h18
  4. Conversion heure en décimales
    Par Pago283 dans le forum VBA Access
    Réponses: 13
    Dernier message: 23/03/2013, 20h05
  5. Formule conversion heures minutes en décimales
    Par futurist dans le forum Formules
    Réponses: 1
    Dernier message: 29/11/2012, 16h30

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