Importer .txt et trier

Bonjour

Il y a quelque temps j'avais demandé de l'aide pour créer une macro qui importe plusieurs fichiers .txt

Je reviens vers vous car je n'arrive pas à faire ce que je veux.

Je voudrais qu'après avoir importé les fichiers, il me décompte les doubles et les ranges dans une feuille nommer recap.

Ce que je ne sais pas faire c'est rangé le résulta de la feuille étude dans la colonne AB de la feuille recap, le résulta de la feuille étude 2 dans la colonne CD de la feuille recap et ainsi de suite .

Autre chose je ne sais pas pourquoi j'ai un '1' qui traine la fin de la colonne B la ma feuille recape.

Je joins le fichier Excel et les fichier .txt que j'importe.

Cordialement;

Bob

Sub on_y_va()
    Dim Repertoire As FileDialog, monRepertoire As String
    Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
    Repertoire.Show
    If Repertoire.SelectedItems.Count > 0 Then
        monRepertoire = Repertoire.SelectedItems(1)
        aspirer monRepertoire
    Else
        MsgBox "Aucun Répertoire Sélectionné"
    End If
End Sub

Sub aspirer(ceRepertoire As String)

    Dim Fso, SourceFolder, SubFolder, fichier As Object
    Dim ws As Worksheet, wrecap As Worksheet

    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = Fso.GetFolder(ceRepertoire)

    ' boucle sur tous les fichiers du répertoire
    For Each fichier In SourceFolder.Files
        If Right(fichier.Name, 4) = ".txt" Then
            ' création feuille
            If Not FeuilleExiste(ThisWorkbook, fichier.Name) Then
                Sheets.Add
                ActiveSheet.Name = fichier.Name
                Set ws = ActiveSheet
            Else
                Sheets(fichier.Name).Select
                Cells.Clear
                Set ws = ActiveSheet
            End If

            N = FreeFile
            Open fichier For Input As #N

            i = 0
            Do While Not EOF(1)
                Line Input #N, contenu
                i = i + 1
                Cells(i, 1).Value = contenu
            Loop

            Close #N

        End If
    Next fichier

    ' appel récursif pour les sous-répertoires
    For Each SubFolder In SourceFolder.subfolders
        aspirer SubFolder.Path
    Next SubFolder

    ' Compter les doubles

Dim doub As Range
Dim table() As String
Dim flag As Boolean

    With ActiveSheet

    Set doub = .Range("A2")
    ReDim table(1 To 2, 1 To 1)
        table(1, 1) = doub
        table(2, 1) = 1

For i = 1 To .Columns(1).Find("*", , , , , xlPrevious).Row - 1
    flag = True
    For j = LBound(table, 2) To UBound(table, 2)
        If doub.Offset(i, 0) = table(1, j) Then
            table(2, j) = table(2, j) + 1
            flag = False
            Exit For
        End If
     Next j

    If flag Then
        ReDim Preserve table(1 To 2, 1 To (UBound(table, 2) + 1))

        table(1, UBound(table, 2)) = doub.Offset(i, 0)
        table(2, UBound(table, 2)) = 1
    End If

Next i

End With

 ' Ranger dans l'ordre

With Worksheets("recap")
    For i = LBound(table, 2) To UBound(table, 2)
        .Range("A2").Offset(i, 0) = table(1, i)
        .Range("A2").Offset(i, 1) = table(2, i)
    Next i
End With

Sheets("recap").Activate

    ' Création des titres colonne

With Worksheets("recap")
    Range("A1").EntireRow.Select

    For i = 1 To Sheets.Count
        ActiveCell.Value = Sheets(i).Name
        ActiveCell.Offset(0, 1).Select
    Next i
End With

Rows("3:33").Select
Selection.Sort Key1:=Range("A2")

ActiveCell.Select
End Sub

Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
    On Error Resume Next
    FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
End Function
Sub test()

Columns("A3:H3").Select
Selection.Sort Key1:=Range("A2")

ActiveCell.Select
End Sub
6etude-2.txt (5.39 Ko)
7etude-3.txt (5.09 Ko)
9etude.txt (5.55 Ko)
9liste.xlsm (42.59 Ko)

bonjour

Excel dispose d'une fonction spéciale pour ton sujet

pour ta version 2013 il faut télécharger

https://www.youtube.com/watch?v=gwW2CDdvUUs

tu mets tous tes txt dans un unique répertoire

puis dans ton Excel, tu ouvres PQuery

obtenir des données à partir d'un répertoire

et hop !

tu obtiens toutes tes données

il est assez facile de "nettoyer" les données dans PQuery

je te laisse regarder les multiples tutos sur Youtube

magique ! hyper puissant ! pas de code VBA !

amitiés

Bonsoir,

Oui ça a l'air pas mal mais je ne pense pas que se puissent correspondre à mes attentes car je ne suis pas le seul utilisateur du fichier, pour moi sa aurai suffi. mais après il n'y a pas mal de manipulation pour mettre en forme, je voulais que tout ce fasse pratiquement automatiquement. car le fichier sera régulièrement utilisé pour faire un décompte de matériel.

