saisir des heures sans les :

pascal21

XLDnaute Barbatruc
bonjour j'ai une appli où je saisie principalement des heures
et je cherche le moyen d'écrire les heures sans les : dans certaines cellules
afin de gagner du temps
cela donnerait à la saisie
1245
12:45 dans la cellule après traitement par macro
attention il faut impérativement que cela soit au format heures et non du texte car il y a des calculs sur ces cellules
merci de votre aide
 

eastwick

XLDnaute Impliqué
Re : saisir des heures sans les :

Bonjour,

J'ai tenté ça, à condition de laisser vide la colonne d'à côté et que la cellule qui reçoit la première saisie soit en format texte. Ensuite, elle sera bel et bien en format heure.
 

Pièces jointes

  • Classeur1.xlsm
    20.2 KB · Affichages: 48
  • Classeur1.xlsm
    20.2 KB · Affichages: 50

Robert

XLDnaute Barbatruc
Repose en paix
Re : saisir des heures sans les :

Bonjour le fil, bonjour le forum,

Peut-être avec la macro événementielle Change ci-dessous :

Code:
Private TEST As Boolean 'déclare la variable TEST

Private Sub Worksheet_Change(ByVal Target As Range)
Dim V As Double 'déclare la variable V (Valeur)
Dim H As Byte 'déclare la variable H (Heure)

If IsNumeric(Target.Value) = False Then Exit Sub 'si la valeur n'est pas numérique, sort de la procédure
If Target.Cells.Count > 1 Then Exit Sub 'si selection multiple, sort de la procédure
If Target.Value = "" Then Exit Sub 'si la cellule est effacée, sort de la procédure
If TEST = True Then Exit Sub 'si TEST est [VRAI], sort de la procédure (pour éviter la boucle sur l'événement Change)
H = IIf(CInt(Target.Value) < 1000, CByte(Left(Target.Value, 1)), CByte(Left(Target.Value, 2))) 'définit l'heure H en selon inférieure ou supérieure à 10
V = H / 24 + CByte(Right(Target.Value, 2)) / 60 / 24 'définit la variable V
TEST = True 'définit la variable TEST
Target.Value = Format(V, "hh:mm") 'revoie la valeur V dans la cellule
TEST = False 'redéfinit la variable TEST
End Sub
 

CISCO

XLDnaute Barbatruc
Re : saisir des heures sans les :

Bonjour

j'ai l'impression que cela fonctionne correctement avec le format personnalisé 00":"00. J'ai fait une différence sur deux cellules formatées ainsi, et le résultat était correct.

@ plus

@ Robert : T'étais sur quel bateau la semaine passée ? Tu avais le choix :)
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : saisir des heures sans les :

Bonjour Pascal,

Par exemple pour traiter les cellules de la colonne A :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, flag As Boolean
Set r = Intersect(Target, [A:A], Me.UsedRange)
If r Is Nothing Then Exit Sub
r.NumberFormat = "General"
For Each r In r 'si entrées multiples (copier-coller)
  flag = False
  If r Like "#" Or r Like "##" Then r = r & ":": flag = True
  If r Like "###" Or r Like "####" Then r = Left(r, 2) & ":" & Mid(r & 0, 3, 2): flag = True
  If flag Then r.NumberFormat = "hh:mm"
Next
End Sub
Edit : pas rafraîchi, salut tout le monde.

@ Robert vraiment très heureux de te revoir, cela faisait longtemps.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : saisir des heures sans les :

Re,

Bah ma solution précédente ne permettait pas d'obtenir toutes les heures... Alors ceci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, x$
Set r = Intersect(Target, [A:A], Me.UsedRange)
If r Is Nothing Then Exit Sub
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)
    r.NumberFormat = "hh:mm"
  End If
Next
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : saisir des heures sans les :

Re,

Ah et puis il faut les Application.EnableEvents pour le cas ou l'on entre 0...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, x$
Set r = Intersect(Target, [A:A], 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)
    r.NumberFormat = "hh:mm"
  End If
Next
Application.EnableEvents = True
End Sub
A+
 

pascal21

XLDnaute Barbatruc
Re : saisir des heures sans les :

bonjour à tous et merci pour vos nombreuses reponses
je suis en train de tester le code de Job75 qui à l'air de fonctionner parfaitement
le problème est à cause de cellules protégées dans les colonnes où je dois saisir les heures ça coince
il me faut donc désignéer les cellules concernées par le code
par contre j'ai toujours coincé avec les selection de cellules en vba
Code:
Set r = Intersect(Target, [A:A], Me.UsedRange)
par les cellules T9, T10, v9, V10,t17,t18 etc...
j'ajoute si cela est important que ce sont des cellules fusionnées par exemple t9 est en réalité t9:u9 etc...
 
Dernière édition:

pascal21

XLDnaute Barbatruc
Re : saisir des heures sans les :

je viens d'essayer
Code:
Set r = Range("t9,v9")
mais si ça fonctionne bien dans ces deux cellules désignées si je rentre une valeur dans une autre cellule c'est le bazar ça change la valeur des cellules désignées
 

job75

XLDnaute Barbatruc
Re : saisir des heures sans les :

Re,

Si la feuille est protégée, les cellules où l'on peut entrer des données sont forcément déverrouillées.

Il n'y a donc pas lieu de préciser où elles se trouvent :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, x$
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)
    r.NumberFormat = "hh:mm"
  End If
Next
Application.EnableEvents = True
End Sub
Bonne fin de soirée.

A+
 

Discussions similaires

Réponses
7
Affichages
418

Statistiques des forums

Discussions
312 321
Messages
2 087 264
Membres
103 499
dernier inscrit
BODELE