XL 2013 Convertir nombre à 8 chiffre en date

maval

XLDnaute Barbatruc
Bonjour

Sur une colonne "C" je rentre des dates. Est il possible de rentré un nombre à 8 chiffres ex:12121955 et qui soit converti en date soit 12/12/1955 dans la même cellule.

Je vous remercie d'avance
 

Dranreb

XLDnaute Barbatruc
Re : Convertir nombre à 8 chiffre en date

Bonjour.

Est-ce que ceci ne suffirait pas ?
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim V As Long
If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Or Target.Column <> 3 Then Exit Sub
If VarType(Target.Value) <> vbDouble Then Exit Sub
V = Target.Value
Application.EnableEvents = False
Target.Value = DateSerial(V Mod 10000, (V \ 10000) Mod 100, V \ 1000000)
Application.EnableEvents = True
End Sub
 

job75

XLDnaute Barbatruc
Re : Convertir nombre à 8 chiffre en date

Bonjour Bernard,

Pourquoi ne testes-tu pas ?

12 => 30/11/2011 pas bon

2004 => 30/11/2003 pas bon

20042016 => 20/04/2016 là c'est bon

14071789 => plantage avec désactivation des évènements

Et tu ne traites pas les cellules dans le cas du copier-coller d'une plage.

A+
 

Modeste geedee

XLDnaute Barbatruc
Re : Convertir nombre à 8 chiffre en date

Bonsour®
saisie possible de 4, 5, 6, 7 ou 8 chiffres :rolleyes:
Capture.JPG
' adaptation de la proposition de C.Pearson
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'--------- adaptation de la proposition de C.Pearson
'----------http://cpearson.com/excel/DateTimeEntry.htm
 Dim J As Integer, M As Integer, A As Integer

 On Error GoTo EndMacro
 If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
     Exit Sub
 End If
 If Target.Cells.Count > 1 Then
     Exit Sub
 End If
Target.NumberFormat = "General"
 Application.EnableEvents = False
 'With Target
 If Target.HasFormula = False Then
     Select Case Len(Target.Formula)
         Case 4 ' e.g., 2998 = 2-Sep-1998    j m aa
              J = Left(Target.Formula, 1): M = Mid(Target.Formula, 2, 1): A = Right(Target.Formula, 2)
         Case 5 ' e.g., 12198 = 12-Jan-1998   jj m aa
             J = Left(Target.Formula, 2): M = Mid(Target.Formula, 3, 1): A = Right(Target.Formula, 2)
         Case 6 ' e.g., 090298 = 2-Sep-1998 jj mm aa
             J = Left(Target.Formula, 2): M = Mid(Target.Formula, 3, 2): A = Right(Target.Formula, 2)
         Case 7 ' e.g., 1231998 = 12-Mar-1998 jj m aaaa
             J = Left(Target.Formula, 2): M = Mid(Target.Formula, 3, 1): A = Right(Target.Formula, 4)
         Case 8 ' e.g., 09021998 = 2-Sep-1998
             J = Left(Target.Formula, 2): M = Mid(Target.Formula, 3, 2): A = Right(Target.Formula, 4)
         Case Else
              Target.NumberFormat = "General"
              Err.Raise 1
              Exit Sub
     End Select
     Target.Value = DateValue(J & "/" & M & "/" & A)
 End If
 Application.EnableEvents = True
 Exit Sub
 
EndMacro:
 MsgBox Target.Address & " : " & Target.Formula & Chr(10) & "Date saisie non valide !" & Chr(10) & "4car : j m aa" & Chr(10) & "5car : jj m aa" & Chr(10) & "6car : jj mm aa" & Chr(10) & "7car : jj m aaaa" & Chr(10) & "8car : jj mm aaaa", vbCritical
 Target.Select
 Application.EnableEvents = True
 End Sub
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    36.7 KB · Affichages: 62

Dranreb

XLDnaute Barbatruc
Re : Convertir nombre à 8 chiffre en date

Je pense qu'à un On Error Resume Next près ma macro suffirait. L'utilisateur ne va pas s'amuser à entrer autre chose dans cette colonne qu'une date ou un nombre convertible en date selon cette règle.
 

Modeste geedee

XLDnaute Barbatruc
Re : Convertir nombre à 8 chiffre en date

Bonsour®
Bonjour à tous.

Encore un p'tit effort, Modeste geedee :
11116 renvoie 11/01/2016, mais je voulais 01/11/2016. Pourquoi ne pas proposer le choix ?
;)
"By Design" c'est mon choix... ! :D
après tout je pourrai imposer 8 chiffres ... Na !

mais le code étant ouvert, comme pour la plage concernée, je te laisse la liberté d'adapter à "ton" besoin...:eek:
 

Victor21

XLDnaute Barbatruc
Re : Convertir nombre à 8 chiffre en date

Re, Modeste geedee :)

Bonsour®
;)
"By Design" c'est mon choix... ! :D
après tout je pourrai imposer 8 chiffres ... Na !

mais le code étant ouvert, comme pour la plage concernée, je te laisse la liberté d'adapter à "ton" besoin...:eek:

Ma yé n'ai pas de besoin ;)
Pour obtenir 01/11/2016, je frappe 01/11/2016... Et ça marche à tous les coups ;) ;)
 

Discussions similaires

Réponses
19
Affichages
642
Réponses
3
Affichages
274

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia