1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| Sub Excel_et_DatesDeTypeString()
Cells.Clear
'VBA interprete bien les dates en tenant compte des parametres regionaux de Windows.
'La preuve, si on demande a VBA de transformer "03/02/1997" en date,
'1. soit avec la commande CDate
result = CDate("03/02/1997")
Range("B2").Value = result
'2. soit en attribuant "03/02/1997" a une variable de type Date
Dim maVar As Date
Range("A3").Value = "'" & "03/02/1997"
maVar = Range("A3").Value
Range("B3").Value = maVar
'On obtient bien "03/02/1997"
'C'est Excel qui bizarrement interprete mal les dates de format String en provenance de VBA.
'Si on execute la commande suivante,
Range("B4").Value = "03/02/1997"
'ou bien
Dim strV As String
strV = Range("B3").Value '"03/02/1997"
Range("B5").Value = strV
'Excel ne tient pas compte des parametres regionaux
'et s'imagine qu'il s'agit d'une date au format americain
'et affiche "02/03/1997"
'En consequence, en VBA, on ne doit jamais se permettre d'ecrire sur une feuille Excel une date de type String.
'Toujours une date de type Date, soit avec une variable de type Date, soit avec la commande de conversion CDate.
'Cela explique que la commande Replace suivante ne fonctionne pas, alors que Remplacer fonctionne parfaitement dans Excel:
Range("A6").NumberFormat = "@"
Range("B6").NumberFormat = "@"
Range("A6").Value = "03.02.1997"
Range("B6").Value = "03.02.1997"
Range("B6").Select
Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'On obtient 02/03/1997
'Car Excel ne tient pas compte des parametres regionaux quand une date de type String provient de VBA.
Range("c2") = "CDate(" & """03/02/1997""" & ")"
Range("C3") = "Variable de type Date"
Range("C4") = "String en provenance de VBA"
Range("C5") = "Variable de type String"
Range("C6") = "String en provenance de VBA"
End Sub |
Partager