web-dev-qa-db-fra.com

Impossible pour Excel de reconnaître la date dans la colonne

J'ai constamment des problèmes avec les 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 Exchange, qui contient une colonne avec les dates. Ils sont sortis au format américain même si 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 sélectionné la colonne et sélectionné Format Cells.... Dans cette boîte de dialogue, j'ai sélectionné Date, sélectionné English (United States) comme paramètres régionaux et choisi le format de date correspondant dans la liste. Je clique sur OK et j'essaie de trier les données en fonction de cette colonne.

Dans le dialogue de tri que j'ai choisi dans cette colonne, sélectionnez de tri sur les valeurs, mais l'ordre ne me donne que des options pour A à Z, pas les plus anciennes aux plus récentes, comme je le pensais.

Cela trie à son tour les données de date par les deux premiers chiffres.

Je suis conscient que je pourrais reformater ces données au format ISO et que le tri de A à Z fonctionnerait, mais je n'aurais pas dû le faire aussi, il me manque évidemment quelque chose. Qu'Est-ce que c'est?

EDIT: J'ai foiré la prime, mais cela aurait dû aller à @ r0berts answer, sa première suggestion de Text to Columns sans délimiteur et en choisissant "MDY" comme type de données. De plus, si vous avez une heure (c'est-à-dire 04/21/2015 18:34:22), vous devez d'abord vous débarrasser des données de l'heure. Cependant, après cela, la méthode suggérée par @ r0berts fonctionne bien.

41
Patrick

Le problème: Excel ne veut pas reconnaître les dates en tant que dates, même si vous essayez explicitement de lui indiquer les dates par "mm/dd/yyyy". Comme vous le savez; Lorsque Excel a reconnu quelque chose en tant que date, il le stocke également sous forme de numéro - tel que "41004" mais s'affiche en tant que date en fonction du format que vous spécifiez. Pour ajouter à la confusion, Excel peut convertir uniquement une partie de vos dates, telle que 08/04/2009, mais en laisser d'autres, par exemple. 28/07/2009 non converti.

Solution: étapes 1 puis 2

1) Sélectionnez la colonne de date. Sous Données, cliquez sur le bouton Texte en colonnes. Sur le premier écran, laissez le bouton radio sur "délimité" et cliquez sur Suivant. Décochez l'une des cases du délimiteur (toutes les cases blank; pas de cases à cocher) et cliquez sur Next. Sous le format de données de colonne, choisissez Date, sélectionnez MDY dans la liste déroulante adjacente, puis cliquez sur Terminer. Maintenant, vous avez les valeurs de date (c’est-à-dire qu'Excel a reconnu vos valeurs en tant que type de données Date), mais la mise en forme est probablement toujours la date locale, pas le mm/dd/yyyy souhaité.

2) Pour afficher correctement le format de date américain souhaité, vous devez d'abord sélectionner la colonne (si elle est désélectionnée), puis sous Format de cellule - Nombre choisissez Date ET sélectionnez Paramètres régionaux: anglais (US). Cela vous donnera un format comme "m/d/yy". Ensuite, vous pouvez sélectionner Personnalisé et vous pouvez soit taper "mm/dd/yyyy", soit le choisir dans la liste des chaînes personnalisées.

Alternative: utilisez LibreOffice Calc. Après avoir collé les données de l'article de Patrick, choisissez Coller spécial (Ctrl+Shift+V), puis choisissez Texte non formaté. Cela ouvrira la boîte de dialogue "Importer du texte". Le jeu de caractères reste Unicode, mais pour la langue, choisissez Anglais (États-Unis). vous devez également cocher la case "Détecter les numéros spéciaux". Vos dates apparaissent immédiatement au format américain par défaut et peuvent être triées par date. Si vous souhaitez utiliser le format US spécial MM/JJ/AAAA, vous devez le spécifier une fois par le biais du "formatage des cellules" - avant ou après le collage.

On pourrait dire - Excel aurait dû reconnaître les dates dès que je l’ai dit via "Format de cellule" et je suis tout à fait d’accord. Malheureusement, ce n’est que par l’étape 1 ci-dessus que j’ai pu faire en sorte que Excel reconnaisse ces chaînes de texte comme des dates. Évidemment, si vous faites cela souvent, vous aurez mal à la nuque et vous pourriez mettre sur pied une routine visuelle de base qui le ferait pour vous en appuyant simplement sur un bouton.

67
r0berts

