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 …
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
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