Probleme avec dateval

Bonjour à tous,

voila j'ai un problème sur un fichier que j'ai.

J'ai des dates qui sont en format text. Mais je voudrais arriver à faire un filtre pour ne conservé que les dix dernieres années.

Du coup, je suis obligé de transformer ces dates en format date ... jusqu'à la, je sais faire... Mais le problème c'est que ces dates sont en anglais, et quand je veux les convertir en français, certains mois comme APR, une fois la modification du format en français fait, il reste en APR...

si je change APR avec "remplacer par", en AVR, la cellule se transforme en date, mais dans ce cas, la formule "=dateval(reference de la cellule)", me ressort "#valeur" ... la mer... en résumé

je vous joins un extrait de mon fichier, si quelqu'un peut m'aider.

Merci par avance

Laurent

Bonjour,

je vous joins un extrait de mon fichier, si quelqu'un peut m'aider.

Cela aiderait en effet !

bon c'est sûr ça serait mieux avec le fichier ... mais ça n'a pas fonctionné avec Chrome ni Explorer, donc je l'ai posté sur cjoint.com

Merci

bonjour

Voila avec une funtion fait main

Public Function Vers_date(Text)
moi = Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
Jour = Split(Text, "-")(0)
Mois = Split(Text, "-")(1)
An = Split(Text, "-")(2)
    For i = 0 To UBound(moi)
        If moi(i) = Mois Then Tmois = i + 1: Exit For
    Next i
Vers_date = DateSerial(An, Tmois, Jour)
End Function

A+

Maurice

Re,

Sub ConvertDates()
    Dim n&, i&, d
    With ActiveSheet
        n = .Range("A" & .Rows.Count).End(xlUp).Row
        Application.ScreenUpdating = False
        .Range("B2:B" & n).NumberFormat = "dd/mm/yyyy"
        On Error Resume Next
        For i = 2 To n
            d = Split(.Cells(i, 1), "-")
            d(UBound(d)) = 20 & d(UBound(d))
            .Cells(i, 2) = Join(d, "-")
        Next i
    End With
End Sub

Même compressé, dépasse la limite, je repasse par CJoint...


https://www.cjoint.com/c/GIfkCZsSBnu

Bonjour,

Bonjour MFerrand,

Ta proposition en xlsb.

Cdlt.

Jean-Eric a écrit :

Bonjour,

Bonjour MFerrand,

Ta proposition en xlsb.

Cdlt.

Riche idée !! Merci Jean-Eric !

Ça, je vais essayer de m'en resouvenir aux moments opportuns !

Bonjour à tous,

A moins que le fichier exemple ne soit prédictif, il y a des dates remontant à 1953.

Cordialement


Re

Ce qui pourrais donner quelque chose comme:

Sub test()
Dim i&, Prefix%, Tb As Variant, Rng As Range

With ActiveSheet
    Set Rng = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(3))
End With

Tb = Rng
For i = LBound(Tb, 1) + 1 To UBound(Tb, 1)
    If Tb(i, 1) <> "" Then
        Prefix = 20
        If CLng(Right(Tb(i, 1), 2)) > 50 Then Prefix = 19
        Tb(i, 1) = Split(Tb(i, 1), "-")
        Tb(i, 1)(UBound(Tb(i, 1))) = Prefix & Tb(i, 1)(UBound(Tb(i, 1)))
        Tb(i, 1) = Join(Tb(i, 1), "-")
    End If
Next i
Rng.Offset(0, 1).Resize(, 1) = Tb

End Sub

Cordialement

Efgé a écrit :

Bonjour à tous,

A moins que le fichier exemple ne soit prédictif, il y a des dates remontant à 1953.

Cordialement

Judicieuse remarque !

Un correctif à ma procédure :

Sub ConvertDates()
    Dim n&, i&, a%, d
    With ActiveSheet
        n = .Range("A" & .Rows.Count).End(xlUp).Row
        Application.ScreenUpdating = False
        .Range("B2:B" & n).NumberFormat = "dd/mm/yyyy"
        On Error Resume Next
        For i = 2 To n
            d = Split(.Cells(i, 1), "-")
            a = CInt(d(UBound(d)))
            a = IIf(a < 18, a + 2000, a + 1900)
            d(UBound(d)) = a
            .Cells(i, 2) = Join(d, "-")
        Next i
    End With
End Sub

Cordialement.

Rechercher des sujets similaires à "probleme dateval"