Sélectionnez toute la colonne et allez à Rechercher et remplacer et remplacez simplement "/" par /.

5
Jair Bressani

Cela peut ne pas être pertinent pour le questionneur initial, mais cela peut aider quelqu'un d'autre qui est incapable de trier une colonne de dates.

J'ai découvert qu'Excel ne reconnaîtrait pas une colonne de dates antérieures à 1900, en insistant sur le fait qu'il s'agissait d'une colonne de texte (puisque 1/1/1900 a l'équivalent numérique 1 et que les nombres négatifs ne sont apparemment pas autorisés). J'ai donc fait un remplacement général de toutes mes dates (qui étaient dans les années 1800) pour les mettre dans les années 1900, par exemple. 180 -> 190, 181 -> 191, etc. Le processus de tri a ensuite bien fonctionné. Enfin, j'ai fait un remplacement dans l'autre sens, par exemple. 190 -> 180.

J'espère que cela aidera un autre historien.

3
Laurie Allen

J'ai eu exactement le même problème avec les dates dans Excel. Le format correspond aux conditions requises pour une date dans Excel. Toutefois, si vous ne modifiez pas chaque cellule, il ne reconnaît pas la date. Lorsque vous traitez des milliers de lignes, il n'est pas pratique de modifier manuellement chaque cellule. La solution consiste à exécuter une recherche et à remplacer sur la rangée de dates où j'ai remplacé le cavalier par un trait d'union. Excel parcourt la colonne en remplaçant des éléments similaires, mais le facteur qui en résulte est qu’il reconnaît désormais les dates! FIXÉ!

3
Warren Rocchi

https://support.office.com/en-us/article/Convert-dates-stored-as-text-to-dates-8df7663e-98e6-4295-96e4-32a67ec0a680

Solution simple ici - créez une nouvelle colonne, utilisez la formule = datevalue (cellule), puis copiez la formule dans vos autres lignes - quelques secondes pour corriger le problème.

2
Mike

Je m'occupais d'un problème similaire avec des milliers de lignes extraites d'une base de données SAP et, inexplicablement, deux formats de date différents dans la même colonne de date (la plupart étant notre norme "AAAA-MM-JJ" mais environ 10%, "MM- JJ-AAAA "). La modification manuelle de 650 lignes une fois par mois n’était pas une option.

Aucune (zéro ... 0 ... rien) des options ci-dessus n'a fonctionné. Oui, j'ai tout essayé. Copier dans un fichier texte ou exporter explicitement vers txt n’a, en quelque sorte, pas d’effet sur le format (ou son absence) des dates à 10% qui refusaient simplement de se comporter.

La seule façon de résoudre ce problème a été d'insérer une colonne vide à droite de la colonne de date qui se comportait mal et d'utiliser la formule simpliste suivante:

(en supposant que vos données erronées sont en Column D)

=IF(MID(D2,3,1)="-",DATEVALUE(TEXT(CONCATENATE(RIGHT(D2,4),"-",LEFT(D2,5)),"YYYY-MM-DD")),DATEVALUE(TEXT(D2,"YYYY-MM-DD")))

Je pouvais ensuite copier les résultats dans ma nouvelle colonne calculée par-dessus les dates qui se comportaient mal en collant "Valeurs" uniquement, après quoi je pouvais supprimer ma colonne calculée.

2
Lucster

Je soupçonne que le problème est que Excel ne parvient pas à comprendre le format ... Même si vous sélectionnez le format Date, il reste sous forme de texte.

Vous pouvez le tester facilement: lorsque vous essayez de mettre à jour le format de dates, sélectionnez la colonne, cliquez dessus avec le bouton droit de la souris et choisissez le format de cellule (comme vous le faites déjà), mais choisissez l’option 2001-03-14 (au bas de la liste). Puis examinez le format de vos cellules.

Je suspecterai que seuls certains formats de date se mettent à jour correctement, ce qui indique qu'Excel le traite toujours comme une chaîne, pas une date (notez les différents formats dans la capture d'écran ci-dessous)!

enter image description here

Il existe des solutions pour cela, mais aucune d'entre elles ne sera automatisée simplement parce que vous exportez à chaque fois. Je suggérerais d'utiliser VBA, où vous pouvez simplement exécuter une macro qui convertit du format de date américain au format de date britannique, mais cela impliquerait de copier et de coller le VBA dans votre feuille à chaque fois.

