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 :

Concaténation de fichiers


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 54
    Par défaut Concaténation de fichiers
    Bonjour à tous,
    Je dois concaténer 2 fichiers .txt puis les convertir en .xls l'un à la suite de l'autre. Pour cela j'ai crée le code ci-dessous :

    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
    Dim Rg As Range, K As Long
    Dim Nb As Long, Fichier As String
    Dim Ligne As String, C, X As Integer
    Nb = FreeFile
     
    Set Rg = ThisWorkbook.Worksheets("Feuil1").Range("A1")
     
    For a = 1 To 2 ' 2 pour 2 fichiers
    'Indique le chemin et le nom du fichier de chacun
    nom = Application.GetOpenFilename("Nom fichier,*.txt")
    Fichier = Choose(a, nom, nom)
    Open Fichier For Input As Nb
    Do While Not EOF(Nb)
    Line Input #Nb, Ligne
    'Remplacer VbTab par le séparateur
    'des fichiers texte ("," par exemple)
    C = Split(Ligne, ",")
    Rg.Offset(K).Resize(, UBound(C) + 1) = C
    K = K + 1
    Loop
    Close #Nb
    Next
    End Sub
    Cependant il faut que je rajoute un critère pour la séparation des colonnes qui correspond a ça quand je fait un enregistrement manuel de la conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nom = Application.GetOpenFilename("Nom fichier,*.txt")
    Workbooks.OpenText nom, _
            Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _
            , Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
            Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
            Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
            , 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), _
            Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1)), TrailingMinusNumbers:=True
    Le critère a ajouter est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextQualifier:= _ xlDoubleQuote,
    mais je n'arrive pas a l'insérer dans mon code. Merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Essaies (moi j'ai pas testé) en modifiant la ligne:
    Par:


    Ou alors supprime cette même ligne et place celle-ci après 'Close #nb'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Sheets("Feuil1").Columns("A").TextToColumns DataType:=xlDelimited, _
        semicolon:=True
    Je crois que ce sera plus rapide à l'exécution

    A+

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 54
    Par défaut
    Tout d'abord merci pour ton aide.
    Alors j'ai essayé de supprimer la ligne avec le Split et de la remplacer avec celle que tu m'as donné cependant ca ne fonctionne pas il me dit "Erreur exécution '13' : Incompatibilité de type" pour la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rg.Offset(K).Resize(, UBound(C) + 1) = C
    Pour ce qui est de ta proposition de changer la "," par un ";" ce n'est pas possible car la virgule est le bon critère de séparation des colonnes mais je voudrais rajouter en plus un autre critère que je ne sais pas comment interpréter avec du code VBA. J'ai fait un screenshot et l'ai mis en pièce jointe.

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Désolé pour le ',' et ';' j'ai pas été attentif, c'est par habitude du ';'

    L'erreur est "normale" cette ligne se réfère à C (je suis vraiment pas au point aujourd'hui ) donc supprime cette ligne aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rg.Offset(K).Resize(, UBound(C) + 1) = C
    Et en mettant cette ligne ci alors, les " étant les doublequote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Sheets("Feuil1").Columns("A").TextToColumns DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, semicolon:=True
    A+

  5. #5
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 54
    Par défaut
    Re,

    J'ai fait comme tu me l'as dit cependant j'ai toujours une erreur et cette fois ci sur la ligne que tu m'as donné. Il me dit "Erreur d'éxécution '1004' : Erreur définie par l'application ou l'objet".
    Merci beaucoup pour ton aide.

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Ce numéro d'erreur me fait penser que le nom de la feuille n'est pas correct, vérifie bien.


    A toute fin utile, voici un code que j'utilise pour récupérer des fichiers Txt de plus de 65000 lignes, il devrait fonctionner tel quel chez toi, la différence est qu'il crée autant de feuille que nécessaire et les renomme en DataX, DataY,...
    Le mieux serait que tu crées un nouveau classeur avec une seule feuille nommées Parametres et place ce code dedans.
    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
    Sub ImportTxtNew()
    Dim ligne As String, strFullName, i As Long, NbWs As Long
     
    Deb = Now()
     
        Worksheets.Add
        strFullName = Application.GetOpenFilename("Fichiers textes (*.txt),*.txt", , _
        "Sélectionnez un fichier :")
     
        Open strFullName For Input As #1
     
        Do While Not EOF(1)
                Do While (Not EOF(1)) And (i < 65500)
                    i = i + 1
                    Input #1, ligne
                    Cells(i, 1).Value = ligne
                Loop
            If i < 65500 Or EOF(1) Then Exit Do
                i = 0
                Worksheets.Add
        Loop
        Close #1
     
    'Renomme les feuilles avec les données
    NbWs = Worksheets.Count
    For i = 1 To NbWs - 1
        If Sheets(i).Name = "Parametres" Then Resume Next
        Sheets(i).Columns("A").TextToColumns DataType:=xlDelimited, _
        semicolon:=True
        Sheets(i).Name = "Data " & i
    Next i
     
    End Sub
    A+

Discussions similaires

  1. Concaténation de fichiers
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 29/09/2006, 10h57
  2. Concaténer deux fichiers binaires
    Par mickael.be dans le forum Delphi
    Réponses: 7
    Dernier message: 30/07/2006, 14h11
  3. concaténation de fichiers
    Par donmamio dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2006, 13h49
  4. [debutant] concaténation de fichiers
    Par Spyco dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 13/07/2005, 11h52
  5. Comment concaténer plusieurs fichiers en un ?
    Par souch dans le forum Langage
    Réponses: 16
    Dernier message: 14/12/2004, 19h58

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