VBA : Comment Fromater cette date : 30/03/2020 21:50:14.703 ?

Bonjour à tous,

Mon problème est de formater une date à partir de ce format : 30/03/2020 21:50:14.703 le "point" de séparation des millièmes posant le problème.

Méthode 1 :

Dans un tableau je fais " Ctrl H" je remplace "." par "," et j'obtiens ça : 50:14,7 reconnu comme une date que je peux formater comme j'ai besoin : dd/mm/yyyy hh:mm:ss

Le résultat me convient tout à fait et je veux placer ça dans une macro pour que l'utilisateur final n'est pas a faire cette manipulation. Donc ce qui suit pose mon problème :

Méthode 2 :

Je retire le point et tout ce qu'il y a derrière et j'obtiens ça : 30/03/2020 21:50:14 mais les dates sont interprétées en anglais et invèrssent mois et jours si les jours sont < 12 (01/04/2020 changé en 04/01/2020) ça ne fait pas sérieux

Sub Macro1()
  Columns("B:B").Select
    Selection.Replace What:=".*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End Sub

Méthode 3

Avec la macro ci-dessous j'obtiens ce résultat : 30/03/2020 21:50:14,703 ce qui ne peut pas être interprété comme date

Sub Macro1()
  Columns("B:B").Select
    Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End Sub

Comment faire pour retrouver le même résultat que la méthode 1 ?

Voilà vous savez tout. Je vous remercie pour toute aide.

Bonjour,

Comme ça, je dirai qu'il s'agit d'un format texte et non date,

en sélectionnant ta colonne concernée, dans données, Convertir,

choisis le point comme délimitateur.

Ta colonne bascule en format date, et la colonne d'après récupère les données situées à droite du Point restant.

Comme d'hab, un fichier serait le bienvenu.

Cordia5

Merci de ta réponse.

Pour compléter les info les dates du fichier viennent d' .CSV que je ne peux pas modifier à sa création.

dans le fichier joint il y a l'illustration des trois méthodes. la 1 fonctionne mais il y a une manip a faire directement sur le tableau (Ctrl-H) ce que je veux éviter.

En posant le problème, le me rend compte que c'est la méthode de remplacement qui ne va pas.

là je cale

Merci pour l'aide

11test-macro.xlsm (20.84 Ko)

Bonjour,

comment importes tu les données depuis ton fichier .CSV ? , car pour cela pas besoin de macro, utilises Query, il est natif dans ta version Excel, et il fait largement ce que tu demandes.

Cordia5

Bonjour,

Merci pour ton aide

Le CSV est une extraction d'une BDD crée par une application tiers, son nom change et n'est pas sur un PC en réseau seul le format est toujours le même. Je fais juste un copié/collé dans mon tableau excel, l'utilisation doit rester le plus simple possible pour un utilisateur lambda.

Bonjour Sisyphe

Voici un code qui mettra tes dates au bon format et seront considérées comme des nombres

Sub DateTexteEnNombre()
  Dim dLig As Long, Lig As Long
  Dim sDate As String, vDate As Date
  ' Bon format
  Columns("G:G").NumberFormat = "dd/mm/yyyy hh:mm:ss"
  ' Dernière ligne de la colonne
  dLig = Range("G" & Rows.Count).End(xlUp).Row
  ' Pour chaque ligne
  For Lig = 1 To dLig
    ' Récupérer la date texte
    sDate = Range("G" & Lig).Value
    ' Supprimer les 4 derniers caractères
    Range("G" & Lig).Value = Left(sDate, Len(sDate) - 4)
    ' Transformer la date texte en date nombre via une variable date
    vDate = Range("G" & Lig).Value
    ' Inscrire la date
    Range("G" & Lig).Value = vDate
  Next Lig
End Sub

@+

Bonjour BrunoM45,

Merci pour ton aide

J'ai tester ta macro mais je retrouve le même problème , excel interprète les dates a l'anglaise et inverse jour et mois si le jour est < à 12 on le voit sur les premières dates 02/04 vs 04/02.

Re,

Voici le code pour date correctement formatée en français

Sub DateTexteEnNombre()
  Dim dLig As Long, Lig As Long
  Dim sDate As String, vDate As Long
  Dim sJJ As String, sMM As String, sAAAA As String, sH As String
  ' Bon format
  Columns("G:G").NumberFormat = "dd/mm/yyyy hh:mm:ss"
  ' Dernière ligne de la colonne
  dLig = Range("G" & Rows.Count).End(xlUp).Row
  ' Pour chaque ligne
  For Lig = 1 To dLig
    ' Récupérer la date texte
    sDate = Range("G" & Lig).Value
    ' Récupérer le jour, mois, année et heure, minutes, secondes
    sJJ = Left(sDate, 2): sMM = Mid(sDate, 4, 2): sAAAA = Mid(sDate, 7, 4): sH = Mid(sDate, 11, 9)
    ' Inscrire la date correctement
    Range("G" & Lig).Value = sMM & "/" & sJJ & "/" & sAAAA & sH
  Next Lig
End Sub

@+

Bonjour à tous,

Excel 2018 ?

Avec Récupérer et transformer (Power Query) la conversion en date heure est automatique.

Cdlt.

oui BrunoM45 ,

comme ça tout fonctionne. j'ai bien le résultat attendu un grand merci.

bonjour, Jean-Eric

je ne connaissais pas power query mais je vais me pencher dessus

Merci à vous deux pour votre soutien.

Rechercher des sujets similaires à "vba comment fromater cette date 2020 703"