Convertir une date

Salut le forum,

J'ai une colonne avec des dates en format 20150916

Est-ce que vous avez une technique pour le transformer en 16/09/2015 ?

J'ai bien pensé à insérer une colonne à droite et mettre la formule "=RIGHT(RC[-1],2)&""/""&MID(RC[-1],5,2)&""/""&LEFT(RC[-1],4)"

Mais je suis sure qu'il y a moyen de faire quelque chose sans forcément insérer une colonne supplémentaire.

Merci d'avance

Bon dimanche

Bonsoir,

Je vous propose d'aménager et de tester ce petit code :

Sub Transforme()
    Dim C As Range
    Dim Col As Range
    Set Col = Range("C:C")
    For Each C In Col
        If C = "" Then Exit Sub
        C = DateSerial(Left(C, 4), Mid(C, 5, 2), Right(C, 2))
    Next C
End Sub

Bonsoir JFL

La macro n'a pas marché!

J'ai une erreur sur la ligne C = DateSerial(Left(C, 4), Mid(C, 5, 2), Right(C, 2))

Erreur d'exécution '13':

Incompatibilité de type

Pouvez-vous joindre un fichier anonymisé ?

Bonsoir,

Essayer :

=DATE(CNUM(GAUCHE(A1;4));CNUM(STXT(A1;5;2));CNUM(DROITE(A1;2)))

Bonjour MFerrand

Comment utiliser votre formule sans insérer une colonne supplémentaire pour convertir ?

JFL, j'ai joint un echantillon du fichier, qui fait normalement 111 milles lignes

11glex01-0025-v-0-copie.csv (875.00 Octets)

Bonjour le forum,

Voici, je pense, un petit code plus adapté à votre besoin :

Sub Transforme()
    Dim Col As Range
    Dim LigFin As Long
    Dim Lig As Long
    Dim Ctemp As String
    Dim NumCol As Long

    Set Col = Range("C:C")
    NumCol = Col.Column
    LigFin = Col.SpecialCells(xlCellTypeLastCell).Row

    For Lig = 2 To LigFin
        Ctemp = Cells(Lig, NumCol)
        Cells(Lig, NumCol) = DateSerial(Left(Ctemp, 4), Mid(Ctemp, 5, 2), Right(Ctemp, 2))
    Next Lig
End Sub

Bonjour,

Macro dans ce cas.

Sub ConvertDate()
    Dim n&, i&, d
    With ActiveSheet
        n = .Cells(.Rows.Count, 3).End(xlUp).Row
        Application.ScreenUpdating = False
        For i = 2 To n
            d = .Cells(i, 3)
            d = DateSerial(d \ 10000, (d Mod 10000) \ 100, d Mod 100)
            .Cells(i, 3) = d
        Next i
    End With
End Sub

Re,

Précision :

Votre fichier csv, qui doit provenir d'une source distincte, peut faire l'objet d'une intégration automatique dans Excel via "Données \ Données externes etc......". Et dans ce cas, en choisissant le format DATE approprié, vous êtes débarrassé de la macro !

Super vos deux macros fonctionnent parfaitement.

J'ai testé les deux et celle de JFL a été un peu plus rapide de peu (genre 1 seconde sur 111k lignes ahaha, c'est minime)

Je note également que j'ai un peu plus pigé le code de JFL, notamment ca : DateSerial(Left(Ctemp, 4), Mid(Ctemp, 5, 2), Right(Ctemp, 2)). Si besoin je peux m'en sortir pour modifier le code en fonction de mes besoins.

J'ai pas compris du tout les instructions de MFerrand dans leur totalité j'ai tout juste commencé mon livre le VBA pour les nuls alors j'ai encore du chemin à faire, mais je vais me garder le code en réserve !

Merci encore en tout cas.

Et oui j'ai tenté de convertir automatiquement le fichier quand je l'importe, mais sans succès, j'ai déja galéré à trouvé un code qui m'ouvre une boite de dialogue pour explorer l’arborescence de mon ordi pour récupéré le fichier !

Christrucci a écrit :

Et oui j'ai tenté de convertir automatiquement le fichier quand je l'importe, mais sans succès, j'ai déja galéré à trouvé un code qui m'ouvre une boite de dialogue pour explorer l’arborescence de mon ordi pour récupéré le fichier !

C'est dommage ! Vous devriez investir un peu de votre temps dans cette fonctionnalité, le jeu en vaut la chandelle !

J'ai testé les deux et celle de JFL a été un peu plus rapide de peu (genre 1 seconde sur 111k lignes ahaha, c'est minime)

Ah ! ah ! Le calcul purement numérique serait plus lent que l'extraction par morceaux (c'est quasiment la seule différence avec JFL)... Je le note... mais je n'aurai pas l'occasion de tester sur 100000 lignes...

Et en fait, est ce que l'une des macro fonctionnerai si la date était stocké dans un sens différents ? Genre 16092015 et non 20150916.

Si on leur dit (en faisant les modifs nécessaires, ça marchera !)

Christrucci a écrit :

Et en fait, est ce que l'une des macro fonctionnerai si la date était stocké dans un sens différents ? Genre 16092015 et non 20150916.

Bien sûr !

Il faudrait simplement modifier une ligne de ma "véloce" macro ( ) qui deviendrait :

 Cells(Lig, NumCol) = DateSerial(Right(Ctemp, 4), Mid(Ctemp, 5, 2), Left(Ctemp, 2))

MFerrand a écrit :

Si on leur dit (en faisant les modifs nécessaires, ça marchera !)

Avec mes respects Maréchal !

oh je me ferai bien un petit userform sur mon classeur perso pour avoir ça sous la main au besoin

C'est mon prochain défi 8)

Rechercher des sujets similaires à "convertir date"