vba afficher un "h" à la place du ":" pour les heures

pascal21

XLDnaute Barbatruc
bonjour le forum
job 75 m'avait fait ce bout de code pour entrer les heures sans avoir à taper sur le :
dans la cellule concernée l'heure s'affiche ensuite avec le :
mais je cherche le moyen de remplacer le : par un "h"
j'ai essayé plusieurs modifs sur le code mais quand le "h" s'inscrit il n'est pas considéré comme un format heure
j'ai essayé aussi clic droit/format de la cellule/format personnalisé hh"h"mm mais çà ne fonctionne pas sur les cellules concernées par la macro alors que çà fonctionne sur d'autres cellules
que modifier pour que çà fonctionne avec cette macro?
merci de votre aide
Code:
Application.ScreenUpdating = False
ActiveSheet.Unprotect
Dim r As Range, x$
Set r = Intersect(Target, [t6:x7,t11:x12,t16:x17,t21:x30,t33:x34])
''Set r = Intersect(Target, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.EnableEvents = False
r.NumberFormat = "General"
For Each r In r 'si entrées multiples (copier-coller)
  If r Like "#" Or r Like "##" Or r Like "###" Or r Like "####" Then
    x = Format(r, "0000")
  r = Left(x, 2) & ":" & Mid(x, 3)      ' ici j'ai remplacé le : par h mais ce n'est plus du format heure
    r.NumberFormat = "hh:mm"      'j'ai essayé ici hh"h"mm mais çà fonctionne pas
  End If
Next
ActiveSheet.Protect
Application.EnableEvents = True
Application.ScreenUpdating = True
 

mutzik

XLDnaute Barbatruc
bonjour,

ben, soit c'est un format heure avec : et tu pourras l'utiliser dans tes calculs
soit tu remplaces le : par un h, mais avant de pouvoir l'utiliser dans les calculs, il faudra convertir ce texte en hh:mm:ss
en utilisant temps(hh;mm;ss) et les formules de conversion de texte gauche, droite et stxt
tout cela suppose évidemment que ton temps texte soit toujours du même format
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Eric :)

J'ai testé comme ceci

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
x = #12:45:00 PM#
[D4] = x
[D4] = Replace(Left(x, 3), ":", "h") & Right(x, 2)
Cancel = True
End Sub

EDIT: bonjour Bertrand :)
 

Dranreb

XLDnaute Barbatruc
Bonjour.
VB:
Sub t()
Dim H#
H = [B2].Value
If H > 1 Then [B2].Value = TimeSerial(H \ 100, H Mod 100, 0)
[B2].NumberFormat = "hh\h mm"
End Sub
Pour éviter d'avoir à ne pas oublier de doubler les doubles guillemets.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pour couvrir d'autre cas :
VB:
Dim H As Variant
With [B2]
   H = .Value
   Select Case VarType(H)
      Case vbDouble: If H > 1 Then H = TimeSerial(H \ 100, H Mod 100, 0)
      Case vbString: H = TimeValue(Replace(H, "h", ":")): End Select
   .Value = H: .NumberFormat = "hh\h mm": End With
 

Discussions similaires

Statistiques des forums

Discussions
312 205
Messages
2 086 199
Membres
103 156
dernier inscrit
Ludo94130