Transformer nombre décimal en hh:mn en vba

  • Initiateur de la discussion Initiateur de la discussion fenec
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
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
 
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:
Bonjour à tous,
Salut aux amis,

Tout avec le pavé numérique :

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


A+ à tous
 
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+
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
338
Retour