'patricktoulon
'quasiment tout les formats de date sont détectés
'dd/mm/yyyy
'dd -mm - yyyy
'dd mm yyyy ? ? espace
'yyyy.mm.dd
'd m yy
'd -mmm - yyyy
'yyyy , mm, dd
'dd mmm (date partielle)
'mmm yyyy
'etc....
'etc....
Sub test()
For i = 18 To 24
MsgBox Cells(i, 1).Text & vbCrLf & Cells(i, 1).NumberFormat & vbCrLf & vbCrLf & EstFormatDate(Cells(i, 1))
Next
End Sub
Function EstFormatDate(cel As Range) As Boolean
Dim nbF As String
nbF = LCase(cel.NumberFormat)
'suppression des caractères genants utilisé éventuellement dans le pattern
' sauf le separateur de date bien sur!!!, lui on l'échappe dans le pattern
nbF = Replace(Replace(Replace(nbF, """", ""), "$", ""), "€", "")
With CreateObject("VBScript.RegExp")
.IgnoreCase = True
.Global = False
' On cherche au moins deux composantes (d, m, y) parmi les trois, séparées par des séparateurs
.Pattern = "\b(?:d{1,4}|m{1,4}|y{2,4})([\s\/\-,\.]*)" & _
"(?:d{1,4}|m{1,4}|y{2,4})(\1?(?:d{1,4}|m{1,4}|y{2,4}))?\b"
EstFormatDate = .test(nbF)
End With
End Function