XL 2013 remplacement . / sur date

Jmichel

XLDnaute Nouveau
Bonjour

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

quelqu'un aurait déjà trouvé une solution ?

a vous lire
 

Dranreb

XLDnaute Barbatruc
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.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
VB:
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
 

Jmichel

XLDnaute Nouveau
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
 

Pièces jointes

  • débogeur it0041.docx
    71.6 KB · Affichages: 6

Dranreb

XLDnaute Barbatruc
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
 

patricktoulon

XLDnaute Barbatruc
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
demo4.gif



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

MsgBox DateValue("10/28/2020")'donnera "28/10/2020
MsgBox CDate("10/28/2020")'donnera "28/10/2020


voila
;)
 
Dernière édition:

Statistiques des forums

Discussions
311 720
Messages
2 081 920
Membres
101 840
dernier inscrit
SamynoT