Vous pouvez également créer un fichier Excel qui lit les feuilles Excel exportées nouvellement créées (à partir d’échange), puis exécutez la VBA pour mettre à jour le format de date pour vous. Je supposerai que le fichier Excel exporté aura toujours le même nom de fichier/répertoire et fournira un exemple de travail:

Créez donc une nouvelle feuille Excel, appelée ImportedData.xlsm (compatible Excel). C'est le fichier dans lequel nous allons importer le fichier Excel exporté!

Ajouter ce VBA au fichier ImportedData.xlsm

Sub DoTheCopyBit()

Dim dateCol As String
dateCol = "A"        'UPDATE ME TO THE COLUMN OF THE DATE COLUMN

Dim directory As String, fileName As String, sheet As Worksheet, total As Integer

Application.ScreenUpdating = False
Application.DisplayAlerts = False

directory = "C:\Users\Dave\Desktop\"                   'UPDATE ME
fileName = Dir(directory & "ExportedExcel.xlsx")       'UPDATE ME (this is the Exchange exported file location)

Do While fileName <> ""

'MAKE SURE THE EXPORTED FILE IS OPEN
Workbooks.Open (directory & fileName)

Workbooks(fileName).Worksheets("Sheet1").Copy _

Workbooks(fileName).Close

fileName = Dir()

Loop

Application.ScreenUpdating = True
Application.DisplayAlerts = True

Dim row As Integer
row = 1
Dim i As Integer
Do While (Range(dateCol & row).Value <> "")

     Dim splitty() As String
     splitty = Split(Range(dateCol & row).Value, "/")
     Range(dateCol & row).NumberFormat = "@"
     Range(dateCol & row).Value = splitty(2) + "/" + splitty(0) + "/" + splitty(1)
     Range(dateCol & row).NumberFormat = "yyyy-mm-dd"
     row = row + 1
Loop


End Sub

Ce que j'ai également fait, c'est de mettre à jour le format de date en aaaa-mm-jj, car même si Excel vous donne le filtre de tri A-Z au lieu des valeurs les plus récentes, cela fonctionne toujours!

