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 :

Passer heures minutes en heures centièmes même si négatives [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut Passer heures minutes en heures centièmes même si négatives
    Bonsoir à tous,

    je bute sur un problème de conversion de données en heures minutes vers des heures centièmes avec un signe "-"

    dans une seule colonne F, je peux avoir des données brutes en heures minutes positives ou négatives :
    12 donne 00:12:00 => 00h12
    1025 donne 10:25:00 => 10h25
    8754 donne 87:54:00 => 87h54
    -123 donne -01:23:00 => -01h23
    -2141 donne -21:41:00 => -21h41

    Dans Excel je n'ai pas appliqué le calendrier à partir de 1904
    J'ai des milliers de données à traiter en ligne (tantôt positives, tantôt négatives)

    Dans 3 autres colonnes je n'ai que des heures positives.
    J'arrive à faire ma boucle sans problème (boucle sur des milliers de lignes et 3 colonnes) elle tourne avec un bon résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ligne = Cells.End(xlDown).Row
    For j = 7 To 9
    For i = 2 To ligne
    Cells(i, j) = Int(Cells(i, j) / 100) & ":" & Right(Cells(i, j).Value, 2)
    Cells(i, j) = Round((Cells(i, j) * 24), 2)
    Next i
    Next j

    Pour ma colonne F, ma boucle ne veut pas tourner elle se bloque uniquement pour les données négatives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = 2 To ligne
    If Left(Cells(i, 6).Value, 1) = "-" Then
    Cells(i, 6) = Int(Abs(Cells(i, 6) / 100)) & ":" & Right(Cells(i, 6).Value, 2)
    Cells(i, 6) = Round((Cells(i, 6) * 24), 2)
    Else
    Cells(i, 6) = Int(Cells(i, 6) / 100) & ":" & Right(Cells(i, 6).Value, 2)
    Cells(i, 6) = Round((Cells(i, 6) * 24), 2)
    End If
    Next i
    Si je désactive ma ligne verte le résultat calculé (pas bon mais c'est ma 1ère étape) se fait sans soucis.
    Il y a donc un problème à partir de la ligne verte

    Je joins un fichier Excel pour expliquer ce que je souhaite en VBA
    en fait je prend une valeur absolue de mon calcul et après pour l'avoir en négatives (en heures centièmes) je fais simplement =0-calcul

    Je vois pas ou cela bute pour régler mon problème.

    Merci de votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Peux-tu nous expliquer au juste ce que tu dois obtenir car je ne vois pas de calcul de conversion en centième d'heure comme tu l'évoques.
    Est-ce que -1559 correspond à -15h59minutes correspond à -15,98heures ?

    Le résultat que tu souhaites est -15,98?
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  3. #3
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    oui

    c'est d'ailleurs pour cela que je passe en centièmes mes heures pour avoir des sommes sur la totalité des lignes.
    Je ne souhaite pas modifier mon calendrier d'Excel pour avoir des heures minutes en négatives.

  4. #4
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Bonjour,

    si j'ai bien compris, tu veux convertir les minutes en pourcentage d'heure tel que 45 minute = 75% d'unité heure = 0.75

    moi je ferais un petit truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        r = Abs(Cells(i, j).Value)
        m = ((r Mod 60) * 100) / 60
        h = Int(r / 60)
        If r < 0 Then r = h + m * -1 Else r = h + m
        Cells(i, j) = r
    Alleï Bonjour chez vous!

  5. #5
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    J'ai corrigé un peu le code pour avoir une réponse exact

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    r = Abs(Cells(i, j).Value)
    m = Right(r, 2) / 0.6
    h = Int(r / 100)
    If Cells(i, j).Value < 0 Then r = 0 - (h + m / 100) Else r = h + m / 100
    Cells(i, j) = r
    Next i
    Next j
    le problème de la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m = ((r Mod 60) * 100) / 60
    posait problème avec le mod

  6. #6
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Pourquoi ne pas directement appliquer une seule formule pour positif comme négatif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, 6) = Abs(Cells(i, 6)) / Cells(i, 6) * Round(Int(Abs(Cells(i, 6) / 100)) + Right(Cells(i, 6).Value, 2) / 60, 2)
    Abs(Cells(i, 6)) / Cells(i, 6) revoie le signe -1 ou +1
    Int(Abs(Cells(i, 6) / 100)) renvoie le nombre d'heures
    Right(Cells(i, 6).Value, 2) / 60 renvoie le nombre de minutes en centièmes d'heure
    La fonction round permet de faire l'arrondi à 2 décimales.
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  7. #7
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    Cela fonctionne aussi mais avec une condition if valeur n'est pas à 0
    (problème de division par 0)

    très astucieux le principe de récupèrer le signe par une division d'une cellule par elle meme.

    grand merci

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

Discussions similaires

  1. [VxiR2] Transformer heures décimales en heures minutes
    Par nat54 dans le forum Deski
    Réponses: 4
    Dernier message: 18/02/2010, 08h29
  2. Réponses: 1
    Dernier message: 30/09/2008, 20h40
  3. Script pour transformer minutes en heures-minutes
    Par rgdu86 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/06/2008, 11h27
  4. Formatage heures decimale en heures minutes
    Par FlyByck dans le forum Requêtes
    Réponses: 5
    Dernier message: 14/01/2008, 21h13
  5. Conversion heures minutes en heures centièmes
    Par shaman262 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/10/2005, 17h53

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