1 votes

Comment forcer Excel à traiter les dates d'un CSV comme du texte dans une macro ?

J'ai une macro qui permet à l'utilisateur de sélectionner un fichier CSV, puis de le manipuler. Cependant, elle traite les cellules qui contiennent des éléments tels que 1/2/12 comme une date. Je dois conserver ces chaînes de caractères comme du texte, et non comme des dates.

Je sais que je peux le faire en 1) démarrer une nouvelle feuille de calcul 2) importer le CSV au lieu de l'ouvrir. Définir la colonne contenant les dates comme "texte" et terminer.

La question est la suivante : comment puis-je interrompre Data > Import pour que l'utilisateur puisse sélectionner le fichier. Après cela, la macro doit continuer à définir le format des colonnes, terminer l'importation et effectuer les manipulations de données.

Modifier : Voici le code pertinent de la macro telle qu'elle se présente :

ChDir " C:\RoomTimerData\ "

MonFichier = Application.GetOpenFilename("Valeurs séparées par des virgules ( .csv), .csv")

Workbooks.Open fileName:=MyFile

0voto

Jook Points 1865

En général, on sélectionne le type de données pour chaque colonne importée à l'étape 3 sur 3 de la boîte de dialogue d'importation de texte. Pour éviter les erreurs de formatage, il suffit d'utiliser texte comme format, et vous êtes bon.

Cependant, vous semblez utiliser une macro VBA pour importer vos fichiers CSV. Donc j'ai juste enregistré un tel fichier non corrompu texte l'importation :

With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\test.csv", Destination:=Range("$A$1"))
    .Name = "test_1"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 850
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = True
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 1) 'THIS IS THE MAGIC LINE!
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

Regardez également cet exemple tiré de l'aide d'Excel pour TextFileColumnDataTypes :

Set shFirstQtr = Workbooks(1).Worksheets(1) 
Set qtQtrResults = shFirstQtr.QueryTables _
        .Add(Connection := "TEXT;C:\My Documents\19980331.txt", _
        Destination := shFirstQtr.Cells(1, 1))
With qtQtrResults
    .TextFileParseType = xlFixedWidth
    .TextFileFixedColumnWidths = Array(5, 4)
    .TextFileColumnDataTypes = _
        Array(xlTextFormat, xlSkipColumn, xlGeneralFormat)
    .Refresh
End With

Voici les formats que vous pouvez utiliser :

  • xlFormat général
  • xlTextFormat
  • xlSkipColumn
  • xlDMYFormat
  • xlDYMFormat
  • xlEMDFormat
  • xlMDYFormat
  • xlMYDFormat
  • xlYDMFormat
  • xlYMDFormat

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