Je suis sûr que le code ci-dessus contient des bogues, mais je n'ai évidemment aucune idée du type de données que vous avez mais je l'ai testé avec une seule colonne de dates (comme vous l'avez) et cela fonctionne très bien pour moi!

Comment ajouter VBA dans MS Office?

2
Dave

Il semble qu'Excel ne reconnaisse pas vos dates en tant que dates, mais leur texte. Par conséquent, vous obtenez les options de tri de A à Z. Si vous le faites correctement, vous devriez obtenir quelque chose comme ceci:

http://i.stack.imgur.com/Qb4Pj.png

Il est donc important de s’assurer que Excel reconnaît la date. Le moyen le plus simple de le faire est d'utiliser le raccourci CTRL+SHIFT+3.

Voici ce que j'ai fait à vos données. Je l'ai simplement copiée à partir de votre message ci-dessus et collée dans Excel. Ensuite, j'ai appliqué le raccourci ci-dessus et j'ai obtenu l'option de tri requise. Vérifiez l'image.

http://i.stack.imgur.com/yAa6a.png

2
Chainsaw

Je l'ai compris!

Il y a un espace au début et à la fin de la date.

  1. Si vous utilisez rechercher et remplacer et appuyez sur la barre d'espace, cela ne fonctionnera pas.
  2. Vous devez cliquer juste avant le numéro du mois, appuyer sur Maj et sur la flèche gauche pour sélectionner et copier. Parfois, vous devez utiliser la souris pour sélectionner l'espace.
  3. Collez ensuite ceci comme espace dans rechercher et remplacer et toutes vos dates deviendront des dates.
  4. S'il existe un espace et une date Sélectionnez Données> Aller à Données> Texte en colonnes> Délimité> Espace en tant que séparateur, puis terminez.
  5. Tous les espaces seront supprimés.
1
JailDoctor

Je n'avais aucune chance avec toutes les suggestions ci-dessus - j'ai proposé une solution très simple qui fonctionne à merveille. Collez les données dans Google Sheets, mettez en surbrillance la colonne de date, cliquez sur format, puis sur numéro et numéro à nouveau pour le changer en format numérique. Je copie et colle ensuite les données dans la feuille de calcul Excel, clique sur les dates, puis formate les cellules à ce jour. Très rapide. J'espère que cela t'aides.

0
Mike

J'ai trouvé que CAST AS smalldatetime résout mon problème. Solution trouvée ici: https://social.msdn.Microsoft.com/Forums/sqlserver/en-US/f0f8dd05-4212-428f-8099-748e87c637ae/format-data-from-sql-server-view-view-as- date-in-excel? forum = sqlkjpowerpivotforexcel

Cela ne fonctionne bien entendu que si vous avez accès à la requête sous-jacente.

0
Spurious

Toutes les solutions ci-dessus - y compris les r0berts - ont échoué, mais ont trouvé cette solution bizarre qui s'est révélée être la solution la plus rapide.

J'essayais de trier les "dates" sur une feuille de calcul des transactions de compte téléchargée.

Cela avait été téléchargé via le navigateur CHROME. Aucune manipulation des "dates" ne les ferait reconnaître comme pouvant être triées de l’ancien au nouveau.

Mais ensuite, j'ai téléchargé via le navigateur Internet Explorer - incroyable - je pouvais trier instantanément sans toucher à une colonne.

Je ne peux pas expliquer pourquoi différents navigateurs affectent le formatage des données, à l'exception du fait que c'était clairement et était une solution très rapide.

0
Ros

Sélectionnez les dates et exécutez ce code dessus.

On Error Resume Next pour chaque xcell dans la sélection
xcell.Value = CDate (xcell.Value)
Next xcell
End Sub

0
Kathryn

J'ai pu résoudre le problème après avoir réalisé que l'option "Afficher les formules" était sélectionnée. Dans Excel 2016, accédez à Formules, puis à la section Audit de formules et assurez-vous que "Afficher les formules" n'est pas sélectionné. Correction de mon problème.

0
Donna

PARTAGE D'UNE SOLUTION UN PEU LONGUE MAIS PLUS FACILEMENT À L'OBJET ..... Pas besoin d'exécuter des macros ou des trucs geek ... .... simples formules MS Excel et l'édition.

dates mixtes Excel instantané:

 enter image description here

  • La date est au format mixte.
  • Par conséquent, pour créer un format de date symétrique, des colonnes supplémentaires ont été créées, convertissant cette colonne de date de format mixte en texte.
  • À partir de ce texte, nous avons identifié les positions de "/" et le texte du milieu a été extrait en déterminant la date, le mois et l'année à l'aide de la formule MID.
  • Ceux qui étaient à l’origine des dates, la formule s’est terminée par ERROR/#VALUE result. - Enfin, à partir de la chaîne que nous avons créée - nous avons converti celles-ci en dates par la formule DATE.
  • #VALUE ont été choisis tels quels par IFERROR ajouté à la formule DATE et la colonne a été formatée comme il convient (ici, jj/mmm/aa)

* CONSULTEZ L'INSTANTANÉ DE LA FEUILLE Excel CI-DESSUS (= instantané Excel à dates mixtes) *

0
Patsaeed

Si le problème était similaire, j'ai essayé de formater les données avec la date mais en vain. Ensuite, j'ai réalisé qu'il y avait un espace de premier plan dans la date, modifié le champ et supprimé l'espace - hé hop, tout va bien. Pas génial pour de grandes quantités de données, mais en y réfléchissant un peu plus, j'aurais peut-être pu vérifier et éditer les données dans Wordpad ou un éditeur similaire.

0
Mark Hogan

J'ai donc eu le même problème. Aucune des solutions ci-dessus n'a fonctionné pour moi ou je les ai trouvées trop complexes pour mon niveau de compétence.

Ce que j'ai fini par faire était de faire un texte en colonnes sur le séparateur de dates. J'ai ensuite utilisé la fonction date () pour recréer la date à l'aide des cellules jour, mois et année. Travaillé.

0
ibgb

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

0
Wally

Cela se produit tout le temps lors de l'échange de données de date entre des paramètres régionaux dans Excel. Si vous avez le contrôle sur le programme VBA qui exporte les données, je suggère d’exporter le nombre représentant la date au lieu de la date elle-même. Le nombre correspond de manière unique à une date unique, quels que soient le formatage et les paramètres régionaux. Par exemple, au lieu du fichier CSV du 24/09/2010, il indiquera 40445.

Dans la boucle d'exportation lorsque vous tenez chaque cellule, convertissez-la en nombre à l'aide de CLng (myDateValue), s'il s'agit d'une date. Voici un exemple de ma boucle parcourant toutes les lignes d'un tableau et exportée au format CSV (remarque: je remplace également les virgules dans les chaînes par une balise que je déshabille lors de l'importation, mais vous n'en avez 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
0
Mor Sagmon

Si Excel refuse obstinément de reconnaître votre colonne comme date, remplacez-la par une autre:

  • Ajouter une nouvelle colonne à droite de l'ancienne colonne
  • Cliquez avec le bouton droit sur la nouvelle colonne et sélectionnez Format
  • Définissez le format sur date
  • Mettez en surbrillance l'ancienne colonne entière et copiez-la
  • Mettez en surbrillance la cellule supérieure de la nouvelle colonne et sélectionnez Paste Special, puis collez uniquement values.
  • Vous pouvez maintenant supprimer l'ancienne colonne.
0
harrymc

Je viens tout simplement de copier le nombre 1 (un) et de le multiplier dans la colonne de date (données) à l'aide de la fonction PASTE SPECIAL. Il passe ensuite à Formater général i.e 42102 Ensuite, appliquez la date sur le formage et le reconnaît maintenant comme une date.

J'espère que cela t'aides

0
Mpho Sehlako

ce problème m'a fait presque casser mon ordinateur portable

pour résumer, j’ai eu un problème similaire: les dates fonctionnent parfaitement dans certaines cellules, mais je continue à en basculer dans d’autres, que je copie ou colle manuellement, j’ai fait tout le texte des données en solutions de formatage de colonnes et de ça marche pas.

la solution n'est en réalité pas dans Excel, c'est dans la région et le paramètre de langue .. je sais bien !!!

pour que les dates s'affichent sous la forme MM/JJ/AAAA dans l'onglet formats, remplacez le format par US.

pour que les dates s'affichent au format JJ/MM/AAAA dans l'onglet Formats, changez le format en UK

Voila!

0
Abdul Hammoude

J'ai eu le même problème, mais j'ai remarqué que j'avais un espace supplémentaire à la fin de la date. J'ai supprimé les espaces avec la commande Remplacer et maintenant le tri des dates fonctionne bien.

0
Martti

Ma solution au Royaume-Uni - J'avais mes dates avec des points comme ceux-ci:

03.01.17

J'ai résolu ceci avec ce qui suit:

  1. Mettez en surbrillance toute la colonne.
  2. Aller à trouver et sélectionner/remplacer.
  3. J'ai remplacé tous les arrêts complets par le tiret du milieu, par exemple le 03.01.17 au 03-01-17.
  4. Gardez la colonne en surbrillance.
  5. Mettre en forme les cellules, onglet numéro sélectionner la date.
  6. Utilisez le Type 14-03-12 (essentiel pour le mien d'avoir le tiret du milieu)
  7. Locale English (Royaume Uni)

Lors du tri de la colonne, toutes les dates de l'année sont triées.

0
Charlie

J'ai essayé les différentes suggestions, mais j'ai trouvé la solution la plus simple:.

Voir les images 1 et 2 pour l'exemple ... (remarque - certains champs ont été masqués intentionnellement car ils ne contribuent pas à l'exemple). J'espère que ça aide...

  1. Field C - un format mixte qui m'a rendu absolument fou. C'est ainsi que les données provenaient directement de la base de données et ne comportaient pas d'espaces supplémentaires ni de caractères fous. Lors de l'affichage sous forme de texte par exemple, le 01/01/2016 s'affiche sous la forme d'une valeur de type '42504', mélangée au 15/04/2006 qui s'affiche telle quelle.

  2. Champ F - où j'ai obtenu la longueur du champ C (la formule LEN serait une longueur de 5 sur 10 en fonction du format de la date). Le champ est Format général pour plus de simplicité.

  3. Champ G - obtenir le composant mois de la date mixte - en fonction du résultat de longueur dans le champ F (5 ou 10), j'obtiens le mois à partir de la valeur de date du champ C ou les caractères de mois dans la chaîne.

  4. Champ H - obtention du composant jour de la date mixte - en fonction du résultat de longueur dans le champ F (5 ou 10), j'obtiens le jour à partir de la valeur de date du champ C ou les caractères du jour dans la chaîne.

Je peux le faire aussi pour l’année, puis créer une date cohérente à partir des trois composantes. Sinon, je peux utiliser les valeurs individuelles des jours, mois et années dans mon analyse.

Image 1: feuille de calcul de base indiquant les valeurs et les noms de champs

Image 2: feuille de calcul montrant les formules correspondant à l'explication ci-dessus

J'espère que ça aide.

0
Eran