Je dois commencer par dire que je ne connais pas VBA
Je dois saisir un grand nombre de valeurs temporelles dans Excel. Comme cela me ralentit vraiment de saisir les deux points en tapant, j'ai pensé écrire une macro qui me permettrait de saisir une chaîne comme "18.10" et de la convertir en "18:10". (Je pourrais alors utiliser le pavé numérique et saisir les heures rapidement).
J'ai bricolé la fonction permettant de convertir n'importe quelle chaîne (délimitée) en heure - c'était facile. Mais maintenant, j'ai des problèmes avec mon gestionnaire d'événement car je ne peux pas accéder à la fonction texte exact que je saisis parce qu'Excel semble le traiter comme un nombre et couper les 0 de fin de ligne.
Par exemple, 18.10 est converti en 18.1 - qui est converti en 18:01 (et non 18:10 comme je le souhaite).
Voici mon code de gestion des changements (copié depuis l'interweb)
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String
' This code copied from Chip Pearson
'http://www.cpearson.com/excel/DateTimeEntry.htm
If Application.Intersect(Target, Range("C6:F1000")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If
Application.EnableEvents = False
With Target
TimeStr = .Text ' What should I use here????
If .HasFormula = False Then
.Value = ConvertToTime(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro : MsgBox "Vous n'avez pas saisi une heure valide". Application.EnableEvents = True End Sub
Comme vous pouvez le constater, j'utilise actuellement Text
- J'ai regardé toutes les propriétés sur Target
dans le débogueur et je n'en ai trouvé aucun qui ressemblait au texte brut saisi. Existe-t-il un moyen d'accéder à la valeur ?
Toute aide est la bienvenue.
Merci à Issun et Craig. Issun a raison - je complique trop les choses (en ce qui concerne la conversion en temps). Voici ce que j'ai mis au point et qui fonctionne plutôt bien.
' This requires the format of the cells to ce "0.00" to prevent trailing 0s being trimmed
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
On Error GoTo ErrHandler:
Dim TimeStr As String
Dim TimeVal
' I am only entering times in this range
If Application.Intersect(Target, Range("C6:F1000")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If
TimeStr = Replace(Target.Text, ".", ":")
TimeVal = TimeValue(TimeStr)
Application.EnableEvents = False
Target.Value = TimeVal
Target.NumberFormat = "h:mm"
Application.EnableEvents = True
Exit Sub
ErrHandler:
Exit Sub
End Sub
Sub SetTimeFormat()
Selection.NumberFormat = "h:mm"
End Sub
Sub SetNumFormat()
Selection.NumberFormat = "0.00"
End Sub
Comme mentionné dans le commentaire, j'ai trouvé que changer le format de la cellule en "0.00" fonctionne bien. Les heures entrées comme "18.1" sont converties en "18:10" (au lieu de 18:01), mais cela me convient parfaitement.
Les deux dernières macros sont affectées à deux touches de raccourci, de sorte que si je fais une erreur, je peux rapidement reconvertir le format de la cellule en numérique et terminer la valeur à nouveau.