Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Microsoft 365Convertir un nombre au format date courte
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 !
Merci @job75 , je t'avoue que j'ai retrouvé le code proposé dans mes archives.
Je n'ai pas trop testé. Effectivement, si on corrige on a un dépassement de capacité.
en utilisant Long on a plus de dépassement. Mais le chiffre n'est plus transformé (on a une suite de # dans la cellule).
Ma solution n'est donc pas bonne.
Je supprime le message pour ne pas polluer la discussion.
Parce que pour moi, une solution qui plante n'en est plus une.
Personnellement, cela fait un bon moment que j'utilise la solution proposée par @Dranreb (Calendrier Autonome).
Et ce pour, les cellules ou les formulaires.
Pat66 devrait voir de ce côté, pour éviter les mauvaises surprises d'un code foireux comme celui que j'avais proposé.
Ah !! Je n'avais pas tenté de retaper 15082020 alors que la cellule était déjà renseignée de la date.
Je vais chercher …
Alors apparemment ça vient de ce qu'Excel essaye de renvoyer Target.Value sous forme de Date du fait que la cellule porte un format de date. Ça semble réglé comme ça :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.NumberFormat = "General"
Target.Value = DateSerial(Int(Target.Value) Mod 10000, Int(Target.Value / 10000) Mod 100, Int(Target.Value / 1000000))
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not IsNumeric(Target.Value) Then Exit Sub
If Len(Target.Value) <> 8 Then Exit Sub
Application.EnableEvents = False
Target.Value = DateSerial( _
Right(Target.Value, 4), _
Mid(Target.Value, 3, 2), _
Left(Target.Value, 2))
Target.NumberFormat = "dd/mm/yyyy"
Application.EnableEvents = True
End Sub
Bonjour.
Plante aussi sur le dépassement de capacité si la cellule a déjà une valeur de date,
et ne traite pas correctement les saisie de nombres < 10011900
Private Sub Worksheet_Change(ByVal Target As Range)
Dim V As Variant, S As String
If Target.Count > 1 Then Exit Sub
V = Target.Value2
If VarType(V) <> vbDouble Then Exit Sub
If V < 1011900 Then Exit Sub
S = Format(V, "0/00/0000")
Application.EnableEvents = False
Target.Value = CDate(S)
Application.EnableEvents = True
End Sub
Bonjour.
Plante aussi sur le dépassement de capacité si la cellule a déjà une valeur de date,
et ne traite pas correctement les saisie de nombres < 10011900
C'était destiné à vous et je maintiens que ça ne permet par de saisir une date antérieure à un 10 du mois, et que Target.Value ne peut pas être évalué sans dépassement de capacité si la cellule portait déjà un format de date avant qu'on saisisse ce nombre.
Le format date est automatiquement adopté en remplacement du format Standard si on affecte un Variant/Date à la Value.
Si ensuite on saisit dans cette cellule un nombre > 2958465 (qui est le numéro de série du 31/12/9999), l'évaluation de sa Value, pour quelque raison que ce soit, se solde par un dépassement de capacité. En prenant Value2 il n'essaye plus de renvoyer une Date.
Si ensuite on saisit dans cette cellule un nombre > 2958465 (qui est le numéro de série du 31/12/9999), l'évaluation de sa Value, pour quelque raison que ce soit, se solde par un dépassement de capacité.
- 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