Convertir du texte en format date

12classeur1.xlsx (12.42 Ko)

Bonjour à tous,

Je récupère des logs d'une machine, fichier csv. J'ai une colonne qui représente des dates mais sous forme de texte (enfin je pense) que je souhaite mettre en date afin de pouvoir trier par ordre chronologique.

Comme vous pourrez voir dans le fichier joint les date sont au format :

Mois/jour/année heure:minute:seconde AM ou PM

Et ce qui est rigolo c'est que les mois et jours peuvent être sur 1 ou 2 digits et les heures au format anglais ...

Voilà, je suis preneur de toute solution, formules ou macro.

Merci à vous.

Bonjour,

Une formule possible (pour le 1er cas, à étendre ensuite à toute la plage à convertir) :

=DATE(STXT(A2;CHERCHE(" ";A2)-4;4);STXT(A2;1;CHERCHE("/";A2)-1);SUBSTITUE(STXT(A2;CHERCHE("/";A2)+1;2);"/";""))+TEMPSVAL(STXT(A2;CHERCHE(" ";A2)+1;11))

La première partie concernant l'extraction de la date est simplifiable en utilisant la fonction DATEVAL(), mais il y a un risque d'inversion entre MOIS et JOUR dans le cas des jours <12. On pourrais aussi utiliser une fonction VBA personnalisée pour rendre plus "lisible" la fonction...

9classeur1.xlsx (16.50 Ko)

Bonjour,

Une proposition Power Query.

A effectuer directement sur le csv.

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Trimmed Text" = Table.TransformColumns(Source,{{"Exit Time", Text.Trim, type text}}),
    #"Duplicated Column" = Table.DuplicateColumn(#"Trimmed Text", "Exit Time", "Exit Time - Copy"),
    #"Changed Type with Locale" = Table.TransformColumnTypes(#"Duplicated Column", {{"Exit Time - Copy", type datetime}}, "en-US")
in
    #"Changed Type with Locale"

Cdlt.

4classeur1-1.xlsx (23.61 Ko)
iso4217

Bonjour Jean Eric,

Petite précision, je me suis trompé d'Excel, au boulot c'est du 2013 avec compte 365 ...

Donc, peux-tu me détailler ta phrase : "

Une proposition Power Query.

A effectuer directement sur le csv." ?

Merci

Re,

Pour Excel 2013, Power Query est un complément gratuit Microsoft à télécharger et installer sur ton poste (si l'entreprise le permet !).

Maintenant tu parles d'Excel 2013 et d'un compte 365 ?

Vérifie dans un 1er. temps que tu disposes de l'add-in.

Ruban, Développeur, Compléments, Compléments Excel ou Compléments COM.

A te relire pour la suite.

Cdlt.

Je ne l'ai pas, et je ne peux pas le télécharger .....

Fichier avec Excel 2013 et 365

captureexcel

Bonjour, une dernière solution possible est d'utiliser l'option de convertion excel.

- on inséré une colonne après la colonne A ( au cas ou la colonne B contenait des données qu'il faut conserver )

- on selectionne la colonne A et option "Convertir" / Largeur fixe / (juste après 2020) puis en format de la première partie coupé on indique :

Date : JMA.

Bon, je vais prendre la formule de Pedro qui fonctionne bien.

Merci à tous

Re,

Avec un peu de retard, avec une fonction personnalisée (VBA).

A tester.

Cdlt.

7classeur1-1.xlsm (31.23 Ko)
Public Function ConvertStringToDate(txt As String)
Dim iYear As Integer, iMonth As Integer, iDay As Integer
Dim a, b, c, d
    ConvertStringToDate = ""
    If txt <> "" Then
        a = VBA.Split(txt)
        b = VBA.Split(a(0), "/")
        iYear = b(2)
        iMonth = b(0)
        iDay = b(1)
        c = IIf(a(2) = "AM", 0, 12 / 24)
        d = VBA.TimeValue(a(1)) + c
        ConvertStringToDate = DateSerial(iYear, iMonth, iDay) + d
    End If
End Function

Bonjour

J'ai répondu sur un autre forum ou tu as posté et indiqué la manip dans 2013 qui ne nécessite ni formule, ni VBA

Je remets ici

Avec 2013 :
Données, A partir de texte, sélectionner le fichier puis choisir largeur fixe.
A l'étape 3 de l'import déclarer le format date en MJA

On obtient une colonne date et une colonne heure que l'on peut additionner pour retrouver les 2 infos dans une colonne unique si nécessaire.

exittime

EDIT : pas vu que Xmenpn avait déjà donné cette solution ici

Avec un peu de retard, avec une fonction personnalisée (VBA).
7classeur1-1.xlsm (31.23 Ko)

@Jean-Eric : j'avais pensé à une solution proche à l'origine pour retirer les "AM" ou "PM" et ajouter 12h dans le cas du "PM". Sauf que ce n'est pas si simple car 12:30:00 PM par exemple correspond bien à 12:30:00 au format français, et pas 24:30:00 (voir lignes 208 - 210 dans le fichier exemple). Par contre je me suis aperçu que TEMPSVAL() et probablement son équivalent VBA TimeValue() gère bien la conversion du AM et PM...

A tester la modification de d (et suppression de c) :

d = VBA.TimeValue(a(1) & " " & a(2))

Edit : testé à l'instant avec succès

Option Explicit

Public Function ConvertStringToDate(txt As String)
Dim iYear As Integer, iMonth As Integer, iDay As Integer
Dim a, b, c
    ConvertStringToDate = ""
    If txt <> "" Then
        a = VBA.Split(txt)
        b = VBA.Split(a(0), "/")
        iYear = b(2)
        iMonth = b(0)
        iDay = b(1)
        c = VBA.TimeValue(a(1) & " " & a(2))
        ConvertStringToDate = DateSerial(iYear, iMonth, iDay) + c
    End If
End Function

Re,

Merci pedro22 !...

Je pensais bien qu'il y avait souci ...

Cdlt.

Rechercher des sujets similaires à "convertir texte format date"