petit problème que je n'arrive pas à régler
j'ai une extraction de données avec une colonne date sous forme 10.01.1989
si je passe en manuel avec le fonction remplacer (les . par /) cette colonne est bien reconnue en date nickel
par contre si j'automatise ce remplacement dans une une macro
le résultat devient : 01/10/1989 et toute les dates ou le jour est supérieur à 12 ne sont plus reconnue en date et reste en texte
il y a conversion sous forme anglaise alors que tout mes paramètres sont en français
Bonjour
Convertissez le texte obtenu en date : Cells(X, Y).Value = CDate(Replace(LeTexte, ".", "/"))
Ceci afin d'éviter que ce soit Excel qui la fasse en appliquant la règle d'interprétation internationale des textes affectés aux cellules dans les macros.
Option Explicit
Sub Macro1()
Dim Rng As Range, T(), L As Long
Set Rng = Intersect(Feuil1.[E2:E1000000], Feuil1.UsedRange)
T = Rng.Value
For L = 1 To UBound(T, 1)
T(L, 1) = CDate(Replace(T(L, 1), ".", "/"))
Next L
Rng.Value = T
End Sub
merci de vos réponses
JHA ca marche en manuel certes mais je veux automatiser via un code vba
Dysorthographie merci mais j'ai le meme problème avec la date à l'envers format anglais
Dranreb j'ai collé ton bout de code mais j'ai un pb sur T = rng.value
Bonjour.
Peut être que la feuille représentée par l'objet Worksheet Feuil1 est vide, à part éventuellement la ligne 1.
Pour que ça ne plante plus s'il n'a pas lieu de l'exécuter mettez le dans un bloc If Not Rng Is Nothing Then
bonjour
pour tes dates si tu ne veux pas qu'elle soient transformées en format US l'ors du replace ".","/"
il te faut faire ca dans une variable tableau
VB:
Sub test()
With Range("E2", Cells(Rows.Count, "E").End(xlUp))
tablo = .Value
For i = LBound(tablo) To UBound(tablo)
tablo(i, 1) = DateValue(Replace(tablo(i, 1), ".", "/"))
Next
.Value = tablo
End With
End Sub
le fait d'utiliser "datevalue" fait que les item du tableau deviennent des dates et non un string de date
ce qui fait que l'ors du transfert sur la plage comme ce n'est pas des string excel ne fera pas la conversion automatique et donc ne mettra pas les dates en US
on aurais pu faire simple mais plus lourd puisque acces au cells x fois
exemple
VB:
Sub test2()
With Range("E2", Cells(Rows.Count, "E").End(xlUp))
For Each cel In .Cells
cel.Value = DateValue(Replace(cel.Text, ".", "/"))
Next
End With
End Sub
ce qu'il faut comprendre une bonne fois pour toute !!!!!!!!!!!
c'est que le replace n'est pas suffisant , il faut que la chaine soit une date et non le string d'une date sinon excel interprète et met au format US "mm/dd/yyyy" d'ailleurs @Dranreb la bien spécifié en post #2 et #4
alors on peut utiliser DateValue ou Cdate
exemple cells(1,1) = replace("20.04.2020",".","/")' PAS BIEN DU TOUT !!!!!!!!!!!!!
cells(1,1) = DateValue(replace("20.04.2020",".","/")) ' BIEN !!!!
cells(1,1) = Cdate(replace("20.04.2020",".","/")) ' BIEN !!!!
pour ma part j'ai une petite préférence pour Datevalue qui est bien plus riche en acceptation de donnée
elle interprète très bien les date avec mois en lettre(abrégés ou pas) alors que cdate non!!!
exemple
msgbox datevalue("01 janvier 2020")' qui donnera "01/01/2020"
msgbox datevalue("05 jan. 2020")' qui donnera "05/01/2020"
une autre particularité aussi c'est que si excel interprète en us quand c'est un string datevalue et cdate eux interprètent l'us en format utilisé par le system (ca c'est kool) après le 12 eme jour bien évidement
exemple avec une date en US
merci de vos réponses et veuillez m'excusez de la mienne tardive mais j'étais en vacances
je vais étudier vos réponses
faut vraiment que je fasse une formation plus poussé du VBA moi pffff