Sub AAAAMMJJenDate()
Dim plage As Range, zone, d, x, y
Application.ScreenUpdating = True: On Error Resume Next 'True pour sélectionner la (multi)plage
Set plage = Application.InputBox("Sélectionnez la plage à traiter (ou multiplages), svp", _
Type:=8) ' acquisition de la (multi)plage
If plage Is Nothing Then Exit Sub ' si erreur d'acquisition, on ne fait rien et on quitte
Application.ScreenUpdating = False ' on fige l'écran
Set plage = Intersect(plage.Parent.UsedRange, plage) ' on limite à la zone utile
For Each zone In plage.Areas ' pour chaque zone de la sélection
For Each x In zone.Cells ' pour chaque cellule de la zone
y = CStr(x) ' on convertit la valeur de la cellule en texte
If y Like String(8, "#") Then ' si texte est de la forme AAAAMMJJ
d = "": d = DateSerial(Left(y, 4), Mid(y, 5, 2), Right(y, 2)) ' conversion de y en date
' si d est une date alors on efface la cellule, on la formate en date et on y place la date
If IsDate(d) Then x.ClearContents: x.NumberFormat = "dd/mm/yyyy": x.HorizontalAlignment = 1: x.Value = d
End If
Next x ' cellule suivante de la zone
Next zone ' zone suivante
Application.ScreenUpdating = True
End Sub