Convertir une chaîne de texte en date

Bonjour,

Je reçois des données avec des colonnes dates et heures sous cette forme :

Fri Sep 30 2022 18:22:42 GMT+0200 (Central European Summer Time)
Mon Oct 03 2022 02:00:20 GMT+0200 (Central European Summer Time)
Tue Oct 04 2022 01:38:39 GMT+0200 (Central European Summer Time)
...

Je souhaiterai convertir ces données en date :

30.09.2022
03.04.2022
04.10.2022
...

Si vous avez des pistes, car je sèche.

D'avance merci de votre aide et toute bonne soirée.

Fabrice

Bonjour,

Tu peux utiliser une fonction VBA qui éclate la chaîne de caractères dans un tableau avec la fonction SPLIT. Dans la fonction ci-dessous, tu récupères la date sous la forme JJ.MM.AAAA (chaîne de caractère). Si tu la veux au format date il faudra une toute petite modification en utilisant la fonction CDate. La valeur de retour sera alors de type DATE. Il faudra modifier la première ligne comme suit : Function convDate(ligne As String) as Date

La voici :

Function convDate(ligne As String)
Dim T As Variant
Dim Jour As String
Dim mois As String
Dim Annee As String
Dim Retour As String
T = Split(ligne)
Jour = T(2)
'*************************
'* Détermination du mois *
'*************************
Select Case T(1)
Case "Jan"
mois = "01"
Case "Jan"
mois = "02"
Case "Fev"
mois = "03"
Case "Avr"
mois = "04"
Case "Mai"
mois = "05"
Case "Jun"
mois = "06"
Case "Jul"
mois = "07"
Case "Aou"
mois = "08"
Case "Sep"
mois = "09"
Case "Oct"
mois = "10"
Case "Nov"
mois = "11"
Case "Dec"
mois = "12"
End Select
Annee = T(3)
convDate = Jour & "." & mois & "." & Annee
End Function
Edit modo : code à mettre entre balises avec le bouton </>

Cordialement,

Bonjour,
Tu aurais pu joindre un fichier à ta demande.
Je prends des risques en intervenant.
3 propositions à étudier
:
1 - Power Query
2 - Formule (Let)
3 - Fonction (Lambda)

Bon weekend.
Cdlt.

15winzek.xlsx (18.31 Ko)

bonjour,

un variant de la LET-formule

=LET(value;TEKST.SPLITSEN(B4;" ");
year;INDEX(value;;4);
month;EQUIV(INDEX(value;;2);{"jan";"feb";"mar";"apr";"may";"jun";"jul";"aug";"sep";"oct";"nov";"dec"};0);
day;INDEX(value;;3);
DATE(year;month;day))
5winzek.xlsx (23.95 Ko)

EDIT : la traduction de la formule n'était pas correct, alors voilà le fichier.

Bonjour à tous !

Et pour le "fun", une formule unique et dynamique pour 365 (Insider ?) :

=LET(
    t_Text;STXT(Table1[Column1];5;11);
    m_Mois;{"jan";"feb";"mar";"apr";"may";"jun";"jul";"aug";"sep";"oct";"nov";"dec"};
    BYROW(t_Text;LAMBDA(r;DATE(DROITE(r;4);EQUIV(GAUCHE(r;3);m_Mois;0);STXT(r;5;2))))
    )

Bonjour à tous,

Désolé de ne pas avoir effectivement mis un fichier.

Je suis scotché. Un tout grand merci pour vos solutions qui fonctionnent magnifiquement bien. Je ne connaissais pas la fonction LET. Je pense me tourner vers cette voie. Mais vous m'avez donné de nombreuses pistes au-delà de ma question.

Encore merci et une toute bonne journée

Fabrice

Bonjour à tous de nouveau !

...... Je ne connaissais pas la fonction LET.

365 est une pépite ! Et les dernières fonctions matricielles dynamiques sont magiques. A investiguer sans modération....

Je vous remercie de ce retour.

Rechercher des sujets similaires à "convertir chaine texte date"