web-dev-qa-db-fra.com

Empêcher Excel de convertir automatiquement certaines valeurs de texte en dates

Est-ce que quelqu'un sait s'il existe un jeton que je peux ajouter à mon CSV pour un certain champ afin qu'Excel n'essaye pas de le convertir en date?

J'essaie d'écrire un fichier .csv à partir de mon application et l'une des valeurs ressemble suffisamment à une date à laquelle Excel le convertit automatiquement d'un texte à une date. J'ai essayé de mettre tous mes champs de texte (y compris celui qui ressemble à une date) entre guillemets, mais cela n'a aucun effet.

488
user16324

J'ai trouvé que mettre un '=' avant les doubles guillemets fera ce que vous voulez. Cela force les données à être du texte.

par exemple. = "2008-10-03", = "plus de texte"

EDIT (selon d'autres publications) : à cause de le bogue d'Excel 2007 noté par Jeffiekins , il faut utiliser solution proposée par Andrew : "=""2008-10-03"""

342
Jarod Elliott

Je sais que c'est une vieille question, mais le problème ne va pas disparaître rapidement. Les fichiers CSV sont faciles à générer à partir de la plupart des langages de programmation, plutôt petits, lisibles par l'homme avec un éditeur de texte en clair et omniprésents.

Le problème n’est pas seulement avec les dates dans les champs de texte, mais tout ce qui est numérique obtient également converti du texte en chiffres. Quelques exemples où cela pose problème:

  • Codes postaux
  • numéros de téléphone
  • numéros d'identification du gouvernement

qui parfois peut commencer par un ou plusieurs zéros (0), qui sont jetés lorsqu’ils sont convertis en chiffres. Ou la valeur contient des caractères qui peuvent être confondus avec des opérateurs mathématiques (comme dans les dates: /, -).

Deux cas auxquels je peux penser que la solution "prepending =", comme mentionné précédemment, pourrait ne pas être idéale est

  • où le fichier peut être importé dans un programme autre que MS Excel (on pense à la fonction Fusion et publipostage de MS Word),
  • où la lisibilité humaine pourrait être importante.

Mon bidouillage pour contourner ce problème

Si on ajoute/ajoute un caractère non numérique et/ou non-date à la valeur, celle-ci sera reconnue comme texte et non convertie. Un caractère non imprimable serait utile car il ne modifiera pas la valeur affichée. Toutefois, l'ancien caractère d'espace brut (\ s, ASCII 32) ne fonctionne pas pour cela car il est découpé par Excel et la valeur est toujours convertie. Mais , il existe divers autres caractères d’espace d’impression ou non qui fonctionneront bien. Le plus simple consiste toutefois à ajouter (ajouter après) le caractère de tabulation simple (\ t, ASCII 9).

Avantages de cette approche:

  • Disponible au clavier ou avec un code ASCII facile à mémoriser (9),
  • Cela ne dérange pas l'importation,
  • Normalement ne gêne pas les résultats de Fusion et publipostage (en fonction de la présentation du modèle, mais ajoute normalement un grand espace en fin de ligne). (Si cela pose cependant un problème, examinez les autres caractères, par exemple l'espace de largeur nulle (ZWSP, Unicode U + 200B)
  • n’est pas un gros obstacle lors de la visualisation du fichier CSV dans le Bloc-notes (etc.),
  • et pourraient être supprimés par rechercher/remplacer dans Excel (ou Notepad, etc.).
  • Vous n'avez pas besoin d'importer le fichier CSV, mais vous pouvez simplement double-cliquer sur pour ouvrir le fichier CSV dans Excel.

S'il y a une raison pour laquelle vous ne souhaitez pas utiliser l'onglet, recherchez dans un tableau Unicode quelque chose d'autre qui convient.

Une autre option

il peut s’agir de générer des fichiers XML, pour lesquels un certain format est également accepté pour importation par les versions les plus récentes de MS Excel, et qui offre beaucoup plus d’options similaires au format .XLS, mais je n’ai pas d’expérience.

Donc, il y a différentes options. En fonction de vos exigences/applications, l'une pourrait être meilleure qu'une autre.


Une addition

Il faut dire que les versions les plus récentes (2013+) de MS Excel n'ouvrent plus le CSV sous forme de feuille de calcul - un ralentissement supplémentaire dans le flux de travail rendant Excel moins utile ... Au moins, des instructions existent pour le contourner. Voir par exemple ce Stackoverflow: Comment afficher correctement les fichiers .csv dans Excel 2013? .

141
fr13d

En travaillant à partir de la solution de Jarod et du problème soulevé par Jeffiekins, vous pouvez modifier

"May 16, 2011"

à

"=""May 16, 2011"""
99
Andrew Ferk

J'ai eu un problème similaire et c'est la solution de contournement qui m'a aidé sans avoir à modifier le contenu du fichier csv:

Si vous avez la possibilité de nommer le fichier autrement que ".csv", vous pouvez le nommer avec une extension ".txt", telle que "Myfile.txt" ou "Myfile.csv.txt". Ensuite, lorsque vous l'ouvrez dans Excel (pas par glisser-déposer, mais en utilisant Fichier-> Ouvrir ou la liste des fichiers les plus récemment utilisés), Excel vous fournira un "Assistant d'importation de texte".

Dans la première page de l'assistant, choisissez "Délimité" pour le type de fichier.

Dans la deuxième page de l'expert, choisissez "," comme délimiteur et choisissez également le qualificatif de texte si vous avez entouré vos valeurs de guillemets.

Dans la troisième page, sélectionnez chaque colonne individuellement et attribuez-leur le type "Texte" au lieu de "Général" pour empêcher Excel de modifier vos données.

J'espère que cela vous aide ou aide quelqu'un avec un problème similaire!

63
rainerbit

ATTENTION: Excel '07 (au moins) a un bogue a(nother): s'il y a une virgule dans le contenu d'un champ, il n'analyse pas correctement le = "champ, contenu", mais place tout après la virgule dans le champ suivant, quels que soient les guillemets.

La seule solution de contournement que j'ai trouvée qui fonctionne est d'éliminer le = lorsque le contenu du champ inclut une virgule.

Cela peut signifier que certains champs sont impossibles à représenter exactement "correctement" dans Excel, mais je suis convaincu que personne n'est trop surpris.

27
Jeffiekins

Lors de la création de la chaîne à écrire dans mon fichier CSV en C #, je devais la formater de la manière suivante:

"=\"" + myVariable + "\""
20
Colin Pear

Dans Excel 2010, ouvrez une nouvelle feuille. Sur le ruban de données, cliquez sur "Obtenir les données externes du texte". Sélectionnez votre fichier CSV puis cliquez sur "Ouvrir". Cliquez sur Suivant". Décochez "Tab", cochez la case "Virgule", puis cliquez sur "Suivant". Cliquez n'importe où sur la première colonne. Tout en maintenant la touche Maj enfoncée, faites glisser le curseur jusqu'à ce que vous puissiez cliquer dans la dernière colonne, puis relâchez la touche Maj. Cliquez sur le bouton radio "Texte" puis cliquez sur "Terminer"

Toutes les colonnes seront importées sous forme de texte, exactement comme dans le fichier CSV.

15
Rob Stockley

Reste un problème dans la version Microsoft Office 2016, plutôt inquiétant pour ceux d'entre nous qui travaillent avec des noms de gènes tels que MARC1, MARCH1, SEPT1, etc. La solution que j'ai trouvée la plus pratique après avoir généré un fichier ".csv" dans R, qui sera ensuite ouvert/partagé avec les utilisateurs Excel:

  1. Ouvrez le fichier CSV en tant que texte (bloc-notes)
  2. Copiez-le (ctrl + a, ctrl + c).
  3. Collez-le dans une nouvelle feuille Excel - tout sera collé dans une colonne sous forme de longues chaînes de texte.
  4. Choisissez/sélectionnez cette colonne.
  5. Allez dans Données- "Texte en colonnes ...", dans la fenêtre ouverte, choisissez "délimité" (suivant). Vérifiez que "virgule" est marqué (il indiquera déjà la séparation des données dans les colonnes ci-dessous) (suivant), dans cette fenêtre, vous pouvez choisir la colonne de votre choix et la marquer comme texte (au lieu de général) (Terminer).

HTH

12

Voici la méthode simple que nous utilisons à l’œuvre ici lors de la génération du fichier csv. Elle modifie un peu les valeurs et n’est donc pas adaptée à toutes les applications:

Ajouter un espace à toutes les valeurs du fichier csv

Excel va supprimer cet espace des chiffres tels que "1", "2.3" et "-2.9e4" mais restera à des dates telles que "01/10/1993" et des booléens comme "TRUE", les empêchant de les convertir en Les types de données internes d'Excel.

Il évite également que les guillemets ne soient zappés lors de la lecture. Un moyen infaillible de créer du texte dans un fichier csv reste donc inchangé par Excel. Même si un texte du type "3.1415" consiste à l’entourer de guillemets ET à précéder toute la chaîne d’un espace, c'est-à-dire (en utilisant des guillemets simples pour montrer ce que vous voudriez taper) '"3.1415"'. Ensuite, dans Excel, vous avez toujours la chaîne d'origine, sauf qu'elle est entourée de guillemets et précédée d'un espace. Vous devez donc en tenir compte dans les formules, etc.

10
Dan

C’est la seule façon pour moi de réaliser cela sans me gêner à l’intérieur du fichier. Comme d'habitude avec Excel, j'ai appris cela en frappant ma tête sur le bureau pendant des heures.

Modifier l'extension de fichier .csv en .txt; cela empêchera Excel de convertir automatiquement le fichier à son ouverture. Voici comment je le fais: ouvrez Excel dans une feuille de calcul vierge, fermez la feuille vierge, puis Fichier => Ouvrir et choisissez votre fichier avec l'extension .txt. Cela oblige Excel à ouvrir l '"Assistant d'importation de texte" où il vous posera des questions sur la manière dont vous souhaitez interpréter le fichier. Tout d'abord, vous choisissez votre délimiteur (virgule, tabulation, etc.), puis (voici la partie importante) vous choisissez un ensemble de colonnes de colonnes et sélectionnez la mise en forme. Si vous voulez exactement ce qu'il y a dans le fichier, choisissez "Texte" et Excel affichera juste ce qu'il y a entre les délimiteurs.

8
Chris

(En supposant qu'Excel 2003 ...)

Lorsque vous utilisez le texte en colonnes Wizard a, à l'étape 3, vous pouvez dicter le type de données pour chacune des colonnes. Cliquez sur la colonne dans l'aperçu et remplacez la colonne "Général" par "Texte".

8
DocMax

2018

La seule solution appropriée qui a fonctionné pour moi (et aussi sans modifier le CSV).

Excel 2010:

  1. Créer un nouveau classeur
  2. Données> Du texte> Sélectionnez votre fichier CSV
  3. Dans la popup, choisissez le bouton radio "Délimité", puis cliquez sur "Suivant>"
  4. Cases à cocher des délimiteurs: cochez seulement "Virgule" et décochez les autres options, puis cliquez sur "Suivant>"
  5. Dans l'aperçu des données, faites défiler vers la droite, maintenez la touche Maj enfoncée et cliquez sur la dernière colonne (toutes les colonnes seront sélectionnées). Maintenant, dans le "Format de données de colonne", sélectionnez le bouton radio "Texte", puis cliquez sur "Terminer".

Excel office365: (version client)

  1. Créer un nouveau classeur
  2. Données> À partir du texte/CSV> Sélectionnez votre fichier CSV
  3. Détection de type de données> ne pas détecter

Remarque: Excel office365 (version Web), au moment où j'écris ceci, vous ne pourrez pas le faire.

6
evilReiko

Aucune des solutions proposées ici n'est une bonne solution. Cela peut fonctionner pour des cas individuels, mais uniquement si vous contrôlez l'affichage final. Prenons mon exemple: mon travail produit une liste de produits qu’ils vendent au détail. Ceci est au format CSV et contient des codes de pièces, dont certains commencent par des zéros, définis par les fabricants (pas sous notre contrôle). Enlevez les zéros de tête et vous pourrez peut-être associer un autre produit. Les clients de détail veulent la liste au format CSV en raison de programmes de traitement back-end, qui sont également hors de notre contrôle et différents par client. Nous ne pouvons donc pas modifier le format des fichiers CSV. Pas de préfixe '=', ni d'onglets ajoutés. Les données contenues dans les fichiers CSV bruts sont correctes. c'est lorsque les clients ouvrent ces fichiers dans Excel que les problèmes commencent. Et beaucoup de clients ne sont pas vraiment férus d’informatique. Ils peuvent à peu près ouvrir et sauvegarder une pièce jointe à un courriel. Nous envisageons de fournir les données dans deux formats légèrement différents: l’un en tant que Excel Friendly (en utilisant les options suggérées ci-dessus en ajoutant une tabulation, l’autre en tant que "maître". Ce peut être un voeu pieux, car certains clients ne comprendront pas pourquoi. Entre-temps, nous continuons à expliquer pourquoi ils voient parfois des "données fausses" dans leurs feuilles de calcul. Jusqu'à ce que Microsoft apporte une modification appropriée, je ne vois aucune solution appropriée à ce problème, tant que l'on ne contrôle pas utiliser les fichiers.

4
mljm

(Excel 2007 et versions ultérieures)

Comment forcer Excel à ne pas "détecter" les formats de date sans éditer le fichier source

soit:

  • renommer le fichier en .txt
  • Si vous ne pouvez pas le faire, au lieu d’ouvrir le fichier CSV directement dans Excel, créez un nouveau classeur puis accédez à
    Data > Get external data > From Text
    et sélectionnez votre CSV.

Dans les deux cas, des options d’importation vous seront présentées. Il vous suffit de sélectionner chaque colonne contenant des dates et d’indiquer à Excel de formater en tant que "texte" et non "général".

4
Some_Guy

Ce que j'ai fait pour ce même problème a été d'ajouter ce qui suit avant chaque valeur csv: "=" "" et un guillemet double après chaque valeur CSV, avant d'ouvrir le fichier dans Excel. Prenez les valeurs suivantes par exemple:

012345,00198475

Ceux-ci doivent être modifiés avant d’ouvrir dans Excel pour:

"="""012345","="""00198475"

Ensuite, chaque valeur de cellule apparaît sous forme de formule dans Excel et ne sera donc pas formatée sous forme de nombre, de date, etc. Par exemple, une valeur de 012345 apparaît comme suit:

="012345"
3
ChrisB

Cette semaine, j’ai le droit de tomber sur cette convention, qui semble être une excellente approche, mais je ne la trouve nulle part référencée. Quelqu'un est-il au courant? Pouvez-vous citer une source pour cela? Je n'ai pas cherché depuis des heures et des heures, mais j'espère que quelqu'un reconnaîtra cette approche.

Exemple 1: = ("012345678905") s'affiche sous la forme 12345678905

Exemple 2: = ("1954-12-12") s'affiche sous la forme 1954-12-12, pas 12/12/1954.

3
GW4

Salut j'ai le même problème,

J'écris ce vbscipt pour créer un autre fichier CSV. Le nouveau fichier CSV aura un espace dans la police de chaque champ, donc Excel le comprendra sous forme de texte.

Vous créez donc un fichier .vbs avec le code ci-dessous (par exemple, Modify_CSV.vbs), enregistrez-le et fermez-le. Glisser-déposer votre fichier d'origine dans votre fichier vbscript. Il créera un nouveau fichier avec "SPACE_ADDED" pour le nom du fichier au même emplacement.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing
2
Harry Duong

Sans modifier votre fichier csv, vous pouvez:

  1. Changez l'option Excel Format Cells en "text"
  2. Ensuite, utilisez "Assistant d'importation de texte" pour définir les cellules csv.
  3. Une fois importé, effacez ces données
  4. puis il suffit de coller en texte brut

Excel formatera et séparera correctement vos cellules csv sous forme de texte en ignorant les formats de date automatiques.

C'est un peu ridicule, mais cela vaut mieux que de modifier les données CSV avant de les importer. Andy Baird et Richard ont en quelque sorte éludé cette méthode, mais ont manqué quelques étapes importantes.

2
cliffclof

Ce n'est pas l'Excel. Windows reconnaît la formule, les données en tant que date et les corrige automatiquement. Vous devez modifier les paramètres Windows.

"Panneau de configuration" (-> "Basculer vers l'affichage classique") -> "Options régionales et linguistiques" -> onglet "Options régionales" -> "Personnaliser ..." -> onglet "Nombres" -> puis modifier les symboles selon ce que vous voulez.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Cela fonctionnera sur votre ordinateur. Si ces paramètres ne sont pas modifiés, par exemple, sur l'ordinateur de vos clients, ils verront des dates au lieu de données.

2
syandras

Solution de contournement à l'aide de Google Drive (ou de Numbers si vous êtes sur un Mac):

  1. Ouvrez les données dans Excel
  2. Définissez le format de la colonne contenant des données incorrectes sur Texte (Format> Cellules> Nombre> Texte)
  3. Chargez le fichier .csv dans Google Drive et ouvrez-le avec Google Sheets
  4. Copier la colonne fautive
  5. Coller une colonne dans Excel sous forme de texte (Edition> Collage spécial> Texte)

Si vous utilisez un Mac pour l’étape 3, vous pouvez également ouvrir les données dans Numbers.

1
Derek Hill

(Excel 2016 et ultérieur, en fait je n'ai pas essayé dans les anciennes versions)

  1. Ouvrir une nouvelle page vierge
  2. Allez à l'onglet "Données"
  3. Cliquez sur "From Text/CSV" et choisissez votre fichier csv.
  4. Vérifiez en aperçu si vos données sont correctes.
  5. Dans le cas où une colonne est convertie en date, cliquez sur "modifier" puis sélectionnez le type de texte en cliquant sur le calendrier en tête de colonne
  6. Cliquez sur "Close & Load"
1
Roman Yakoviv

Dans mon cas, "Sept8" dans un fichier csv généré avec R a été converti en "8-Sept" par Excel 2013. Le problème a été résolu en utilisant la fonction write.xlsx2 () dans le package xlsx pour générer le fichier de sortie au format xlsx. , qui peut être chargé par Excel sans conversion indésirable. Ainsi, si vous recevez un fichier csv, vous pouvez essayer de le charger dans R et de le convertir en xlsx à l'aide de la fonction write.xlsx2 ().

1
Dinghai Zheng

Je sais que c'est un vieux fil. Pour ceux qui, comme moi, ont encore ce problème lors de l'utilisation de office 2013 via l'objet powershell com peuvent utiliser le méthode opentext . Le problème est que cette méthode a de nombreux arguments, qui sont parfois mutuellement exclusifs. Pour résoudre ce problème, vous pouvez utiliser la méthode invoke-namedparameter introduite dans this post . Un exemple serait

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

Malheureusement, je viens de découvrir que cette méthode casse l’analyse csv lorsque les cellules contiennent des sauts de ligne. Cela est supporté par csv mais l'implémentation de microsofts semble être boguée. En outre, il n'a pas détecté de caractères spécifiques à l'allemand. Le fait de lui donner la bonne culture n’a pas changé ce comportement. Tous les fichiers (csv et script) sont enregistrés avec le codage utf8. J'ai d'abord écrit le code suivant pour insérer le csv cellule par cellule.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

Mais c'est extrêmement lent, c'est pourquoi j'ai cherché une alternative. Apparemment, Excel vous permet de définir les valeurs d'une plage de cellules avec une matrice. J'ai donc utilisé l'algorithme dans ce blog pour transformer le csv en multi-tableau.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

Vous pouvez utiliser le code ci-dessus tel quel, il devrait convertir tout csv en Excel. Il suffit de changer le chemin d'accès au csv et au caractère de délimitation au bas.

1
flatbeat

Okay a trouvé un moyen simple de le faire dans Excel 2003 à 2007. Ouvrez un classeur xls vierge. Ensuite, allez dans le menu Données, importez des données externes. Sélectionnez votre fichier csv. Parcourez l'assistant puis, dans "Format de données de colonne", sélectionnez une colonne devant être forcée à "texte". Cela importera toute la colonne en tant que format de texte empêchant Excel d'essayer de traiter des cellules spécifiques comme une date.

0
Richard

SOLUTION LA PLUS FACILE Je viens de comprendre cela aujourd'hui.

  • Ouvrir dans Word
  • Remplacer tous les traits d'union par des tirets
  • Sauver et fermer
  • Ouvrir dans Excel

Une fois que vous avez terminé vos modifications, vous pouvez toujours les ouvrir à nouveau dans Word pour remplacer à nouveau les tirets en trait par des traits d'union.

0
Randy Hoffman

Coller le tableau dans Word. Effectuez une recherche/remplacement et changez tous les - (tirets) en - (double tiret). Copier et coller dans Excel. Peut faire la même chose pour d'autres symboles (/), etc. S'il est nécessaire de revenir à un tiret une fois dans Excel, formatez simplement la colonne en texte, puis apportez la modification. J'espère que cela t'aides.

0
Guest

Ce problème est toujours présent dans Mac Office 2011 et Office 2013, je ne peux pas l'empêcher de se produire. Cela semble une chose tellement fondamentale.

Dans mon cas, j'avais des valeurs telles que "1 - 2" et "7 - 12" dans le fichier CSV correctement insérées entre guillemets. Ceci convertit automatiquement une date dans Excel. Si vous essayez ensuite de le convertir en texte brut, vous obtiendrez une représentation numérique de la date, telle que 43768. De plus, il reformate les grands nombres trouvés dans les codes à barres et les numéros EAN en numéros 123E + qui ne peuvent pas être reconvertis.

J'ai constaté que Google Sheets de Google Drive ne convertissait pas les chiffres en dates. Les codes à barres comportent des virgules tous les 3 caractères, mais ils sont facilement supprimés. Il gère très bien les CSV, en particulier lorsqu'il s'agit de CSV MAC/Windows.

Peut sauver quelqu'un de temps en temps.

0
EricNo7

Je le fais pour les numéros de carte de crédit qui convertissent sans cesse en notation scientifique: je finis par importer mon fichier .csv dans Google Sheets. Les options d'importation permettent maintenant de désactiver le formatage automatique des valeurs numériques. Je règle toutes les colonnes sensibles en texte brut et les télécharge en tant que xlsx.

C'est un flux de travail épouvantable, mais au moins mes valeurs restent telles qu'elles devraient être.

0
Brendonwbrown

J'ai créé cette macro vba qui formate la plage de sortie en tant que texte avant de coller les nombres. Fonctionne parfaitement pour moi lorsque je veux coller des valeurs telles que 8/11, 23/6, 1/3, etc. sans qu'Excel les interprète comme des dates.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

Je suis très intéressé de savoir si cela fonctionne aussi pour d'autres personnes. Je cherchais une solution à ce problème depuis un moment, mais je n’avais jamais vu de solution rapide pour vba qui n'incluait pas l'insertion de 'devant le texte saisi. Ce code conserve les données dans leur forme originale.

0
LarsS