Sub ConvertirEnDates()
Dim ArrWks, LMax As Long, Wsh As Worksheet, Rng As Range, T(), L As Long, NbStr As Long, NbCDt As Long, Réécrire As Boolean
ArrWks = Array("ales", "arles", "bagnols", "calvisson", "grau du roi", "montpellier", "nimes", "uzes")
Application.ScreenUpdating = False
For Each Wsh In Sheets(ArrWks)
Set Rng = Wsh.[A1000000].End(xlUp)
If Rng.Row >= 3 Then
Set Rng = Wsh.Range(Wsh.[A3], Rng)
If Rng.Rows.Count = 1 Then ReDim T(1 To 1, 1 To 1): T(1, 1) = Rng.Value Else T = Rng.Value
' Récupère les valeurs des cellules de la plage dans un tableau VBA 2D d'une seule colonne.
Réécrire = False
For L = 1 To UBound(T, 1)
If VarType(T(L, 1)) = vbString Then
NbStr = NbStr + 1 ' Compte les textes
If IsDate(T(L, 1)) Then ' Si la conversion du texte en date est possible
T(L, 1) = CDate(T(L, 1)) ' Remplace la valeur texte par sa conversion en date
NbCDt = NbCDt + 1 ' Compte les corrections
Réécrire = True: End If: End If: Next L
If Réécrire Then Rng.Value = T ' Réécrit les valeurs corrigées s'il y a eu au moins une correction.
End If: Next Wsh
Select Case NbStr
Case Is > NbCDt: MsgBox NbStr & " textes trouvés, dont " & NbStr - NbCDt & _
" n'ont pu être convertis en dates.", vbInformation, "ConvertirEnDates"
Case 0: MsgBox "Aucun texte trouvé.", vbInformation, "ConvertirEnDates"
Case Else: MsgBox NbStr & " textes trouvés, ayant tous été convertis en dates.", _
vbInformation, "ConvertirEnDates"
End Select
End Sub