Bonsoir le forum,
Bonsoir le fil
Je viens tout doucement et couvert de mon masque "anonymous" m'immiscer dans ce fil.
Très très peu doué par le Vba (Merci à tous ceux qui m'ont toujours aidé dans mes projets, ......ils se reconnaitront), j'ai retrouvé dans mon grimoire un code qui faisait cela (de façon moindre que les codes de nos amis dévoués sur ce fil) mais pour une seule cellule. Ne pourrait on pas "revisiter" ce code pour qu'il ait la même finalité mais pour plusieurs cellules identifiées dans la constante et sans erreur de saisie (où avec un message d'erreur) ????
P.s : @Frédéric38360" : si le code de BsAlv a le résultat escompté, il te faut le signaler comme résolu (merci pour lui).
Bonne soirée. Eric
Option Explicit
Private Const CelluleDate = "a1"
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range(CelluleDate)) Is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
'Pour éviter le dépassement de capacité sur un format Date
Target.NumberFormat = "general"
If IsDate(Target.Value) Then Exit Sub
If IsNumeric(Target.Value) Then
Application.EnableEvents = False
On Error Resume Next
If Target.Value < 1000000 Then
'152022 -> 01/05/2022
Target.Value = DateSerial(Target.Value Mod 10000, (Target.Value \ 10000) Mod 10, Target.Value \ 100000)
ElseIf Target.Value >= 1011900 Then
'1052022 -> 01/05/2022
Target.Value = DateSerial(Target.Value Mod 10000, (Target.Value \ 10000) Mod 100, Target.Value \ 1000000)
End If
On Error GoTo 0
Application.EnableEvents = True
End If
End Sub