Comment puis-je configurer Excel pour qu'il importe toujours toutes les colonnes des fichiers CSV en tant que texte ?

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.