Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupérer des données dans un fichier sous condition

10 réponses
Avatar
Apitos
Bonsoir =E0 tous,

J'aimerais dans un fichier, rep=E9rer le mot "OBJECT" pour lire ce qui est =
dans les deux lignes qui suivent en dessous.

A r=E9cup=E9rer

-Le nom sous =AB OBJECT =BB (dans l=92exemple GTY0A et JEW0A)
-Les NCS, NSD, NTN, NBS sous le mot =AB CS =BB ainsi que leurs valeurs resp=
ectives
=20
'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
OBJECT EVENTS
=20
GTY0A CS
NCS NSD NTN NBS
26 13 13 6
=20
................
................
................
=20
OBJECT EVENTS
=20
JEW0A CS
NCS NSD NTN NBS
16 14 14 4
'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

Le code :

'---------------------------------------------
reponse =3D Application.GetOpenFilename _
("All Files (*.*),*.*")

If reponse =3D False Then Exit Sub
Canal =3D FreeFile
Open reponse For Input As #Canal
Do While Not EOF(Canal)
Line Input #1, A$
B$ =3D Split(A$, " ")
If B$(0) =3D "OBJECT" Then
'ICI on doit aller vers les deux lignes en bas pour r=E9cup=E9r=
er nos donn=E9es
End If
Loop
Close #Canal
'-----------------------------------------------------------------

Merci d'avance.

10 réponses

Avatar
DanielCo
Bonjour,
reponse = Application.GetOpenFilename _
("All Files (*.*),*.*")

If reponse = False Then Exit Sub
Canal = FreeFile
Open reponse For Input As #Canal
Do While Not EOF(Canal)
Line Input #Canal, A$
b$ = Split(A$, " ")
If b$(0) = "OBJECT" Then
Line Input #Canal, A$
Line Input #Canal, A$
b$ = Split(A$, " ")
For Each Item In b$
'ici à toi de jouer
Next Item
End If
Loop
Close #Canal

Cordialement.
Daniel


Bonsoir à tous,

J'aimerais dans un fichier, repérer le mot "OBJECT" pour lire ce qui est dans
les deux lignes qui suivent en dessous.

A récupérer

-Le nom sous « OBJECT » (dans l’exemple GTY0A et JEW0A)
-Les NCS, NSD, NTN, NBS sous le mot « CS » ainsi que leurs valeurs
respectives

'============================================ > OBJECT EVENTS

GTY0A CS
NCS NSD NTN NBS
26 13 13 6

................
................
................

OBJECT EVENTS

JEW0A CS
NCS NSD NTN NBS
16 14 14 4
'============================================ >
Le code :

'---------------------------------------------
reponse = Application.GetOpenFilename _
("All Files (*.*),*.*")

If reponse = False Then Exit Sub
Canal = FreeFile
Open reponse For Input As #Canal
Do While Not EOF(Canal)
Line Input #1, A$
B$ = Split(A$, " ")
If B$(0) = "OBJECT" Then
'ICI on doit aller vers les deux lignes en bas pour récupérer nos
données End If
Loop
Close #Canal
'-----------------------------------------------------------------

Merci d'avance.
Avatar
Apitos
Bonjour Daniel,

Voila une autre tentative, mais j'ai du mal à supprimer les éléments vides du tableau B :

'-----------
Item.delete
'-----------

http://cjoint.com/?BEvo00KeP5y
Avatar
DanielCo
Poste quelques lignes de données; ce que tu as posté n'est pas facile à
interpréter.
Daniel


Bonjour Daniel,

Voila une autre tentative, mais j'ai du mal à supprimer les éléments vides du
tableau B :

'-----------
Item.delete
'-----------

http://cjoint.com/?BEvo00KeP5y
Avatar
Apitos
Le voila un fichier exemple de données.

http://cjoint.com/?BEvpUm9Af0V
Avatar
DanielCo
C'est pas le fichier données, ça. Ce dont j'ai besoin, c'est le fichier
texte ou csv en entrée.
Daniel


Le voila un fichier exemple de données.

http://cjoint.com/?BEvpUm9Af0V
Avatar
Apitos
Salut Daniel,

