Transformer nombre décimal en hh:mn en vba

fenec

XLDnaute Impliqué
Bonjour le forum

Une fois de plus besoin de votre aide car je ne parviens pas à modifier mon code pour l'appliquer à une plage de cellule.
Comptant sur votre savoir je vous joint un fichier qui reprend ma problématique.
Cordialement,
Philippe.
 

Pièces jointes

  • Feuille de Pointage Forum.xls
    26 KB · Affichages: 80

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,

la code sera activé si il y a changement dans la zone B5:C35
je n'ai pas testé le reste de la procédure

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("B5:C35")) Is Nothing Then
Application.EnableEvents = False
x = Format(zz, "00.00")
zz.Value = Left(x, 2) & ":" & Right(x, 2)
Application.EnableEvents = True
End If

End Sub


à+
Philippe
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,

c'est normal, 7.30 est un nombre décimal qui représente 7 heures et 30/100 d'heure
en réalité cela fait bien 7h12'

ce serait bien plus judicieux de saisir directement 7:30 et dans ce cas-là il n'y aura plus besoin de macro

à+
Philippe
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,

Si toutefois, l'âne est têtu, qu'il ne veut pas utiliser le double-point et désire uniquement se servir du pavé numérique ce code fera l'affaire

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("B5:C35")) Is Nothing Then
Application.EnableEvents = False
Target = Replace(Target, ",", ":")
Application.EnableEvents = True
End If

End Sub

à+
Philippe
 

Roland_M

XLDnaute Barbatruc
bonsoir tout le monde,

ceci pourrait faire affaire pour ce que tu souhaites:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5:C35")) Is Nothing Then
   Application.EnableEvents = False
   R$ = Replace(Target, ",", ".")
   V@ = Val(R$)
   H% = Int(V)
   M$ = Str(V - H): M$ = Replace(M$, ".", "")
   Target = Str(H) & ":" & M$
   Application.EnableEvents = True
End If
End Sub
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Bonjour à tous,
Salut aux amis,

Tout avec le pavé numérique :

upload_2016-12-12_19-9-39.png


A+ à tous
 

job75

XLDnaute Barbatruc
Bonsoir à tous,
et c'est le même comportement avec 7,10 7,20 7,40 7,50
.......... et je ne parviens pas à comprendre le pourquoi :mad::mad::mad:
C'est simple : Excel ne conserve pas les zéros non significatifs : 7,30 c'est donc 7,3.

Et ensuite 7:3 Excel comprend 7 heures 3 minutes donc 07:03.

Voyez ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B5:C35")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = Replace(Format(Target, "0.00"), ",", ":")
Application.EnableEvents = True
End Sub
A+
 

Regueiro

XLDnaute Impliqué
Bonsoir Le Forum
Une solution que j'utilise pour la saisie des heures.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Set Var = Application.Intersect(Target, Range("B5:C35"))
If Target.Columns.Count = 1 And Target.Rows.Count = 1 Then
    If Not Var Is Nothing And IsNumeric(Target.Value) Then
        Target.Value = Left(Format(Target, "0000"), 2) & ":" & Right(Format(Target, "0000"), 2)
    End If
End If
Application.EnableEvents = True
End Sub

Avec le format personnalisé : [hh]:mm
Saisie des heures 1000 --> 10:00
 

Pièces jointes

  • XLD Feuille de Pointage Forum.xls
    42.5 KB · Affichages: 49

Discussions similaires

Réponses
16
Affichages
477
Réponses
12
Affichages
325

Membres actuellement en ligne

Statistiques des forums

Discussions
312 248
Messages
2 086 595
Membres
103 250
dernier inscrit
keks974