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

Le
Apitos
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 resp=
ectives

'=

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ér=
er nos données
End If
Loop
Close #Canal
'--

Merci d'avance.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #24494221
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.
Apitos
Le #24494731
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
DanielCo
Le #24494881
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
Apitos
Le #24494971
Le voila un fichier exemple de données.

http://cjoint.com/?BEvpUm9Af0V
DanielCo
Le #24495381
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
Apitos
Le #24496551
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.
DanielCo
Le #24498061
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
Apitos
Le #24498321
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.
DanielCo
Le #24499951
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.
Apitos
Le #24502541
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.
Publicité
Poster une réponse
Anonyme