Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Extraction et trie de données

Fb76

XLDnaute Nouveau
Bonjour,

Je souhaite réaliser une macro pour extraire des données de fichiers log au format .txt
Le fichier .txt liste différents paramètres toutes les 2 secondes qui terminent par une balise (ici <CR><LF>)
Ceux ci sont mis en forme, avec le nom du paramètre suivis de sa valeur, séparé par " : "
Jusqu'ici ça va, j'ai réussi avec l'enregistrement de macro à créer une transformation, puis a copier les noms de chaque paramètre dans une deuxième feuille, en en-tête de colonne.
Pour cela je parcours le premier "log" et je récupère les noms, que je colle dans la deuxième feuille, à la 1ere ligne jusqu'à rencontrer la balise <CR><LF>

Sheets("txt").Select
Range("A1").Select
Selection.Copy
Sheets("données").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("txt").Select
ActiveCell.Offset(1, 0).Select

Do Until ActiveCell = "<CR><LF>"

Application.CutCopyMode = False
Selection.Copy
Sheets("données").Select
ActiveCell.Offset(0, 1).Select
ActiveSheet.Paste
Sheets("txt").Select
ActiveCell.Offset(1, 0).Select

Loop


Maintenant j'aurai souhaité récupérer les valeurs associées à chaque paramètre, et les remettre en colonnes dans la deuxième feuille.
les soucis :
les noms de paramètres peuvent changer entre 2 logs (mais reste les même dans un log donné)
De même, le nombre de paramètres peux changer entre deux logs
La durée du log est très variable, de quelques minutes (donc quelques centaines de ligne) à quelques heures (plusieurs milliers de lignes).

Je pensais parcourir la première colonne, et copier ensuite les valeurs de la deuxième au bon endroit... mais pas évident...
Pour l'instant j'utilise la fonction 'filtre' : je choisi un paramètre, et copie/colle l'ensemble de la plage affichée. Mais cela peut vite devenir fastidieux.

Il me restera une mise en forme a faire ensuite (retirer les unités si il y en a entre autre) pour pouvoir tracer des graphiques.

Une idée?
 

Pièces jointes

  • exemple.xlsx
    10.3 KB · Affichages: 22

JBARBE

XLDnaute Barbatruc
Re,
Si une référence n'est pas trouvée dans la ligne 1 de la feuille "données " un message s'affiche indiquant et sélectionnant la référence de la cellule de la feuille " txt " mit en cause !
Après avoir fait le rectificatif dans la feuille " données " ligne 1, il est nécessaire de recliquer sur le bouton GO !
Bonne journée !
 

Pièces jointes

  • exempleA.xlsm
    23.3 KB · Affichages: 3

JBARBE

XLDnaute Barbatruc
Bonjour à tous,
J'ai ajouté quelques colonnes supplémentaires ( jusqu'à la colonne AO) pour la suppression dans la feuille " données " s'il y avait des références à rajouter !
VB:
Sheets("données").Range("A2:AO65536").ClearContents
Bonne journée !
 

Pièces jointes

  • exempleA.xlsm
    23.3 KB · Affichages: 4

Fb76

XLDnaute Nouveau
Hello,

j'avais déjà fait cette modif pour agrandir la plage de données, mais merci qd même
J'ai changé aussi la cellule de départ pour le collage (j démarre à 1).
Option Explicit

Sub test()
Dim i As Long, j As Long
Application.ScreenUpdating = False
Sheets("données").Range("A2:bb165536").ClearContents
With Sheets("txt")
For i = 1 To 165536
If .Cells(i, 1) = "<CR><LF>" Then i = i + 1
For j = 1 To 256
If .Cells(i, 1) = "" Then Exit Sub
If .Cells(i, 1) = Sheets("données").Cells(1, j) Then
If Sheets("données").Cells(2, j) = "" Then
Sheets("données").Cells(2, j) = .Cells(i, 2)
Else
Sheets("données").Cells(1, j).End(xlDown).Offset(1, 0) = .Cells(i, 2)
End If
Exit For
ElseIf Sheets("données").Cells(1, j) = "" Then
MsgBox "La référence suivante n'a pas été trouvé" & " " & .Cells(i, 1)
.Cells(i, 1).Select
Exit Sub
End If
Next j
Next i
End With
Application.ScreenUpdating = True
End Sub


Pour moi c'est ok, pour ce tri.
Par contre je voulais ajouter un bouton pour importer les données, via l'ouverture d'un explorateur Windows, et les coller brutes en A1 (et les ligne suivantes) sans formatage (sheet "txt"). Je croyais ça plutôt simple mais non ...
Après avoir fouillé un peu le forum, et utilisé Henry , je n'y arrive pas.
Je souhaiterais pouvoir enregistrer également le classeur, via un bouton, à l'emplacement où on été récupérées les données.

Je post un nouveau sujet?
 

Fb76

XLDnaute Nouveau
Bonjour

Comme déjà dit au lieu d'importer on peut directement traiter par PowerQyery, intégré à Excel, les fichiers txt...

Hello,
effectivement j'ai vu ça par endroit. Mais je ne connaissais pas du tout powerquery.
J'ai essayé, mais il remet en forme les données, et dans une autre feuille.
Et je ne vois pas du tout comment l'automatiser... Désolé de faire le boulet^^

Je veux 'simplement' copier coller l'intégralité du contenu d'un .txt spécifié, sans remise en forme, avec comme première cellule de destination A1.
A la main ça fonctionne, mais j'aimerai faire un truc propre
 

Pièces jointes

  • exemple data.txt
    209.8 KB · Affichages: 3
  • macro Debug.xlsm
    65.3 KB · Affichages: 7

chris

XLDnaute Barbatruc
RE

Non rien ne t'oblige à mettre le résultat de la requête dans un onglet : tu peux directement obtenir le résultat que tu as mis dans l'onglet Données...

Sans le txt je ne peux rien démontrer
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…