Cordialement,

Bob

Bonjour,

personne n'a une petite idée pour m'aider? Il faudrait juste qu'a chaque boucle sur les fichiers .txt on rajoute ce code:

With ActiveSheet

Set doub = .Range("A1")
ReDim table(1 To 2, 1 To 1)
table(1, 1) = doub
table(2, 1) = 1

For i = 1 To .Columns(1).Find("*", , , , , xlPrevious).Row - 1
    flag = True
    For j = LBound(table, 2) To UBound(table, 2)
        If doub.Offset(i, 0) = table(1, j) Then
            table(2, j) = table(2, j) + 1
            flag = False
            Exit For
        End If
     Next j

    If flag Then
        ReDim Preserve table(1 To 2, 1 To (UBound(table, 2) + 1))

        table(1, UBound(table, 2)) = doub.Offset(i, 0)
        table(2, UBound(table, 2)) = 1
    End If

Next i

End With

With Worksheets("recap")
    For i = LBound(table, 2) To UBound(table, 2)
        .Range("A2").Offset(i - 1, 0) = table(1, i)
        .Range("A2").Offset(i - 1, 1) = table(2, i)

    Next i
End With

Et que pour chaque boucle il décale le résultat de deux colonnes à droite. mais je n'arrive pas à le faire.

je rejoins mon fichier un peu modifié.

Cordialement,

Bob

Bonsoir,

Oui ça a l'air pas mal mais je ne pense pas que se puissent correspondre à mes attentes car je ne suis pas le seul utilisateur du fichier, pour moi sa aurai suffi. mais après il n'y a pas mal de manipulation pour mettre en forme, je voulais que tout ce fasse pratiquement automatiquement. car le fichier sera régulièrement utilisé pour faire un décompte de matériel.

Cordialement,

Bob

re

pour moi ce sont des raisons supplémentaires pour l'utilisation de PQuery

as-tu vu qu'il met en mémoire les manoeuvres ? et que l'utilisateur du fichier n'a qu'à cliquer "mettre à jour" pour tout mettre à jour, y compris les mises en forme (celles venant de PQuery) ?

pas besoin de VBA

note : les autres mises en forme, Excel s'en charge tout seul

pas besoin de VBA

amitiés

Bonjour,

Non je n'avais pas vu, ça c'est cool, mais par contre je galère aussi à faire ce que je veux, j'arrive bien à compter les doublons avec un seul fichier .txt, mais quand je veut le faire par répertoire je combine les fichiers, il se place à la suite mais je suis incapable de placer le fichier n°1 sur la colonne A le fichier n°2 sur la colonne 2, etc...

Cordialement,

Bob

Après j'ai presque réussi mon code mais il place mes cellules en biais ><

A oui aussi, je suis en office 2016, j'ai vue que c’était préinstallé de base maintenant.

re

concernant VBA, je passe la parole à d'autres ici, il y a de super spécialistes, que je salue au passage

concernant Power Query, il est bien plus puissant que nous le pensons (même moi qui l'adore )

et bien plus facile que VBA pour récupérer et transformer des données. C'est un des plus puissants ETL modernes.

si tu veux, joins 2 fichiers de données, et le résultat attendu. Je vais te faire une démo.

note : il semble que tu veuille faire une visu de données. Alors il FAUT apprendre Power BI Desktop gratuit. Depuis que je l'utilise, je ne fais plus du tout d'analyse de données ni de graphiques sous Excel !

note : tout est gratuit !

Power Query

Power BI Desktop

VBA

elle est pas belle la vie ?

amitiés

Bonjour,

Alors voila en gros ce que je veux sans mise en forme; - Le fichier excel

et les deux fichier .txt sont mes données, il peut y avoir plus de fichier .txt que deux.

Cordialement,

Bob

5liste.xlsm (27.36 Ko)
2etude-3.txt (4.50 Ko)
3polydal.txt (4.90 Ko)

re

voici

c'est une présentation un peu différente de la tienne, mais qui semble logique

1/ Power Query pour lire les 2 txt et les combiner

2/ un simple TCD

dès que tu modifies tes txt ou que tu ajoutes des txt, des milliers ! , il suffit d'actualiser la requête et le TCD

amitié

11classeur2.xlsx (37.47 Ko)

Bonjour,

je pense vraiment que je pourrais trouver mon bonheur, par contre j'ai l'impression qu'a chaque fois il faut que les fichiers portes le même nom quand on actualise? ou alors il peut faire par rapport à un répertoire de fichier .Txt ?

Cordialement;

Bob

re

par rapport à un répertoire contenant tous tes txt (quels que soient leurs noms)

https://www.myonlinetraininghub.com/power-query-get-files-from-a-folder

amitiés

Rechercher des sujets similaires à "importer txt trier"