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 SubBonsoir,
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 SubRe,
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)
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.
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