Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

fenec

XLDnaute Impliqué
Re et bonjour BrunoM45, PhLaurent55

Phlaurent
Viens de tester en mettant en commentaire ce que tu as mentionné et je constate que je suis toujours aussi nul en vba
merci pour ton aide
A+
Philippe
 

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:

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
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
565
Réponses
12
Affichages
407
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…