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 :

Copie d'une partie d'un fichier Txt dans Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    assistant contrôle de gestion
    Inscrit en
    Octobre 2013
    Messages
    208
    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 : 208
    Points : 68
    Points
    68
    Par défaut Copie d'une partie d'un fichier Txt dans Excel
    Bonjour

    Je débute en VBA, je Souhaite consolider des fichiers TXT avec ce code, mais j'ai besoin de ne pas prendre en compte les 2 premières lignes et la dernière de chaque fichier texte, je n'arrive pas à trouver la syntaxe pour faire cela.

    Voici une copie d'écran du fichier Txt d'origine

    Nom : Txt.jpg
Affichages : 798
Taille : 116,8 Ko

    Pourriez vous m'aider a avancer.

    Merci d'avance

    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
    Sub Test()
        Dim Fichier As String, Chemin As String
        Dim DernLigne As Long
        Dim Derlig As Long
        Dim i As Long
     
        'Répertoire contenant les fichiers
        Chemin = ThisWorkbook.Path
        Fichier = Dir(Chemin & "\*.txt")
     
        'Boucle sur les fichiers
        Do While Fichier <> ""
     
            i = Range("A65536").End(xlUp).Row + 1
            DernLigne = Range("A65536").End(xlUp).Row + 1
            ImportText Chemin & "\" & Fichier, Cells(DernLigne, 1)
     
            Fichier = Dir
        Loop
    End Sub
     
    Sub ImportText(NomFichier As Variant, Cible As Range)
        Dim QT As QueryTable
     
        Set QT = ActiveSheet.QueryTables.Add(Connection:="TEXT;" & _
            NomFichier, Destination:=Cible)
     
        With QT
            'Définit les séparateur de colonnes dans le fichier txt
            .TextFileOtherDelimiter = ";"
            .TextFileSemicolonDelimiter = True
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .Refresh
        End With
    End Sub

  2. #2
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    en important directement le texte en mémoire dans une variable tableau,
    un indice de ce tableau correspondant à une ligne du fichier texte …

    Exemple des lignes de code n°4 à 7 de cette discussion.

    Ne pas oublier :   tout étant déjà dans l'aide VBA interne !

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Au lieu d'utiliser des Query, tu ouvres simplement ton texte sous forme de fichier Excel avec un OpenText en indiquant que le délimiteur est le point-virgule.
    https://msdn.microsoft.com/fr-fr/lib.../ff837097.aspx

    A partir de là, tout devient plus simple pour traiter chaque lignes.
    Par exemple, tu peux faire une boucle For To sur le numéro de ligne commençant à 3 et finissant à Range("A1").End(xlDown).Row - 1.

  4. #4
    Membre du Club
    Homme Profil pro
    assistant contrôle de gestion
    Inscrit en
    Octobre 2013
    Messages
    208
    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 : 208
    Points : 68
    Points
    68
    Par défaut
    J'essaie d'utiliser ce code sinon :

    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 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(Filename:=Fichiers(i), local:=True)
     
            'Feuille à copier
           With Wb.ActiveSheet.Name
                'dernière ligne du fichier source
                dlSource = .Cells(.Rows.Count, 1).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
    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

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par phoenix974 Voir le message
    J'essaie d'utiliser ce code sinon :
    D'où viennent ces codes ?
    C'est toi qui les as développé ou est-ce que tu as simplement copier/coller ça d'Internet en imaginant que ça marchera pour ton cas ?

    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
    La propriété Name de l'objet Worksheet étant une simple donnée de type String, on ne peut pas lui appliquer une propriété Cells.

Discussions similaires

  1. Macro Copie d'un fichier TXT dans Excel
    Par liner77 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/03/2017, 13h29
  2. [WD19] extraire une partie d'un fichier txt dans un fichier hfsql
    Par nordinen dans le forum WinDev
    Réponses: 12
    Dernier message: 26/09/2015, 21h49
  3. Réponses: 1
    Dernier message: 08/10/2014, 10h23
  4. copier une partie d'un fichier texte dans un autre
    Par Valarauko dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/10/2007, 21h17
  5. [VB6]Lire une partie d'un fichier .txt
    Par patoch76 dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 02/05/2006, 20h49

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