Conversion txt en Excel

Bonjour,

J'ai le code suivant pour transformer un txt en xls.

Private Sub CommandButton1_Click()
Dim Fichier As Variant
    ChDir ThisWorkbook.Path
    Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If Fichier <> False Then
        Lire Fichier
    End If
End Sub

Function Lire(ByVal NomFichier As String)
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur  As String * 1
    '  Séparateur Tabulation
    Separateur = Chr(9)
    Cells.Clear
    NumFichier = FreeFile
    iRow = 1
    Open NomFichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
            iCol = 1
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                Cells(iRow, iCol) = Ar(i)
                iCol = iCol + 1
            Next
            iRow = iRow + 1
        Loop
    Close #NumFichier
End Function

Par contre, j'ai deux problèmes:

  • je n'arrive pas à faire en sorte que toutes les 15 colonnes, on passe à la ligne suivante dans excel...
  • sinon ce code marche mais quand il a fini il indique une erreur d'exécution '1004' : erreur définie par l'application ou par l'objet et surligne cette ligne: Cells(iRow, iCol) = Ar(i).

Auriez-vous des idées de solution concernant ces deux points s'il vous plaît?

Bonjour,

peux-tu nous mettre un exemple de ton fichier txt ?

21export-simplifie.txt (806.00 Octets)

Bonjour,

voici une proposition de correction, le code que tu as fourni suppose que chaque groupe de données est sur une ligne différente, or ton fichier contient une seule ligne avec tousles groupes de données les uns derrière les autres. un groupe est composé de 16 colonnes et non de 15.

Function Lire(ByVal NomFichier As String)
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur  As String * 1
    '  Séparateur Tabulation
   Separateur = Chr(9)
    Cells.Clear
    NumFichier = FreeFile
    iRow = 1
    Open NomFichier For Input As #NumFichier
            iCol = 1
            While Not EOF(1)
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                 Cells(iRow, iCol) = Ar(i)
                ' Cells(iRow, iCol) = Replace(Ar(i), """", "") 'pour enlever les " remplacer l'instruction précédente par celle-ci
                iCol = iCol + 1
                If iCol = 17 Then iCol = 1: iRow = iRow + 1
            Next
            Wend
    Close #NumFichier
End Function

C'est super! Merci beaucoup!

Cependant est-ce qu'on peut demander comme séparateur les "" et non pas la tabulation Chr(9)? Parce que il y a un moment dans le document txt complet où il y a plusieurs espaces mais qui qui doit appartenir à la même case dans le doc excel. Donc du coup dans le doc excel, actuellement, ça décalle tout d'une case...

bonjour,

voici le code adapté poour prendre en compte ce qui se trouve entre les guillemets comme étant une donnée

Function Lire(ByVal NomFichier As String)
    Dim Chaine As String
    Dim Ar() As String
    Dim i As Long
    Dim iRow As Long, iCol As Long
    Dim NumFichier As Integer
    Dim Separateur As String * 1
    '  Séparateur Tabulation
    Separateur = Chr(34) ' séparateur = "
    Cells.Clear
    NumFichier = FreeFile
    iRow = 1
    Open NomFichier For Input As #NumFichier
    iCol = 1
    While Not EOF(1)
        Line Input #NumFichier, Chaine
        Ar = Split(Chaine, Separateur)
        For i = LBound(Ar) + 1 To UBound(Ar) Step 2 'ne pas considérer les caractères précédant le premier" ni ceux suivant le second
            Cells(iRow, iCol) = Ar(i)
            iCol = iCol + 1
            If iCol = 17 Then iCol = 1: iRow = iRow + 1
        Next
    Wend
    Close #NumFichier
End Function

Merci beaucoup! Mais en fait j'avais pas vu mais il y a des guillemets dans les guillemets et ces guillemets ne sont donc pas à considérer comme des séparateurs donc c'est trop compliqué.

Une autre solution pourrait être envisagée: enregistrer le fichier initialement .txt (issu d'une base tierce) en .xls en rajoutant dans la boîte d'enregistrement .xls après le nom du fichier.

Mais quand je veux importer ce fichier dans un autre classeur (je suis sous Excel 2010), ça ne marche pas (aucune erreur dans le code n'est trouvée par l'ordinateur) alors que ça marche avec des fichiers que je fais moi-même à partir d'un nouveau document.

Je pense que le problème vient du fait que si j'ouvre le fichier transformé en .xls une erreur me dit: "impossible d'ouvrir le fichier ... car son format ou son extension n'est pas valide. vérifiez que le fichier ne s'est pas endommagé et que son extension correspond bien au format du fichier." Je clique alors sur OK et le document s'ouvre.

Tu as des idées de comment régler ce problème (je ne sais pas si je suis clair).

Bonjour,

tu peux ouvrir ton fichier txt sous excel, choisir l'extension txt.

Je comprends pas trop ta réponse...

Dans ma macro je peux faire ouvrir le fichier txt directement sous excel? Comment je fais stp? Je savais pas qu'on pouvait faire ça! (en même temps il y a pas mal de choses que je sais pas sous vba lol)

Bonjour,

je voulais dire

tu démarres excel

tu fais fichier-> ouvrir

tu choisis csv, txt, prn comme type de fichier

tu verras l'outil d'importation de fichier s'ouvrir

tu choisis délimitée, puis tab

si tu enregistres ces opérations tu auras ta macro.

J'y avais pas pensé. Je suis trop bête : tu es génial. Merci beaucoup!

Bonne continuation à toi et à bientôt peut-être!

Rechercher des sujets similaires à "conversion txt"