C'est pas le fichier données, ça. Ce dont j'ai besoin, c'est le fichi er
texte ou csv en entrée.



C'est bien le fichier sans extension à traiter.

Il est issu d'un log de système

Bon, entre temps j'ai essayé le traitement sur le fichier originel, mais j'ai eu des lignes qu'elles ne devront pas être présentes dans le rés ultat du traitement.

Alors voila le fichier de données sans extension et le fichier Excel, don t lequel j’ai utilisé plusieurs tests de if else pour résoudre mon pr oblème.

Mais est-ce qu’on peut mieux développer ce code ?

http://cjoint.com/?BEwaTMadBBs

Merci.
Avatar
DanielCo
Essaie cette macro. Elles fonctionne pour le fichier texte que tu as
fourni. Sans garantie pour un autre.
Sub Ouvrefich()
Dim B$() ', Item As Object
Dim i As Byte, LastLg As Long
Dim Name As String
Dim NCS As String, NSD As String, NTN As String, NBS As String

reponse = Application.GetOpenFilename _
("All Files (*.*),*.*")

If reponse = False Then Exit Sub
Canal = FreeFile
Open reponse For Input As #Canal
[A1].Value = "Objet"
[B1].Value = "NCS"
[C1].Value = "NSD"
[D1].Value = "NTN"
[E1].Value = "NBS"
Range("A2:E" & [A65000].End(xlUp).Row + 1).ClearContents

Do While Not EOF(Canal)
Line Input #Canal, A$

If Len(Trim(A$)) > 0 Then '-- Si la ligne est non vide
'MsgBox "Line : " & a$
B$ = Split(Trim(A$), " ")

If UBound(B$) - 1 > 0 Then '-- Si on a un tableau B
If UBound(B$) >= 4 Then
If B$(4) = "CS" Then
Name = B$(0)
Do Until B$(0) = "NCS"
Line Input #Canal, A$
B$ = Split(Trim(A$), " ")
Loop ' la ligne pour récupérer le nom
d'objet
Line Input #Canal, A$
B$ = Split(Trim(A$), " ")
If B$(0) = "WO" Then
Line Input #Canal, A$
B$ = Split(Trim(A$), " ")
End If
LastLg = [B65000].End(xlUp).Row + 1
Cells(LastLg, 1) = Name
If B$(0) <> "" Then Cells(LastLg, 2) = B$(0)
If B$(6) <> "" Then Cells(LastLg, 3) = B$(6)
If B$(11) <> "" Then Cells(LastLg, 4) = B$(11)
If B$(17) <> "" Then Cells(LastLg, 5) = B$(17)
End If
End If
End If
End If
Loop
Close #Canal

End Sub
Avatar
Apitos
Merci Daniel,

Ca marche mais pour le RAMOD, ca ne ramène que la première valeur NCS à savoir 43.

Les trois autres valeurs (NSDC, NTNC et NBS"), ne sont pas extr aites.
Avatar
DanielCo
Bizarre, regarde le classeur joint; est-ce qu'on n'aurait pas le même
fichier SQ7 ?
http://cjoint.com/?BExkM126aUf
Daniel


Merci Daniel,

Ca marche mais pour le RAMOD, ca ne ramène que la première valeur NCS à
savoir 43.

Les trois autres valeurs (NSDC, NTNC et NBS"), ne sont pas extraites.
Avatar
Apitos
Bonjour Daniel,

Oui, effectivement le problème était dans le fichier SQ7.

Je viens de m'apercevoir qu'il y avait des espaces devant les valeurs num ériques.

C’est pour ça, que la macro n’extrairait que des vides au lieu des va leurs.

Mais avec cette boucle, tous les valeurs seront repris même s’il y a de s espaces de superflu dans la ligne.

'---------------------------
'-- Récupération des éléments non vides
‘-- du tableau B$ dans un nouveau tableau BB$

i = 0: j = 0
For Each Item In B$
If Len(Trim(Item)) > 0 Then
ReDim Preserve BB$(i)
BB$(i) = B$(j)
i = i + 1
End If
j = j + 1
Next Item
'---------------------------

Merci Daniel.