64 votes

Impossible de faire en sorte qu'Excel reconnaisse la date dans une colonne

J'ai constamment des problèmes pour travailler avec des dates dans Excel, je dois faire quelque chose de mal mais je ne comprends pas quoi.

J'ai une feuille de calcul, exportée de notre serveur d'échange, qui contient une colonne avec des dates. Elles sont sorties au format américain alors que je suis au Royaume-Uni.

La colonne en question ressemble à ceci

04/08/2012
04/09/2009
04/01/2010
04/21/2011
04/05/2012
08/30/2009
08/29/2010
08/28/2011

Dans Excel, j'ai mis en évidence la colonne et sélectionné Format Cells... . Dans cette boîte de dialogue, j'ai sélectionné le Date sélectionné English (United States) en tant que paramètre local et choisi le format de date correspondant dans la liste. Je clique sur OK et j'essaie de trier les données par cette colonne.

Dans la boîte de dialogue de tri, je choisis cette colonne, je sélectionne le tri sur les valeurs, mais l'ordre ne me donne que des options de A à Z, et non de la plus ancienne à la plus récente comme je m'y attendrais.

Cela permet de trier les données de la date en fonction des deux premiers chiffres.

Je suis conscient que je pourrais reformater ces données en ISO et que le tri de A à Z fonctionnerait, mais je ne devrais pas avoir à le faire, il y a manifestement quelque chose qui m'échappe. Qu'est-ce que c'est ?

EDITAR: Je me suis trompé dans la prime mais cela aurait dû aller à @r0berts Dans sa réponse, sa première suggestion de transformer le texte en colonnes sans délimiteur et en choisissant "MDY" comme type de données fonctionne. En outre, si vous disposez d'une heure (c.-à-d. 04/21/2015 18:34:22 ), vous devez d'abord vous débarrasser des données temporelles. Cependant, après cela, la méthode suggérée par @r0berts fonctionne bien.

0voto

Kathryn Points 1

Sélectionnez les dates et passez ce code dessus

On Error Resume Next
    For Each xcell In Selection            
        xcell.Value = CDate(xcell.Value)     
    Next xcell                              
End Sub

0voto

Mor Sagmon Points 101

Cela se produit tout le temps lors de l'échange de données de date entre les langues dans Excel. Si vous avez le contrôle du programme VBA qui exporte les données, je vous suggère d'exporter le nombre représentant la date plutôt que la date elle-même. Le nombre correspond uniquement à une date unique, indépendamment du formatage et de la langue. Par exemple, au lieu que le fichier CSV affiche le 24/09/2010, il affichera 40445.

Dans la boucle d'exportation, lorsque vous maintenez chaque cellule, si c'est une date, convertissez-la en nombre en utilisant CLng(myDateValue). Voici un exemple de ma boucle parcourant toutes les lignes d'un tableau et exportant au format CSV (notez que je remplace également les virgules dans les chaînes de caractères par une balise que j'enlève lors de l'importation, mais vous n'en aurez peut-être pas besoin) :

arr = Worksheets(strSheetName).Range(strTableName & "[#Data]").Value

    For i = LBound(arr, 1) To UBound(arr, 1)
        strLine = ""
        For j = LBound(arr, 2) To UBound(arr, 2) - 1
            varCurrentValue = arr(i, j)
            If VarType(varCurrentValue) = vbString Then
                varCurrentValue = Replace(varCurrentValue, ",", "<comma>")
            End If
            If VarType(varCurrentValue) = vbDate Then
                varCurrentValue = CLng(varCurrentValue)
            End If
            strLine = strLine & varCurrentValue & ","
        Next j
        'Last column - not adding comma
        varCurrentValue = arr(i, j)
            If VarType(varCurrentValue) = vbString Then
                varCurrentValue = Replace(varCurrentValue, ",", "<comma>")
            End If
            If VarType(varCurrentValue) = vbDate Then
                varCurrentValue = CLng(varCurrentValue)
            End If
        strLine = strLine & varCurrentValue

        strLine = Replace(strLine, vbCrLf, "<vbCrLf>") 'replace all vbCrLf with tag - to avoid new line in output file
        strLine = Replace(strLine, vbLf, "<vbLf>") 'replace all vbLf with tag - to avoid new line in output file
        Print #intFileHandle, strLine
    Next i

0voto

Mike Points 1

Je n'ai pas eu de chance avec toutes les suggestions ci-dessus - j'ai trouvé une solution très simple qui fonctionne comme un charme. Je colle les données dans Google Sheets, je surligne la colonne des dates, je clique sur format, puis sur nombre, et encore une fois sur nombre pour passer au format numérique. Je copie et colle ensuite les données dans la feuille de calcul Excel, je clique sur les dates, puis je formate les cellules en date. C'est très rapide. J'espère que cela vous aidera.

0voto

Wally Points 1

Ce problème me rendait fou, puis je suis tombé sur une solution facile. Au moins, ça a marché pour mes données. C'est facile à faire et à retenir. Mais je ne sais pas pourquoi cela fonctionne mais que changer de type comme indiqué ci-dessus ne fonctionne pas. 1. Sélectionnez la ou les colonnes contenant les dates 2. Recherchez une année dans vos dates, par exemple 2015. Sélectionnez Remplacer tout avec la même année, 2015. 3. Répétez l'opération pour chaque année. Cela transforme les types en dates réelles, année par année.
Cela reste lourd si vous avez de nombreuses années dans vos données. Plus rapide est de rechercher et de remplacer 201 par 201 (pour remplacer 2010 à 2019) ; remplacer 200 par 200 (pour remplacer 2000 à 2009) ; et ainsi de suite.

0voto

Aucune réponse ici n'a suggéré Excel Power Query. J'avais une valeur de DateTime (par ex. 2021-02-25T00:35:54.497Z ) qu'Excel ne pouvait pas interpréter correctement. J'avais besoin de la date et de l'heure. Dans un nouveau classeur Excel, j'ai utilisé l'option "Get Data > From CSV" pour charger dans Power Query. J'ai ensuite chargé les résultats dans une feuille Excel et les valeurs de date sont reconnues correctement. A noter que type datetime vs type datetimezone fait une différence. J'ai dû modifier le fuseau horaire pour obtenir un résultat correct.

Power Query - script automatisé à partir de l'interface graphique "Excel > Obtenir des données".

let
    Source = Csv.Document(File.Contents("C:\myFolder\DataSet_RefreshHistory.csv"),[Delimiter=",", Columns=7, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"refreshType", type text}, {"startTime", type datetimezone}, {"endTime", type datetimezone}, {"status", type text}, {"ReportName", type text}, {"WorkspaceId", type text}, {"serviceExceptionJson", type text}})
in
    #"Changed Type"

OBTENIR DES DONNÉES

enter image description here

AVANT et APRÈS

enter image description here

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X