Modification format date à l'utilisation d'une macro

Bonjour à tous !

Petite nouvelle sur le forum, je viens à vous avec un problème auquel je n'ai trouvé aucune solution dans le Forum.

Sans aucune formation en langage VBA je me suis lancée dedans par besoin d'abord et je dois avouer que cela ne me déplaît pas!

Mon niveau ceinture blanche 1 année étant avoué, voici l'exposé de mon problème qui j'espère sera clair !

J'exporte une base de données issue un fichier cvs dans mon classeur excel via une macro (jointe après).

Cette base de données comporte dans chacune de ses 4 dernières colonnes, une date et une heure sous le format suivant :

JJ/MM/AA hhHhh

Afin de pouvoir effectuer des calculs de délai entre mes colonnes, j'ai rajouté une ligne de code à ma macro pour remplacer le "H" de l'heure en ": "

Espérant obtenir la séquence : JJ/MM/AA hh:mm

Mon problème est qu'au final j'obtiens : MM/JJ/AA hh:mm MAIS interprété par EXCEL comme JJ/MM/AA hh:mm ce qui me pose de sérieux problème dans le calcul de mes délais ...

J'ai essayé plusieurs choses :

  • -> Application du format : date longue FR avant chargement du fichier = ÉCHEC
  • -> Application du format : date longue Ang US avant ou après chargement du fichier = ÉCHEC
  • -> Remplacement du H sans la macro en "manuel" = cela fonctionne !! j'obtiens bien JJ/MM/AA hh:hh et les calculs s'effectuent correctement.

Dans l'attente d'une réponse,

Merci par avance et bonne journée à tous!

L²K.

Option Explicit
'lollykiwi

Sub CopierCSV()
'Range("B3:H6000").ClearContents
ActiveSheet.Unprotect

Dim Nomfichierentre As String, S As String
Dim w
Dim wcsv
Set w = ThisWorkbook
      Application.ScreenUpdating = False
    Nomfichierentre = Application.GetOpenFilename("Fichier Csv (*.csv), *.csv")
    ActiveSheet.Protect
    If Nomfichierentre = "Faux" Then Exit Sub   'cliquer sur annuler
    ActiveSheet.Unprotect
    Range("B3:H6000").ClearContents
    'Ouvre le fichier csv.
    Workbooks.OpenText Filename:=Nomfichierentre, local:=True
    Set wcsv = ActiveWorkbook
    'copie nom fichier csv dans w "stat"
  w.Sheets("Stat").Range("C4") = Nomfichierentre
    'copie des données csv et collé dans w "tracktool"
  wcsv.Sheets(1).Range("A1:" & ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Address).Copy Destination:=w.Sheets("TrackTool").Range("B3")
    'ferme fichier csv .
  wcsv.Close
  Range("B3:H6000").Replace what:="|", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True, _
        ReplaceFormat:=True
    Range("B3").Select
    Range("B3:B6000").Select
    ActiveSheet.Unprotect
    Selection.TextToColumns Destination:=Range("B3"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :=".", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 4), Array(5, _
        4), Array(6, 4), Array(7, 4), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1)), _
        TrailingMinusNumbers:=True
Range("E3:H6000").Replace what:="H", replacement:=":"
         Application.ScreenUpdating = True
         ActiveSheet.Protect
End Sub

Bonsoir,

Essaye comme ça :

Range("E3:H6000").NumberFormat = "dd/mm/yy hh:mm:ss"

au lieu de :

Range("E3:H6000").Replace what:="H", replacement:=":"

Bonjour,

Merci Raja pour cette proposition.

Malheureusement je ne parviens pas à obtenir le résultat attendu avec cette solution.

J'ai essayé de faire une petite macro isolée juste pour le remplacement du H.

Je suis passée par l'enregistreur de macro en réalisant manuellement le remplacement (pour rappel en manuel cela fonctionne).

Dès que j'applique la macro: 01/10/15 07h52 devient 10/01/15 07:52.

Le format de la cellule avant après l'activation de la macro est bien jj/mm/aa hh:mm:ss

Autre point la séquence date alignée sur la droite avant la modification se décale à gauche après la macro.

Sub modifheure()
' modifheure Macro

    Range("E3:H6000").Select
    ActiveSheet.Unprotect
    Selection.Replace What:="h", Replacement:=":", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

Re,

Joins-nous le fichier pour tester.

Voilà Raja,

en pj un dossier zip avec :

Le classeur excel d'exploitation

La base de données .csv que tu sélectionnes lors de l'activation de la macro d'import (bouton flèche verte)

11export-csv.zip (90.75 Ko)

Merci encore

Bien à toi

Re,

Le fichier .csv n'est pas bien structurée. Je l'ai traité par une macro d'importation de donnée ci-jointe. Les données sont correctement traduites après remplacement du caractère "h". Inspire-toi de ce code pour faire la suite de ta macro.

11import-csv.xlsm (145.33 Ko)

Bonjour à tous,

Bonjour Raja,

Je n'ai pas su utiliser ta macro qui lors de son utilisation me posait le même soucis de conversion de la date.

J'ai finalement repris ma macro en :

  • appliquant l'action : remplacement "h" par ":" sur le fichier .csv avant de copier vers vers mon classeur d'import.
  • Lors de la conversion des données en plusieurs colonnes j'ai appliqué le format "texte" (2) aux colonnes des dates.

Dans mon classeur seules les colonnes de calcul des délais en j hh:mm sont en format personnalisé [jj/mm/aa hh:mm:ss]

Mes calculs de délais se font sans problème !

merci de m'avoir éclairé le chemin

Très bonne journée à tous !

LollyK

Mon code :

Sub CopierCSV()
'Range("B3:H60000").ClearContents
ActiveSheet.Unprotect

Dim Nomfichierentre As String, S As String
Dim w
Dim wcsv
Set w = ThisWorkbook
      Application.ScreenUpdating = False
    Nomfichierentre = Application.GetOpenFilename("Fichier Csv (*.csv), *.csv")
    ActiveSheet.Protect
    If Nomfichierentre = "Faux" Then Exit Sub   'cliquer sur annuler
   ActiveSheet.Unprotect
    Range("B3:H60000").ClearContents
    'Ouvre le fichier csv.
   Workbooks.OpenText Filename:=Nomfichierentre, local:=True
    Set wcsv = ActiveWorkbook
    'copie nom fichier csv dans w "stat"
 w.Sheets("Stat").Range("C4") = Nomfichierentre
    'copie des données csv et collé dans w "tracktool"
  wcsv.Sheets(1).Columns("A:A").Replace what:="h", replacement:=":", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True, _
        ReplaceFormat:=True
  wcsv.Sheets(1).Range("A1:" & ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Address).Copy Destination:=w.Sheets("TrackTool").Range("B3")
    'ferme fichier csv .
 wcsv.Close
    Range("B3").Select
    Range("B3:B60000").Select
    ActiveSheet.Unprotect
    Selection.TextToColumns Destination:=Range("B3"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 2), Array(5, _
        2), Array(6, 2), Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 1), Array(11, 1)), _
        TrailingMinusNumbers:=True
     ActiveSheet.Protect
End Sub
Rechercher des sujets similaires à "modification format date utilisation macro"