1. #1
    Membre du Club
    Homme Profil pro
    assistant contrôle de gestion
    Inscrit en
    octobre 2013
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant contrôle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 205
    Points : 64
    Points
    64

    Par défaut Consolidation et conversion en boucle fichier Txt dans Excel

    Bonjour à tous

    Je souhaites via un code VBA aller sélectionner des fichiers .txt et qu'ils soient convertis et consolidés dans un même onglets sachant que le séparateur des fichier .txt est ";"

    Je n'arrive pas à trouver comment intergrer ce code permettant de convertir mes fichiers Txt avec un separateur ";" au reste du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Workbooks.OpenText Filename:=Fichiers(i), Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Semicolon:=True
    Voici le reste du 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
    Sub Importer()
        Dim dlDest As Long, dlSource As Long, dlgR As Long, i As Long
        Dim Chemin As String
        Dim fichier As Variant, Fichiers As Variant
        Dim Wb As Workbook
     
        Application.ScreenUpdating = False
     
    'efface les données de l'onglet DATA de la colonne A a la colonne AF sauf la premiere ligne
    With ThisWorkbook.Sheets("Data")
        dlgR = .Range("A" & Rows.Count).End(xlUp).Row
        .Range("A2:AF" & dlgR).ClearContents
    End With
     
        'Ouvre exploreur et permet aux utilisateur de selectionner les fichiers Excel a consolider
        ChDir ThisWorkbook.Path
        Fichiers = Application.GetOpenFilename("Text Files (*.txt),*.txt", MultiSelect:=True)
        'Si aucun fichier n'est selectionné, on arrete le code
        If Not IsArray(Fichiers) Then Exit Sub
        'Pour chaque fichier selectionné
     
       For i = 1 To UBound(Fichiers)
     
            dlDest = ThisWorkbook.Sheets("Data").Cells(Rows.Count, "A").End(xlUp).Row + 1 '1ere ligne vide
            'On definit Wb qui ouvre le fichier selectionne
        '    Set Wb = Workbooks.Open(Fichiers(i))
     
            Set Wb = Workbooks.Open(Fichiers(i))
                      Workbooks.OpenText Filename:=Fichiers(i), Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Semicolon:=True
     
     
            ', Origin:=xlWindows, _
            'StartRow:=1, DataType:=xlDelimited, Semicolon:=True
            'Feuille à copier
           With Wb.ActiveSheet.Name
                'dernière ligne du fichier source
                dlSource = .Cells(.Rows.Count, "A").End(xlUp).Row
                'Copier vers la 1ere ligne non vide de la feuille Data du fichier de consolidation
                .Range("A2:AF" & dlSource).Copy ThisWorkbook.Sheets("Data").Range("A" & dlDest)
          End With
            'On ferme le fichier source ouvert
            Wb.Close False
        Next
     
        Application.ScreenUpdating = True
     
    End Sub
    J'ai utilisé ce code mais il y a peut être d'autres solutions, je débute dans le VBA.

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Inscrit en
    octobre 2010
    Messages
    1 325
    Détails du profil
    Informations forums :
    Inscription : octobre 2010
    Messages : 1 325
    Points : 2 522
    Points
    2 522

    Par défaut

    Bonour.

    Fais un test avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Wb = Workbooks.Open(Filename:=Fichiers(i), local:=True)
    Cordialement

    Docmarti.

  3. #3
    Membre du Club
    Homme Profil pro
    assistant contrôle de gestion
    Inscrit en
    octobre 2013
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant contrôle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 205
    Points : 64
    Points
    64

    Par défaut

    Ca à l'air de fonctionner mais j'ai une erreur 424 Objet requis sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                dlSource = .Cells(.Rows.Count, 1).End(xlUp).Row

  4. #4
    Membre émérite
    Inscrit en
    octobre 2010
    Messages
    1 325
    Détails du profil
    Informations forums :
    Inscription : octobre 2010
    Messages : 1 325
    Points : 2 522
    Points
    2 522

    Par défaut

    Ce n'est pas le nom de l'objet feuille qui t'interesse, mais l'objet feuille lui-meme.

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Wb.ActiveSheet.Name
    par
    Cordialement

    Docmarti.

  5. #5
    Membre du Club
    Homme Profil pro
    assistant contrôle de gestion
    Inscrit en
    octobre 2013
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant contrôle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 205
    Points : 64
    Points
    64

    Par défaut

    Merci pour la précision.

    Voici le code modifié qui fonctionne cette fois.

    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
    Sub Importer()
        Dim dlDest As Long, dlSource As Long, dlgR As Long, i As Long
        Dim Chemin As String
        Dim Fichier As Variant, Fichiers As Variant
        Dim Wb As Workbook
     
        Application.ScreenUpdating = False
     
    'efface les données de l'onglet GLOBAL de la colonne A a la colonne AF sauf la premiere ligne
    With ThisWorkbook.Sheets("GLOBAL")
        dlgR = .Range("A" & Rows.Count).End(xlUp).Row
        .Range("A2:AF" & dlgR).ClearContents
    End With
     
        'Ouvre exploreur et permet aux utilisateur de selectionner les fichiers Excel a consolider
        ChDir ThisWorkbook.Path
        Fichiers = Application.GetOpenFilename("Text Files (*.txt),*.txt", MultiSelect:=True)
     
        'Si aucun fichier n'est selectionné, on arrete le code
        If Not IsArray(Fichiers) Then Exit Sub
     
        'Pour chaque fichier selectionné
        For i = 1 To UBound(Fichiers)
     
        dlDest = ThisWorkbook.Sheets("GLOBAL").Cells(Rows.Count, "A").End(xlUp).Row + 1 '1ere ligne vide
     
        'On definit Wb qui ouvre le fichier selectionne
         Set Wb = Workbooks.Open(Filename:=Fichiers(i), local:=True)
     
            'Feuille à copier
           With Wb.ActiveSheet
                'dernière ligne du fichier source
                dlSource = .Cells(.Rows.Count, 1).End(xlUp).Row - 6
                'Copier vers la 1ere ligne non vide de la feuille GLOBAL du fichier de consolidation
                .Range("A3:AF" & dlSource).Copy ThisWorkbook.Sheets("GLOBAL").Range("A" & dlDest)
          End With
            'On ferme le fichier source ouvert
            Wb.Close False
        Next
     
        Application.ScreenUpdating = True
     
    End Sub

  6. #6
    Membre du Club
    Homme Profil pro
    assistant contrôle de gestion
    Inscrit en
    octobre 2013
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant contrôle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 205
    Points : 64
    Points
    64

    Par défaut

    Si je veux qu'il explore tous les fichiers txt du dossier, je dois juste remplacer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        'Ouvre exploreur et permet aux utilisateurs de sélectionner les fichiers Excel à consolider
        ChDir ThisWorkbook.Path
        Fichiers = Application.GetOpenFilename("Text Files (*.txt),*.txt", MultiSelect:=True)
    par: ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         'Répertoire contenant les fichiers
        Chemin = ThisWorkbook.Path
        Fichiers = Dir(Chemin & "\*.txt")

  7. #7
    Membre émérite
    Inscrit en
    octobre 2010
    Messages
    1 325
    Détails du profil
    Informations forums :
    Inscription : octobre 2010
    Messages : 1 325
    Points : 2 522
    Points
    2 522

    Par défaut

    Regarde "Comment boucler sur les fichiers d'un répertoire ?" dans cette page de la FAQ
    Cordialement

    Docmarti.

  8. #8
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    juin 2006
    Messages
    5 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : juin 2006
    Messages : 5 424
    Points : 14 001
    Points
    14 001

    Par défaut

    Salut, à adapter à ton contexte
    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
    Option Explicit
     
    Sub FusionTXTs()
    Dim FSO As Object
    Dim SourceFolder As Object, OutputFile As Object
    Dim File As Object, TextFile As Object, sFusionTXTs As String
    Dim sText As String, sNomFichier As String, sDossierTxt As String
    Const ForReading = 1
     
        sDossierTxt = "....."
        sFusionTXTs = "....."
        sNomFichier = "....."
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set SourceFolder = FSO.GetFolder(sDossierTxt)
        Set OutputFile = FSO.CreateTextFile(sNomFichier)
     
        For Each File In SourceFolder.Files
            Set TextFile = FSO.OpenTextFile(File, ForReading)
            sText = TextFile.ReadAll
            TextFile.Close
            OutputFile.WriteLine sText
        Next File
        OutputFile.Close
     
        Set OutputFile = Nothing
        Set SourceFolder = Nothing
        Set FSO = Nothing
    End Sub
    Pensez à Voter, d'avance merci. @+ Philippe
    Balisez votre code après l'avoir indenté sous Excel (< 2013) via Smart Indenter
    Autres utilitaires : MZ Tools 8.0 VBA , 7Zip et Antidote

    Liste des Contributions : Manipulations des PDF via Excel / Acrobat / PDFCreator / xPDF

  9. #9
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 824
    Points : 7 793
    Points
    7 793
    Billets dans le blog
    17
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  10. #10
    Membre expert
    Avatar de dysorthographie
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2016
    Messages
    2 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2016
    Messages : 2 085
    Points : 3 547
    Points
    3 547
    Billets dans le blog
    1
    Il dit non avec la tête
    mais il dit oui avec le coeur
    il dit oui à ce qu’il aime
    il dit non au professeur {Jacques PRÉVERT}

Discussions similaires

  1. [XL-2010] Consolidation et conversion en boucle fichier Txt dans Excel
    Par phoenix974 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/10/2017, 02h20
  2. Ouverture fichier txt dans excel date 10/01/2007 au lieu de 01/10/2007
    Par megapacman dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/10/2007, 14h14
  3. importer un fichier txt dans excel
    Par rm34000 dans le forum Excel
    Réponses: 2
    Dernier message: 03/09/2007, 09h12
  4. Réponses: 2
    Dernier message: 26/01/2007, 14h58
  5. [VBA-Excel] Ouvrir un lot de fichier txt dans Excel
    Par Trollakuir dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/06/2006, 10h02

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