Extraction données txt

Bonsoir a tous

J'importe 1 fois par jour (manuellement pour l'instant) des données txt dans la feuille "import", dans ces données il y a la date.

Est-il possible de classer ces données dans la feuille correspondant au mois concerné et par jour ? (en sachant que mon fichier txt reprend les jours précédents a chaque

fois en ajoutant les données du jour).

j'ai fait un exemple en manuel !

Merci

Bonjour,

sans colonne pour la date …

Bonsoir Marc

Mes excuses, mauvais fichier

bonjour,

Sub Macro1()
'
' Macro1 Macro
'

'
    Columns("L:L").Select
    ActiveWorkbook.Worksheets("Import").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Import").Sort.SortFields.Add Key:=Range("L1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Import").Sort
        .SetRange Range("A2:Y440")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

tri de la colonne date dans import

Cdt

Didier

Bonjour et merci

je vais essayer cela, mais pourquoi "tri de la colonne date dans import". J'ai l'impression de m'être mal expliqué !!

excusez moi, je dois quitter pour aujourdhui

cdt

Bonjour

L'effet de la macro n'est pas celui que je recherche

Je souhaiterais une macro ou une formule qui selon la date en colonne L de la feuille import copie toutes les données qui ont cette même date, dans la feuille du mois ( si la date est 20.02.15 alors extraire toutes les données a cette date dans la feuille concernée, ici février), et tant que l'on ne change pas de mois on ajoute au fur et a mesure.

J'ai rempli le mois de février manuellement pour l'exemple souhaité (mais je suis ouvert a toute proposition)

Désolé de m'être ma exprimé

merci

bonjour,

je vais passer la main sur ce sujet cela dépasse mes competences

désolé Will60

CDt

Didier

Quelles sont les différences entre les deux classeurs joints ?!

Ensuite comment les données sont-elles importées vu le titre stipulant "txt" ?

Ne vaudrait-il pas mieux remonter à la source au lieu d'une usine post importation ?

Si le fichier texte comporte les données uniquement pour un mois …

Sinon manuellement il est déjà possible d'extraire les données d'un onglet à un autre via un filtre avancé et,

en activant le Générateur de macros, une base de code est livrée sur un plateau !

Bonsoir Marc L

merci de t'interesser a mon post.

Pour résumer simplement ce que je veux faire.

Tous les jours je crée un fichier "txt" des données de ma station météo (pas le choix du format)

Mon But

archiver ces données : par jour, par mois et par années pour créer des courbes mensuelles et annuelles

Pour les courbes je peu me débrouiller, mon problème c'est pour l'import et le classement par jour , mois et année.

On oubli le fichier excel que j'ai joint (nul a priori)

Je suis nul en excel et je ne connais pas les filtres élaborés

je joins 2 fichiers txt consécutifs tels qu'ils sont générés.

Si mon idée est trop "farfelue" dis le moi de suite et j'abandonne.

Merci de ton interêt et de ta compréhension.

Cdt

Ps : je ne serais pas dispo avant samedi

27250215.zip (9.39 Ko)
20260215.zip (10.85 Ko)

Les fichiers sont importés tels quels ou faut-il une mise en forme dans le classeur Excel ?

Joindre un exemple de ce classeur final …

Sinon j'ai un gros doute après avoir jeté un œil aux nouveaux fichiers joints : données en double ?!

Sinon des spécificités ? Bref avec un maximum d'informations …

Bonjour

je regarde cela demain, mais l'import ne pose pas de pb.

Ma démarche supposée que j'ai testée manuellement :

Ouvrir Excel puis Fichier ouvrir==> tous les fichiers , le fichier texte, puis suivre les dialogues proposés

Il faut transformer les . des dates en /

Un filtre sur la date à partir du nom du fichier==> une copie du résultat et coller dans le fichier recueil

Si la date est opérationnelle on peut supprimer toutes les lignes vides de la récap et utiliser les filtres

Je vais essayer de l'automatiser

Cordialement

