XL 2010 Conversion temps décimal vers [Heure] minute par vba

vgendron

XLDnaute Barbatruc
Bonjour à toutes et tous

Je viens vous soumettre un problème qui m'interpelle.. je dois être fatigué, car il y a une subtilité que je ne vois pas.

dans le fichier ci joint
j'ai des durées décimales en colonne B que je souhaite convertir en temps ([hh]:mm)

si j'utilise les formules colonnes C et D, j'obtiens bien le meme résultat, mais il s'agit de l'heure "modulo" 24
par macro, j'obtiens la meme chose en colonne H

Mais je souhaite avoir le résultat de la colonne E==> Sans ce modulo 24
lorsque j'essaie d'utiliser le format [hh]:mm par macro.. j'obtiens la colonne I
VBA n'aime pas les crochets??


VB:
Sub testtemps()
For i = 2 To 6
    Range("H" & i) = Format(Range("B" & i) / 24, "hh:mm") 'identique à la colonne C: heure "modulo 24"
    Range("I" & i) = Format(Range("B" & i) / 24, "[hh]:mm") 'Devrait etre identique à la colonne E ???
Next i
End Sub

merci
 

Pièces jointes

  • DecToHeureMin.xlsm
    17.2 KB · Affichages: 8

job75

XLDnaute Barbatruc
Bonjour vgendron,

Oui le format [hh]:mm n'est pas reconnu en VBA donc utilise :
VB:
Sub testtemps()
Columns("H").NumberFormat = "hh:mm"
Columns("I").NumberFormat = "[hh]:mm"
For i = 2 To 6
    Range("H" & i) = Round(60 * Range("B" & i)) / 1440 'identique à la colonne C
    Range("I" & i) = Round(60 * Range("B" & i)) / 1440 'identique à la colonne E
Next i
End Sub
A+
 

Pièces jointes

  • DecToHeureMin.xlsm
    17.8 KB · Affichages: 6

soan

XLDnaute Barbatruc
Inactif
Bonsoir patrick, job75, vgendron,

Le code du post #1 impose qu'on arrondisse à la minute.

superieur?
inferieur?
ou auto?

Round => la minute la + proche.

je vois que patrick a du mal ; alors je vais essayer de l'aider
comme je peux, avec mes maigres compétences :

ici l'horloge parlante ; au 4ème bip, il sera exactement 0 heure 26 minutes 54 secondes.

job75 : « à la minute la plus proche, j'ai dit ! » ; moi : « ah, oui, c'est juste ! alors : » ;

ici l'horloge parlante ; au 4ème bip, il sera exactement 0 heure 27 minutes.

soan
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour a tous
je n'ai pas de mal avec ça
ma question était plus que légitime je pense
en rentrant ce soir je regarderais si je peux faire ça simplement avec les fonctions date et time de vb

pour moi alors ce serait
en auto
00:15:31 = 00:16(31 secondes ou plus)
00:15:21 = 00:15:00
en supérieur
00:15:21 = 00:16:00

en inférieur
00:15:21 = 00:15:00

en attendant en auto
VB:
Sub test()
    Dim t As Date
    t = TimeValue(CDate(CDbl([b2].Value) / 24))
    Debug.Print t
    Debug.Print Format(t + IIf(Second(t) >= 31, 0.0007, 0), "hh:mm")
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth