VBA - Format date 24h-AM/PM

Bonjour et merci d'avance pour votre aide,

Je travail dans un pays anglophone avec un Excel au format horaire AM/PM (et qui doit rester configurer tel quel).

Dans mon projet je récupère des données de plusieurs fichiers afin de les importer dans une BdD (1 fichier = 1 onglet dans la BdD).

Dans mon fichier source la date est de la forme "dd/MM/yyyy HH:mm:ss" au format 24h. Comme je souhaite récupérer uniquement l'heure (sans minutes et secondes) j'ai inscris ces lignes dans mon code:

        Range(Selection, Selection.End(xlDown)).Select
        Selection.NumberFormat = "HH;@"

J'ai essayé plusieurs format mais impossible d'obtenir la date en format 24H, le rendu est toujours en AM/PM.

Avec vous une solution? Merci

En Plus:

Voici mon code en entier en version anonyme, si certaines personnes voient des pistes d'optimisation je suis preneur! (à part la mise en forme date il fonctionne)

Sub Regroupement()

'Openning of DATABASE

Dim DatabaseFile As Workbook

Set DatabaseFile = Workbooks.Open("DATABASE.xlsx")

'Global variables

 Dim File As String
 Dim NewestFile As String
 Dim MainPath As String
 Dim Path As String
 Dim dt As String
 Dim FileTABLE(35) As String
        FileTABLE(1) = "a"
        FileTABLE(2) = "b"
        FileTABLE(3) = "c"
        FileTABLE(4) = "d"
        FileTABLE(5) = "e"
        FileTABLE(6) = "f"
        FileTABLE(7) = "g"
        FileTABLE(8) = "h"
        FileTABLE(9) = "i"
        FileTABLE(10) = "j"
        FileTABLE(11) = "k"
        FileTABLE(12) = "l"
        FileTABLE(13) = "m"
        FileTABLE(14) = "n"
        FileTABLE(15) = "o"
        FileTABLE(16) = "p"
        FileTABLE(17) = "q"
        FileTABLE(18) = "r"
        FileTABLE(19) = "s"
        FileTABLE(20) = "t"
        FileTABLE(21) = "u"
        FileTABLE(22) = "v"
        FileTABLE(23) = "w"
        'FileTABLE(24) = "x"
        FileTABLE(24) = "y"
        FileTABLE(25) = "z"
        FileTABLE(26) = "aa"
        FileTABLE(27) = "ab"
        FileTABLE(28) = "ac"
        FileTABLE(29) = "ad"
        'FileTABLE(30) = "ae"
        FileTABLE(30) = "af"
        FileTABLE(31) = "ag"
        FileTABLE(32) = "ah"
        FileTABLE(33) = "ai"
        FileTABLE(34) = "aj"
        FileTABLE(35) = "ak"

 MainPath = "x\Reports"

'Openning and treatment of the newest Report for each report database

 i = 1

 Do

 Path = MainPath & "\" & FileTABLE(i)
 File = Dir(MainPath & "\" & FileTABLE(i) & "\" & FileTABLE(i) & "_*.xls")
 Do Until File = ""
 If Right$(File, 8) > dt Then
 dt = Right$(dt, 8)
 NewestFile = File
 End If
 File = Dir
 Loop
 Workbooks.Open (Path & "\" & NewestFile) ', CorruptLoad:=xlExtractData

'Separation of the Date and Time

 Application.DisplayAlerts = False

    If Not Range("C13").Find("*") Is Nothing Then
        Columns("C:C").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("C:C").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("B13").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.TextToColumns Destination:=Range("B13"), DataType:=xlDelimited, _
          TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
          Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
          :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
        Range("B13").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.NumberFormat = "dd-mmm-yy"
        Range("C13").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.NumberFormat = "h:mm:ss;@"
        Columns("D:D").Delete Shift:=xlToLeft

'Collection of the data

  Range("B13").Select
  Range(Selection, Selection.End(xlDown)).Select
  Range(Selection, Selection.End(xlToRight)).Select
  Selection.Copy

'Pasting of the data

  Workbooks("DATABASE").Activate
  Sheets(i).Activate
  ActiveSheet.Range("A65000").End(xlUp)(2).Select
  ActiveSheet.Paste

  End If

'Closing the raw report

 Workbooks(NewestFile).Activate
 ActiveWorkbook.Close savechanges:=False

 Application.DisplayAlerts = True

 i = i + 1

 Loop Until i = 35

End Sub

Merci beaucoup à vous tous

Bonjour,

Essaye comme ça :

Selection.NumberFormat = "[$-409]h:mm AM/PM;@"

Bonjour et merci pour votre réponse,

Ce format permet de passer en AM/PM alors que c'est justement ce que je veux éviter.

Je joins un fichier avec mon problème. Il est possible que le problème n'apparaisse pas chez vous car je suspècte la version de mon excel (internationnal).

Ce que je veux réaliser:

Séparer la colonne A en deux colonnes. Une avec la date format "jj/mm/aaaa" et une avec uniquement le chiffre de l'heure format "hh"

Ce que la macro réalise sur mon poste:

Sépare la colonne A en trois colonne. Une avec la date format "jj/mm/aaaa", une uniquement le chiffre de l'heure format "hh" sur 12heures et une colonne AM/PM.

J'éspère que c'est plus clair comme ça.

Merci encore,

Alexandre

Re,

Il faut essayer comme ça :

    Selection.NumberFormat = "hh:mm;@"

Re,

Cela ne marche pas non plus...

Merci

Alexandre

Re,

A force de chercher sur le problème j'ai écris une solution complètement moche mais qui fonctionne.

Quand l'énervement prend le dessus :

Columns("C:C").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("C:C").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("C:C").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("C:C").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("B13").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.TextToColumns Destination:=Range("B13"), DataType:=xlDelimited, _
          TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
          Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
          :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
        Range("B13").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.NumberFormat = "dd-mmm-yy"
        Range("C13").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.NumberFormat = "[$-409]h;@"
        Range("F9").Select
        ActiveCell.FormulaR1C1 = "12:00:00"
        Range("F9").Select
        Selection.NumberFormat = "hh"
        Range("E13").Select
        ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""AM"",RC[-2],RC[-2]+R9C6)"
        Range("E14").Select
        Columns("E:E").EntireColumn.AutoFit
        Range("E13").Select
        Selection.AutoFill Destination:=Range("E13:E50"), Type:=xlFillDefault
        Range("E13").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.NumberFormat = "hh"
        Range("E13").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Range("F13").Select
        Selection.PasteSpecial Paste:=xlPasteValues
        Selection.NumberFormat = "hh"
        Columns("E:E").Delete Shift:=xlToLeft
        Columns("D:D").Delete Shift:=xlToLeft
        Columns("C:C").Delete Shift:=xlToLeft

En revanche si vous avez une meilleure solution je suis bien évidemment preneur

Merci,

Alexandre

Rechercher des sujets similaires à "vba format date 24h"