FINDRH

Bonjour

Ci joint une proposition de récupération avec macro pour le jour donné du nom du fichier:

  • lancer avec Ctrl Maj T
  • rechercher et sélectionner le fichier à traiter dans l'explorateur en ayant choisi Tous les fichiers
  • Ouvrir puis, suivant, suivant jusqu'à l'écran qui propose de qualifier les variables : sélectionner dernière colonne et sélectionner date, ==> terminer
  • le fichier est bien formaté et recopié à la suite des données du mois concerné, après passage sur la feuille Trav

A tester

Cordialement

FINDRH

PS l'ouverture et le traitement peuvent être automatisés si le cchemin critique reste identique, si tous les fichiers sont dans le même dossier

Bonjour,

dans ta proposition contrôles-tu les doublons ?

Bonjour

J'ai suivi ta remarque de traitement en amont des données pour créer un fichier cohérent sans lignes vides ou incomplètes

je ne récupère que les données du jour du fichier si son nom est 260215 je en récupère que les données du 26 avec un filtre

Tu peux tester en mettant mon classeur et les deux fichiers txt dans le même dossier.

Un regard nouveau ne peut qu'améliorer la démarche

merci d’avance

Cordialement

FINDRH

As-tu remarqué dans le fichier du 26/2 le complément pour les données de la veille ?

Je tenterais une procédure plus globale …

La procédure traite toutes les données du fichier du jour et extrait un jour précis.... donc pas de doublon à ce niveau.

On peut parfaitement contrôler s'il n'y a pas déjà de données présentes pour ce jour, comme automatiser l’ouverture d'un fichier à partir d'une date saisie dans un inputbox.

Attendons de voir si cela correspond à une attente avant d'aller plus en avant dans la démarche

Cordialement

FINDRH

Les données d'une même journée pouvant se trouver sur deux fichiers distincts,

l'importation globale est retenue, l'utilisateur doit juste sélectionner un fichier !

Les colonnes Heure et Date sont concaténées en une colonne unique simplifiant la détection des doublons :

pas de souci si un fichier est importé une seconde fois ou si le fichier du 25 est importé après celui du 26 …

Pour tester cette démonstration, ouvrir un nouveau classeur avec une seule feuille sans besoin de la nommer

car la procédure s'en charge en indiquant le nom du fichier importé tout en créant les onglets mensuels …

Enregistrer le classeur par exemple dans le dossier des fichiers texte à importer dès l'intégration de ce code :

Sub Macro1()
Dim Rc As Range, Rg As Range, Rp As Range
P$ = ThisWorkbook.Path:  If P > "" Then ChDrive P: ChDir P
   FICHIER = Application.GetOpenFilename("Fichiers texte,*.txt", , "    Import  station  météo  :")
If FICHIER = False Then Exit Sub

