XL 2016 Forcer un format nombre après la frappe

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 !

ReneDav14000

XLDnaute Occasionnel
Bonjour le forum,
Existe-t-il une méthode qui permettrait d'obliger la saisie d'un format. Je travaille avec un format hh:mm.
Par exemple : Si l'utilisateur tape 6 cela devienne 6:00, si il tape 6,30 cela devienne 6:30, si il tape 6/30 cela devienne 6:30,
si il tape 6.30 cela devienne 6:30. En fait, quel que soit le caractère frappé entre l'heure et les minutes. Cela peut être aussi 6!30 ou 6n30.
Merci par avance pour votre aide
 
Solution
Bonjour à tous,

Toutes les cellules sont au format Texte, voyez le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, x$, i%
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
For Each c In UsedRange 'si entrées multiples
    x = c
    For i = 2 To Len(x)
        If Not IsNumeric(Mid(x, i, 1)) Then
            x = Left(x, i - 1) & ":" & Mid(x, i + 1)
            If IsDate(x) Then c = Format(x, "h:mm")
            Exit For
        End If
Next i, c
Application.EnableEvents = True 'réactive les évènements
End Sub
A+
Bonjour ReneDav,
Un essai en PJ à tester.
VB:
Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    Valeur = Target.Value
    For N = 1 To Len(Valeur)
        If Not IsNumeric(Mid(Valeur, N, 1)) Then Exit For   ' On cherche le premier caractère non numérique
    Next N
    Application.EnableEvents = False
    Target = Left(Valeur, N - 1) & ":" & Mid(Valeur, N + 1) ' On reconstruit l'heure
Fin:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
On cherche dans la chaine le premier caractère non numérique et on lui substitue ":"
Il suffit de taper une chaine dans une cellule quelconque pour faire la traduction.
 

Pièces jointes

Bonsoir,
Exact, j'ai vu, ça le fait avec / et aussi avec -, mais bizarrement pas avec + ou *.
Et je ne vois pas de solution car c'est XL qui le traduit avant que le VBA ne le récupère.
L'autre souci plus gênant est que si vous entrez "titi" alors il le transforme en ":iti" ce qui est logique de par l'algo mais débile dans le fonctionnement.
Et là pour le coup je ne vois pas comment faire. Je ne sais même pas s'il existe une solution.
 
Bonsoir sylvanu,
La solution est peut-être là, donnée par JCGL. Mais je me demande si les ":" passeraient, est-ce considéré comme du numérique ou pas ? Je ferai l'essai plus tard.
 
Bonjour tout le monde,
Sous XL2007, idem, ça marche bien :
20221015_095343.gif
 
Bonjour à tous,

Toutes les cellules sont au format Texte, voyez le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, x$, i%
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
For Each c In UsedRange 'si entrées multiples
    x = c
    For i = 2 To Len(x)
        If Not IsNumeric(Mid(x, i, 1)) Then
            x = Left(x, i - 1) & ":" & Mid(x, i + 1)
            If IsDate(x) Then c = Format(x, "h:mm")
            Exit For
        End If
Next i, c
Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 

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

Retour