IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

convertir .txt en xls [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Août 2012
    Messages : 46
    Par défaut convertir .txt en xls
    Bonsoir tout le monde

    J'ai un petit soucis! Aidez moi svp! Je cherche à convertir un dossier contenant plusieurs fichier.txt en fichier.xls. J'ai repris le code réalisé par zebrou le lien ci après:

    http://www.developpez.net/forums/d11...lonne-listbox/

    Je vous mets ci-après le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Public Sub Convertion()
     
        Dim fd As FileDialog
        Dim repertoire As String
     
        Set fd = Application.FileDialog(msoFileDialogFolderPicker) 'création d'une boite de dialogue choix de répertoire
        fd.AllowMultiSelect = False 'on ne peut choisir qu'un seul repertoire
     
        If fd.Show = -1 Then 'l'utilisateur à valider sa selection
            repertoire = fd.SelectedItems(1) 'le repertoire choisi
            TransformerTousLesFichiers repertoire
        End If
     
    End Sub
     
    'Boucle sur tous les fichiers d'un répertoire
    Private Sub TransformerTousLesFichiers(ByVal repertoire As String)
        Dim fso As New FileSystemObject
        Dim fichier As File
     
        For Each fichier In fso.GetFolder(repertoire).Files 'pour chaque fichier du repertoire
            If Right(fichier.Name, 4) = ".txt" Then 'si c'est un fichier texte
                TransformerFichierTexteEnExcel fichier 'il effectue la transformation ci-dessous
            End If
        Next fichier
     
    End Sub
     
    'Ouvre un fichier texte, sépare chaque ligne par ses "tab" et le met dans un fichier excel qui porte le même nom
    Private Sub TransformerFichierTexteEnExcel(ByRef fichier As File)
        Dim wb As Workbook
        Dim ws As Worksheet
        Dim chemin As String
        Dim nomFichier As String
        Dim numFic As Integer
        Dim i, iCol, iRow As Long
        Dim ligneFichier As String
        Dim ligneFichierSplit() As String
        Dim separateur As String
     
        chemin = fichier.ParentFolder.Path 'le chemin du fichier texte
        nomFichier = fichier.Name 'le nom du fichier texte
        nomFichier = Left(nomFichier, Len(nomFichier) - 4) & ".xlsx" 'qu'on transforme en fichier excel
     
        Set wb = Application.Workbooks.Add 'on ouvre un nouveau classeur
        wb.SaveAs chemin & "\" & nomFichier 'qu'on sauve sous le bon nom
     
        Set ws = wb.Worksheets(1) 'la première feuille
     
        numFic = FreeFile
        separateur = ";"
        Open fichier.Path For Input As #numFic 'ouverture du fichier texte
     
        iRow = 1
     
        Do While Not EOF(numFic) 'tant que le fichier n'est pas parcouru en entier
            iCol = 1
     
            Line Input #numFic, ligneFichier 'on récupère la ligne suivante
            ligneFichierSplit = Split(ligneFichier, separateur) 'on sépare la ligne dans un tableau
     
            For i = LBound(ligneFichierSplit) To UBound(ligneFichierSplit) 'on copie le tableau
                ws.Cells(iRow, iCol) = ligneFichierSplit(i)
                iCol = iCol + 1
            Next
     
            iRow = iRow + 1
        Loop
     
        Close #numFic 'fermeture du fichier texte
     
        wb.Save 'sauvegarde du fichier excel
        wb.Close 'fermeture du fichier excel
     
    End Sub
    Avant ce code marcher très bien! Depuis il ne marche plus ^^! Je ne sais pas ce que j'ai fais ^^. Mes fichiers.txt se présentent comme dans la pièce jointe avec un séparateur ";" et mes fichiers.xlsx se présentent comme dans la pièce jointe qui tient compte du séparateur ";". Mais sur la deuxième colonne des fichiers.xlsx la virgule "," disparaît alors qu'il y en a une sur les fichiers.txt.

    Je vous remercie de votre aide et de votre patience!
    Images attachées Images attachées   

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonsoir,

    je ne comprends pas une telle usine à gaz car une seule ligne suffit à convertir un tel fichier ! (si version française)
    Voir par exemple dans cette discussion entre autres …

    Pour comprendre d'où vient le problème, exécuter le code en mode pas à pas (via la touche F8) …

    Sinon mettre un fichier .txt posant problème en pièce jointe.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Août 2012
    Messages : 46
    Par défaut
    Salut merci de ta réponse!

    Avec l'usine à gaz comme tu dis j'arrive à convertir mes fichiers.txt en fichiers.xls d'un dossier! Dans un fichier.txt (que je t'ai mis en pièce jointe) j'ai mes données qui se présentent sous la forme : 2,3335;12,2333333
    Avec le code je prends en compte le séparateur ";" comme un ajout d'une colonne!
    Ensuite quand j'ouvre le fichier.xls mes résultats 2,3335 et 1223333 sont séparés en deux colonnes! Mais le problème vient au niveau de la deuxième colonne le séparateur décimal n'y est plus et je ne comprends pas pourquoi...
    Je te remercie de ta patience et de ton aide!
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    En renommant le fichier en .csv, il est converti sans souci en une seule instruction
    comme dans le lien dans des versions françaises d'Excel …

    Le fichier .txt est aussi converti sans souci en une seule instruction via la méthode OpenText !

    Via l'Enregistreur de macros en ouvrant le fichier .txt manuellement en prenant soin
    de bien paramétrer la boîte de dialogue, le code est livré sur un plateau !

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Août 2012
    Messages : 46
    Par défaut
    Re,

    Ok je prends note! Est ce que je pourrais te passer mon tableur pour que tu puisses jeter un coup d'oeil stp! Cela m'aiderai bcp d'avoir un avis merci!

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut Heu …

    Je ne comprends pas, mon avis est juste d'utiliser une seule instruction pour convertir le fichier texte
    au lieu d'une quarantaine de lignes comme dans ton code …
    De mon côté cela fonctionne bien, sur des versions françaises …

    Mieux vaut d'abord exposer un problème précis et si nécessaire, on te demandera de joindre le classeur …

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Août 2012
    Messages : 46
    Par défaut
    Salut!

    Ui, j'ai modifié ma macro mais j'ai toujours le même soucis certains de mes séparateurs décimales (",") ne s'affichent pas. Je ne comprends pas. J'ai remplacé manuellement dans les fichiers.txt les virgules par des points puis j'exécute ma macro et tout s'affiche correctement dans Excel. J'ai donc changé la configuration des décimales dans windows mais bon ça ne modifie pas les fichiers.txt. J'ai donc essayé de remplacer les virgules par des points dans la macro mais cela fait la même chose il me vire des séparateurs... Je n'ai plus d'idées... Je pense que je perds de l'information car je copie/colle les données des .txt dans les cellules Excel. Je surcharge le presse papier. Si tu as d'autres conseils je suis preneur! Je te remercie

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Et pourquoi ne toujours pas avoir suivi l'astuce du lien soit avec la méthode Open soit avec la méthode OpenText,
    les deux fonctionnant avec ton fichier texte attaché, en prenant soin de lire l'aide VBA intégrée respective ?‼

    Et je ne vois pas ton code modifié s'en inspirant ! …

    Ou encore en utilisant l'Enregistreur de macros en ouvrant le fichier manuellement
    et en répondant bien aux étapes de l'Assistant Importation de texte, solution prenant 10 secondes garantie à 100% !

    Pour rappel, une seule instruction est nécessaire pour ouvrir et convertir un fichier texte
    au lieu de la quarantaine de lignes de ton code …

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Août 2012
    Messages : 46
    Par défaut
    Oups pardon! tiens je te le mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Public Sub Recup()
    Dim wbRecap As Workbook         'fichier recap
    Dim wsRecap As Worksheet        'feuille où on écrit les données
    Dim wbSource As Workbook        'fichier à ouvrir
    Dim wsSource As Worksheet       'feuille où on cherche les données
    Dim DernLign As Integer         'ligne où on écrit les données
    Dim vFichiers As Variant        'noms des fichiers
    Dim i As Integer, k As Integer
    Dim rgRecap As Range            'plage où on copie les données
     
    Set wbRecap = ThisWorkbook       'Fichier récapitulatif
    Set wsRecap = wbRecap.Sheets(1)  'on écrit dans la feuille 1 du fichier récapitulatif
     
    ' --- Ouvrir boite de dialogue pour sélectionner les fichiers à ouvrir
        vFichiers = Selectionner_Fichiers("Sélectionner les fichiers à compiler") 'Appel de Fonction pour ouvrir fichiers
     
    ' --- Vérifier qu'au moins un fichier à été sélectionné
    If Not IsArray(vFichiers) Then
            Debug.Print "Aucun fichier sélectionné."
            MsgBox "Erreur! Aucun/Mauvais fichier sélectionné."
    Exit Sub
    End If
    On Error Resume Next
     
        Application.ScreenUpdating = False
     
    ' --- Boucle à travers les fichiers
    For k = 1 To UBound(vFichiers)
            Application.StatusBar = ">> Lecture du fichier #" & k & "/" & UBound(vFichiers)
     Next
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ' C'est ici qu'on écrit les instructions
     
    Set wbSource = Workbooks.Open(vFichiers(1))                        'on ouvre le fichier
    Set wsSource = wbSource.Sheets(1)
     
    With wsSource
     
    wsSource.Range("A1:B1000").Copy
    wsRecap.Range("A1:B1000").PasteSpecial
    End With
     
    Set wbSource = Workbooks.Open(vFichiers(2))                        'on ouvre le fichier
    Set wsSource = wbSource.Sheets(1)
     
    With wsSource
    wsSource.Range("A1:B1000").Copy
    wsRecap.Range("D3:E5000").PasteSpecial
    End With
     
    Set wbSource = Workbooks.Open(vFichiers(3))                        'on ouvre le fichier
    Set wsSource = wbSource.Sheets(1)
     
    With wsSource
    wsSource.Range("A1:B1000").Copy
    wsRecap.Range("G3:H5000").PasteSpecial
     
    End With
            wbSource.Close              'fermer fichier
    Set wbSource = Nothing
     
     
     
     
        Application.ScreenUpdating = True
        Application.StatusBar = False
    End Sub
    Le début j'ouvre une boîte de dialogue qui me permet de sélectionner les 3 fichiers.txt ensuite je récupère la source. Merci

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Ne voyant rien de ressemblant à l'astuce de la discussion en lien - n'aurais donc tu pas suivi la solution ?‼ -
    merci de m'indiquer le numéro de la ligne en rapport …

    __________________________________________________________________________________________
    Lire … C'est s'investir ! (Marc L)

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Août 2012
    Messages : 46
    Par défaut
    Oui la Ligne 34! Si j'utilise un Workbooks.Open!

  12. #12
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bon ben pas étonnant que cela ne fonctionne pas vu que l'astuce de la discussion en lien n'y figure pas ‼
    Et pourtant c'est indiqué noir sur blanc …

    Avec la méthode Open fonctionnant telle quelle pour un fichier .csv,
    il faut passer pour un fichier .txt un autre paramètre indiqué dans son aide, encore faut-il la consulter ! …

    Quant à l'autre solution via la méthode OpenText,
    celle servie aussi sur un plateau via l'Enregistreur de macros (encore faut-il l'utiliser !),
    elle fonctionne telle quelle ‼

    What else ?!

    __________________________________________________________________________________________
    Il n'y a pas que les aigles qui atteignent les sommets, les escargots aussi mais ils en bavent !

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Août 2012
    Messages : 46
    Par défaut
    Donc ça donnerait un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set wbSource = Workbooks.OpenText vFichiers(1), Origin:=xlWindows,
            StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
    Merci! j'ai réussi même si j'ai galéré! Je ne comprends pas tout ^^!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Workbooks.OpenText vFichiers(1), Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
     
     Range("A1:B5000").Select
        Application.CutCopyMode = False
        Selection.Copy
        Application.WindowState = xlMinimized
        Windows("Calcul.xlsm").Activate
        Range("A3").Select
        ActiveSheet.Paste
    Merci pour ta patience^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir txt en xls en non délimité sous VBA
    Par damography dans le forum Excel
    Réponses: 2
    Dernier message: 03/05/2013, 15h44
  2. [BQY] Convertir BQY en XLS ?
    Par ViRouF dans le forum Autres langages
    Réponses: 3
    Dernier message: 22/09/2006, 17h40
  3. [Excel] Convertir un fichier xls en csv sous UNIX
    Par Tsuful dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/04/2006, 11h12
  4. [DBA] Chargement de données via txt ou xls
    Par divail dans le forum SQL
    Réponses: 4
    Dernier message: 08/03/2006, 10h07
  5. [VBA-E].txt vers .xls
    Par Empty_body dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/02/2006, 14h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo