Comment puis-je configurer Excel pour qu’il importe toujours toutes les colonnes des fichiers CSV en tant que texte ?
Ceci fonctionne :
Sub OpenCsvAsText(ByVal strFilepath As String)
Dim intFileNo As Integer
Dim iCol As Long
Dim nCol As Long
Dim strLine As String
Dim varColumnFormat As Variant
Dim varTemp As Variant
'// Read first line of file to figure out how many columns there are
intFileNo = FreeFile()
Open strFilepath For Input As #intFileNo
Line Input #intFileNo, strLine
Close #intFileNo
varTemp = Split(strLine, ",")
nCol = UBound(varTemp) + 1
'// Prepare description of column format
ReDim varColumnFormat(0 To nCol - 1)
For iCol = 1 To nCol
varColumnFormat(iCol - 1) = Array(iCol, xlTextFormat)
' What's this? See VBA help for OpenText method (FieldInfo argument).
Next iCol
'// Open the file using the specified column formats
Workbooks.OpenText _
Filename:=strFilepath, _
DataType:=xlDelimited, _
ConsecutiveDelimiter:=False, Comma:=True, _
FieldInfo:=varColumnFormat
End Sub
Utilisation :
OpenCsvAsText "C:\MyDir\MyFile.txt"
Le fichier délimité par des virgules est maintenant ouvert en tant que feuille Excel avec toutes les colonnes formatées en texte.
Notez que la solution avec l’assistant de @Wetmelon fonctionne très bien, mais si vous ouvrez de nombreux fichiers, vous pourriez, comme moi, vous lasser de devoir, à chaque fois, faire défiler jusqu’à la colonne 60 pour faire un Maj+Clic dessus.
MODIFICATION @GSerg indique dans le commentaire ci-dessous que cela « ne fonctionne pas » et « supprime les espaces et les zéros initiaux ». Je vais simplement citer le commentaire de la question, qui est plus descriptif :
Pour des raisons inconnues, même si vous fournissez explicitement des formats pour toutes les colonnes en VBA, Excel les ignorera si l’extension du fichier est CSV. Dès que vous changez l’extension, ce même code produira les résultats corrects.
Donc le code ci-dessus « fonctionne », mais est saboté par ce comportement ridicule d’Excel. Quelle que soit la manière dont vous abordez le problème, vous êtes obligé de changer l’extension en autre chose que « .csv », désolé ! Après cela, c’est tout bon.