With Feuil1
    .UsedRange.Clear
    .Cells(7).Value = "Import en cours …"
    Application.ScreenUpdating = False

    With .QueryTables.Add("TEXT;" & FICHIER, .Cells(2))
                .AdjustColumnWidth = False
                     .RefreshStyle = xlOverwriteCells
         .TextFileDecimalSeparator = ","
                .TextFileParseType = xlDelimited
                 .TextFilePlatform = 1252
             .TextFileTabDelimiter = True
            .TextFileTextQualifier = xlTextQualifierNone
         .Refresh False
         .Delete
    End With

    FICHIER = Split(FICHIER, "\"):  .Name = FICHIER(UBound(FICHIER))
    If .Cells(13).Value <> "Date" Then Beep: Exit Sub
       .Cells(14).Value = "Horodatage"
       .Cells(22).Value = "mois"

    With .Cells(2).CurrentRegion.Rows
        With .Columns(12)
             .Replace ".", "/", xlPart
             .AdvancedFilter xlFilterCopy, , .Parent.Cells(21), True
        End With

        With .Parent.Cells(3, 21).CurrentRegion.Offset(, 1)
             .FormulaR1C1 = "=TEXT(RC[-1],""mmm aaaa"")"
             .Offset(-2).Resize(.Rows.Count + 2).AdvancedFilter _
                         xlFilterCopy, , .Parent.Cells(19), True
             .Offset(-2, -1).Resize(.Rows.Count + 2, 2).Clear
        End With

        With .Cells(3, 13).Resize(.Count - 2)
             .NumberFormat = "dd/mm/yyyy   hh:mm"
              .FormulaR1C1 = "=RC[-2]+RC[-1]"
                  .Formula = .Value
        End With
               .Item(2).Delete
        .Columns("K:L").Delete
        .Columns.AutoFit
        .Item(1).HorizontalAlignment = xlCenter

        With .Item("2:" & .Count)
            With Union(.Columns("A:H"), .Columns(10))
                .HorizontalAlignment = xlRight
                        .IndentLevel = 2
                       .NumberFormat = "0.0"
            End With
             .Columns(7).IndentLevel = 1
             .Columns(9).HorizontalAlignment = xlCenter
        End With
                    Set Rg = .Columns
    End With

    For Each Rc In .Cells(3, 17).CurrentRegion
           E% = Evaluate("ISREF('" & Rc.Value & "'!A1)")
        If E = 0 Then Worksheets.Add(, Worksheets(Worksheets.Count)).Name = Rc.Value

        .Cells(2, 16).Formula = "=AND(ISERROR(MATCH(L2,'" & Rc.Value & _
                                "'!L:L,0)),TEXT(L2,""mmm aaaa"")=""" & Rc.Value & """)"
        With Worksheets(Rc.Value)
            R& = 1 - .UsedRange.Rows.Count * E
            Rg.AdvancedFilter xlFilterCopy, Feuil1.[P1:P2], .Cells(R, 2)
            If E Then .Rows(R).Delete Else R = 2: .UsedRange.Columns.AutoFit
            D$ = Format$(.Cells(R - 1, 12).Value, "dd/mm/yyyy")

            Do Until .Cells(R, 2).Value = ""
                                      P = D:  D = Format$(.Cells(R, 12).Value, "dd/mm/yyyy")
                If D <> P Then
                   .Rows(R).Resize(3).Insert xlShiftDown
                   With .Cells(R + 1, 7):  .HorizontalAlignment = xlCenter:  .Value = D:  End With
                End If

                Set Rp = .UsedRange.Columns(11).Find(D, .Cells(12), xlValues, xlPart, , xlPrevious)
                 If Rp Is Nothing Then Exit Do Else R = Rp.Row + 1
            Loop

            If E = 0 Then
                        .UsedRange.Rows(1).Interior.ColorIndex = 35
                .Cells(3, 1).Select:  ActiveWindow.FreezePanes = True
            End If
        End With
    Next
            .Cells(16).CurrentRegion.Clear
End With
            Set Rg = Nothing:  Set Rp = Nothing
End Sub

Il y a différentes possibilités pour lire un fichier texte et comme souvent le plus efficace est d'utiliser

formules et procédures de feuille de calculs, l'importation est toujours effectuée comme dans les classeurs joints

via une QueryTable dans la première feuille de calculs avant la répartition vers les onglets mensuels grâce au filtre avancé,

permettant donc un contrôle visuel des données chargées puis leur affectation …

Le code aurait été simplifié sans cette satanée ligne séparant chaque date dans les onglets mensuels !

Bonjour FINDRH et Marc L

Merci beaucoup a vous deux d'avoir bosser sur mon sujet.

Marc quelle est la "satanée ligne" qui gêne ?

si cela vous arrange on peut la virer ou faire autrement peut-être !, je n'ai rien de fixé pour l'instant.

cdt

Non, ce sont toutes les lignes de date séparant chaque journée ! Mais j'ai fait avec …

Attention, je viens de modifier le code afin de le rendre un poil plus efficace …

Bonjour

je test et vous tiens au courant

Rechercher des sujets similaires à "extraction donnees txt"