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

Exploitation d'un fichier texte

8 réponses
Avatar
Calou
Bonjour,

On vient de m'envoyer plus de 4 Mo de fichier texte que je dois exploiter
sous Excel.
J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
exploite un fichier texte.

Sub LitAvecInput()
ChDir ThisWorkbook.Path
nf = "essai.txt"
[A:A].ClearContents
Open nf For Input As #1
i = 1
Do While Not EOF(1)
Input #1, x
Cells(i, 1) = x
i = i + 1
Loop
Close #1
End Sub

Par contre les fichiers reçus ne sont pas des fichier au format CSV (pas de
;) et pour bien faire il faudrait que dans la première colonne j'indique le
nom de la personne située de la facon suivante :
AGENT: 4101 H MARTIN BERNARD
soit après le troisième espace (car la partie chiffrée peut être sur 5
caractères.)
et indiquer dans la deuxième colonne le dernier montant de la ligne qui
commence par 586C.

Cela vous semble t il réalisable ?

Par avance, un grand merci à vous pour votre précieuse aide.

Bonne soirée à vous !!

Philippe

8 réponses

Avatar
Christian M
Sans Vba, si toutes tes lignes sont de même format, Fichier Ouvrir
rechercher le fichier à convertir Entrée puis choisir si séparateurs ou
largeur fixe, puis déplacer les colonnes

"Calou" a écrit dans le message de news:

Bonjour,

On vient de m'envoyer plus de 4 Mo de fichier texte que je dois exploiter
sous Excel.
J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
exploite un fichier texte.

Sub LitAvecInput()
ChDir ThisWorkbook.Path
nf = "essai.txt"
[A:A].ClearContents
Open nf For Input As #1
i = 1
Do While Not EOF(1)
Input #1, x
Cells(i, 1) = x
i = i + 1
Loop
Close #1
End Sub

Par contre les fichiers reçus ne sont pas des fichier au format CSV (pas
de ;) et pour bien faire il faudrait que dans la première colonne
j'indique le nom de la personne située de la facon suivante :
AGENT: 4101 H MARTIN BERNARD
soit après le troisième espace (car la partie chiffrée peut être sur 5
caractères.)
et indiquer dans la deuxième colonne le dernier montant de la ligne qui
commence par 586C.

Cela vous semble t il réalisable ?

Par avance, un grand merci à vous pour votre précieuse aide.

Bonne soirée à vous !!

Philippe



Avatar
Calou
bonjour,
et merci d'avoir pris le temps de te pencher sur mon problème.
Toutes les lignes n'ont pas le même format et je pense être obligé de passer
par vba pour ne récupérer que le nom de la personne et la montant de la
ligne commencant par 856.
Ce sont des tableaux de paie avec le nom de la personne mais l'info de la
rubrique 856 je la retrouve parfois sur la 4e page.
Vous trouverez les premieres page de ce fichier à l'adresse suivante :
http://cjoint.com/?dbePOloZak

Un grand merci par avance.

Bonne journée.

"Christian M" a écrit dans le message de
news:
Sans Vba, si toutes tes lignes sont de même format, Fichier Ouvrir
rechercher le fichier à convertir Entrée puis choisir si séparateurs ou
largeur fixe, puis déplacer les colonnes

"Calou" a écrit dans le message de news:

Bonjour,

On vient de m'envoyer plus de 4 Mo de fichier texte que je dois exploiter
sous Excel.
J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
exploite un fichier texte.

Sub LitAvecInput()
ChDir ThisWorkbook.Path
nf = "essai.txt"
[A:A].ClearContents
Open nf For Input As #1
i = 1
Do While Not EOF(1)
Input #1, x
Cells(i, 1) = x
i = i + 1
Loop
Close #1
End Sub

Par contre les fichiers reçus ne sont pas des fichier au format CSV (pas
de ;) et pour bien faire il faudrait que dans la première colonne
j'indique le nom de la personne située de la facon suivante :
AGENT: 4101 H MARTIN BERNARD
soit après le troisième espace (car la partie chiffrée peut être sur 5
caractères.)
et indiquer dans la deuxième colonne le dernier montant de la ligne qui
commence par 586C.

Cela vous semble t il réalisable ?

Par avance, un grand merci à vous pour votre précieuse aide.

Bonne soirée à vous !!

Philippe








Avatar
Mishell
Bonjour.

Sub test()

f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
Line Input #1, a
a = Trim(a)

While Mid(a, 1, 1) = "!"
a = Mid(a, 2)
Wend
a = Trim(a)

If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

Line Input #1, k
k = Trim(k)
montant = ExtraireDernierMontant(k)
Cells(ligne, 2) = montant

End If

If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

nom = Trim(a)
If InStr(UCase(nom), suite) > 0 Then

b = InStr(UCase(nom), suite)
nom = Trim(Mid(nom, 1, b - 1))
End If

If UCase(nom) <> UCase(precedent) Then

ligne = ligne + 1
Cells(ligne, 1) = Trim(Mid(a, Len(ligneAgent) + 1))
End If
precedent = nom
End If


Wend
Close

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function


Mishell


"Calou" wrote in message
news:
Bonjour,

On vient de m'envoyer plus de 4 Mo de fichier texte que je dois exploiter
sous Excel.
J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
exploite un fichier texte.

Sub LitAvecInput()
ChDir ThisWorkbook.Path
nf = "essai.txt"
[A:A].ClearContents
Open nf For Input As #1
i = 1
Do While Not EOF(1)
Input #1, x
Cells(i, 1) = x
i = i + 1
Loop
Close #1
End Sub

Par contre les fichiers reçus ne sont pas des fichier au format CSV (pas
de ;) et pour bien faire il faudrait que dans la première colonne
j'indique le nom de la personne située de la facon suivante :
AGENT: 4101 H MARTIN BERNARD
soit après le troisième espace (car la partie chiffrée peut être sur 5
caractères.)
et indiquer dans la deuxième colonne le dernier montant de la ligne qui
commence par 586C.

Cela vous semble t il réalisable ?

Par avance, un grand merci à vous pour votre précieuse aide.

Bonne soirée à vous !!

Philippe



Avatar
philou36
On 27 fév, 13:23, "Mishell" wrote:
Bonjour.

Sub test()

f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
 Line Input #1, a
 a = Trim(a)

  While Mid(a, 1, 1) = "!"
   a = Mid(a, 2)
  Wend
  a = Trim(a)

  If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

   Line Input #1, k
   k = Trim(k)
   montant = ExtraireDernierMontant(k)
   Cells(ligne, 2) = montant

  End If

 If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

  nom = Trim(a)
  If InStr(UCase(nom), suite) > 0 Then

   b = InStr(UCase(nom), suite)
   nom = Trim(Mid(nom, 1, b - 1))
  End If

  If UCase(nom) <> UCase(precedent) Then

   ligne = ligne + 1
   Cells(ligne, 1) = Trim(Mid(a, Len(ligneAgent) + 1))
  End If
  precedent = nom
 End If

Wend
Close

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function

Mishell

"Calou" wrote in message

news:



> Bonjour,

> On vient de m'envoyer plus de 4 Mo de fichier texte que je dois exploit er
> sous Excel.
> J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
> exploite un fichier texte.

> Sub LitAvecInput()
>  ChDir ThisWorkbook.Path
>  nf = "essai.txt"
>  [A:A].ClearContents
>  Open nf For Input As #1
>  i = 1
>  Do While Not EOF(1)
>    Input #1, x
>    Cells(i, 1) = x
>    i = i + 1
>  Loop
>  Close #1
> End Sub

> Par contre les fichiers reçus ne sont pas des fichier au format CSV ( pas
> de ;) et pour bien faire il faudrait que dans la première colonne
> j'indique le nom de la personne située de la facon suivante :
> AGENT: 4101  H  MARTIN              BERNARD
> soit après le troisième espace (car la partie chiffrée peut êtr e sur 5
> caractères.)
> et indiquer dans la deuxième colonne le dernier montant de la ligne q ui
> commence par 586C.

> Cela vous semble t il réalisable  ?

> Par avance, un grand merci à vous pour votre précieuse aide.

> Bonne soirée à vous !!

> Philippe- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Bonjour,

Un GRAND GRAND merci à toi pour ta précieuse aide. Je vais tester tout
ça un peu plus tard. Merci encore.
Avatar
Calou
Bonjour,

C'est tout nickel ! mille fois merci pour avoir pris de ton temps pour me
donner la solution à mon problème !
Je vais juste me permettre (si je trouve) c'est de ne récupérer que le nom
prénom sans les quelques chiffres.

Philippe

"Mishell" a écrit dans le message de news:

Bonjour.

Sub test()

f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
Line Input #1, a
a = Trim(a)

While Mid(a, 1, 1) = "!"
a = Mid(a, 2)
Wend
a = Trim(a)

If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

Line Input #1, k
k = Trim(k)
montant = ExtraireDernierMontant(k)
Cells(ligne, 2) = montant

End If

If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

nom = Trim(a)
If InStr(UCase(nom), suite) > 0 Then

b = InStr(UCase(nom), suite)
nom = Trim(Mid(nom, 1, b - 1))
End If

If UCase(nom) <> UCase(precedent) Then

ligne = ligne + 1
Cells(ligne, 1) = Trim(Mid(a, Len(ligneAgent) + 1))
End If
precedent = nom
End If


Wend
Close

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function


Mishell


"Calou" wrote in message
news:
Bonjour,

On vient de m'envoyer plus de 4 Mo de fichier texte que je dois exploiter
sous Excel.
J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
exploite un fichier texte.

Sub LitAvecInput()
ChDir ThisWorkbook.Path
nf = "essai.txt"
[A:A].ClearContents
Open nf For Input As #1
i = 1
Do While Not EOF(1)
Input #1, x
Cells(i, 1) = x
i = i + 1
Loop
Close #1
End Sub

Par contre les fichiers reçus ne sont pas des fichier au format CSV (pas
de ;) et pour bien faire il faudrait que dans la première colonne
j'indique le nom de la personne située de la facon suivante :
AGENT: 4101 H MARTIN BERNARD
soit après le troisième espace (car la partie chiffrée peut être sur 5
caractères.)
et indiquer dans la deuxième colonne le dernier montant de la ligne qui
commence par 586C.

Cela vous semble t il réalisable ?

Par avance, un grand merci à vous pour votre précieuse aide.

Bonne soirée à vous !!

Philippe








Avatar
Mishell
Je te rajoute la routine ExtraireNomDeFamilleEtPrenom pour répondre à cette
dernière demande.

Sub test()
f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
Line Input #1, a
a = Trim(a)

While Mid(a, 1, 1) = "!"
a = Mid(a, 2)
Wend
a = Trim(a)

If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

Line Input #1, k
k = Trim(k)
montant = ExtraireDernierMontant(k)
Cells(ligne, 2) = montant

End If

If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

nom = Trim(a)
If InStr(UCase(nom), suite) > 0 Then

b = InStr(UCase(nom), suite)
nom = Trim(Mid(nom, 1, b - 1))
End If

If UCase(nom) <> UCase(precedent) Then

ligne = ligne + 1
strnom = Trim(Mid(a, Len(ligneAgent) + 1))
famille = ""
prenom = ""

Call ExtraireNomDeFamilleEtPrenom(strnom, famille, prenom)

Cells(ligne, 1) = famille & " " & prenom
End If
precedent = nom
End If


Wend
Close

End Sub

Sub ExtraireNomDeFamilleEtPrenom(lignenom, ByRef famille, ByRef prenom)


a = lignenom
b = InStr(a, " ")
a = Trim(Mid(a, b + 1))
b = InStr(a, " ")
a = Trim(Mid(a, b + 1))
b = InStr(a, " ")
famille = Mid(a, 1, b - 1)
prenom = Trim(Mid(a, b + 1))

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function



"Calou" wrote in message
news:
Bonjour,

C'est tout nickel ! mille fois merci pour avoir pris de ton temps pour me
donner la solution à mon problème !
Je vais juste me permettre (si je trouve) c'est de ne récupérer que le nom
prénom sans les quelques chiffres.

Philippe

"Mishell" a écrit dans le message de news:

Bonjour.

Sub test()

f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
Line Input #1, a
a = Trim(a)

While Mid(a, 1, 1) = "!"
a = Mid(a, 2)
Wend
a = Trim(a)

If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

Line Input #1, k
k = Trim(k)
montant = ExtraireDernierMontant(k)
Cells(ligne, 2) = montant

End If

If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

nom = Trim(a)
If InStr(UCase(nom), suite) > 0 Then

b = InStr(UCase(nom), suite)
nom = Trim(Mid(nom, 1, b - 1))
End If

If UCase(nom) <> UCase(precedent) Then

ligne = ligne + 1
Cells(ligne, 1) = Trim(Mid(a, Len(ligneAgent) + 1))
End If
precedent = nom
End If


Wend
Close

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function


Mishell


"Calou" wrote in message
news:
Bonjour,

On vient de m'envoyer plus de 4 Mo de fichier texte que je dois
exploiter sous Excel.
J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
exploite un fichier texte.

Sub LitAvecInput()
ChDir ThisWorkbook.Path
nf = "essai.txt"
[A:A].ClearContents
Open nf For Input As #1
i = 1
Do While Not EOF(1)
Input #1, x
Cells(i, 1) = x
i = i + 1
Loop
Close #1
End Sub

Par contre les fichiers reçus ne sont pas des fichier au format CSV (pas
de ;) et pour bien faire il faudrait que dans la première colonne
j'indique le nom de la personne située de la facon suivante :
AGENT: 4101 H MARTIN BERNARD
soit après le troisième espace (car la partie chiffrée peut être sur 5
caractères.)
et indiquer dans la deuxième colonne le dernier montant de la ligne qui
commence par 586C.

Cela vous semble t il réalisable ?

Par avance, un grand merci à vous pour votre précieuse aide.

Bonne soirée à vous !!

Philippe












Avatar
Calou
Bonjour,

Avant c'était deja extra, mais là je manque de vocabulaire. Même si je me
repète, mille merci à toi pour m'avoir aidé à ce point dans ce problème où
je ne voyais pas de solution.
N'y connaissant rien en VBA, je vais maintenant essayer de décomposer tes
macros. Bon dimanche à toi.

Philippe
"Mishell" a écrit dans le message de news:

Je te rajoute la routine ExtraireNomDeFamilleEtPrenom pour répondre à
cette dernière demande.

Sub test()
f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
Line Input #1, a
a = Trim(a)

While Mid(a, 1, 1) = "!"
a = Mid(a, 2)
Wend
a = Trim(a)

If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

Line Input #1, k
k = Trim(k)
montant = ExtraireDernierMontant(k)
Cells(ligne, 2) = montant

End If

If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

nom = Trim(a)
If InStr(UCase(nom), suite) > 0 Then

b = InStr(UCase(nom), suite)
nom = Trim(Mid(nom, 1, b - 1))
End If

If UCase(nom) <> UCase(precedent) Then

ligne = ligne + 1
strnom = Trim(Mid(a, Len(ligneAgent) + 1))
famille = ""
prenom = ""

Call ExtraireNomDeFamilleEtPrenom(strnom, famille, prenom)

Cells(ligne, 1) = famille & " " & prenom
End If
precedent = nom
End If


Wend
Close

End Sub

Sub ExtraireNomDeFamilleEtPrenom(lignenom, ByRef famille, ByRef prenom)


a = lignenom
b = InStr(a, " ")
a = Trim(Mid(a, b + 1))
b = InStr(a, " ")
a = Trim(Mid(a, b + 1))
b = InStr(a, " ")
famille = Mid(a, 1, b - 1)
prenom = Trim(Mid(a, b + 1))

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function



"Calou" wrote in message
news:
Bonjour,

C'est tout nickel ! mille fois merci pour avoir pris de ton temps pour me
donner la solution à mon problème !
Je vais juste me permettre (si je trouve) c'est de ne récupérer que le
nom prénom sans les quelques chiffres.

Philippe

"Mishell" a écrit dans le message de news:

Bonjour.

Sub test()

f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
Line Input #1, a
a = Trim(a)

While Mid(a, 1, 1) = "!"
a = Mid(a, 2)
Wend
a = Trim(a)

If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

Line Input #1, k
k = Trim(k)
montant = ExtraireDernierMontant(k)
Cells(ligne, 2) = montant

End If

If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

nom = Trim(a)
If InStr(UCase(nom), suite) > 0 Then

b = InStr(UCase(nom), suite)
nom = Trim(Mid(nom, 1, b - 1))
End If

If UCase(nom) <> UCase(precedent) Then

ligne = ligne + 1
Cells(ligne, 1) = Trim(Mid(a, Len(ligneAgent) + 1))
End If
precedent = nom
End If


Wend
Close

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function


Mishell


"Calou" wrote in message
news:
Bonjour,

On vient de m'envoyer plus de 4 Mo de fichier texte que je dois
exploiter sous Excel.
J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
exploite un fichier texte.

Sub LitAvecInput()
ChDir ThisWorkbook.Path
nf = "essai.txt"
[A:A].ClearContents
Open nf For Input As #1
i = 1
Do While Not EOF(1)
Input #1, x
Cells(i, 1) = x
i = i + 1
Loop
Close #1
End Sub

Par contre les fichiers reçus ne sont pas des fichier au format CSV
(pas de ;) et pour bien faire il faudrait que dans la première colonne
j'indique le nom de la personne située de la facon suivante :
AGENT: 4101 H MARTIN BERNARD
soit après le troisième espace (car la partie chiffrée peut être sur 5
caractères.)
et indiquer dans la deuxième colonne le dernier montant de la ligne qui
commence par 586C.

Cela vous semble t il réalisable ?

Par avance, un grand merci à vous pour votre précieuse aide.

Bonne soirée à vous !!

Philippe
















Avatar
Mishell
Heureux d'avoir solutionné ton problème.

Bon dimanche.

Mishell

"Calou" wrote in message
news:
Bonjour,

Avant c'était deja extra, mais là je manque de vocabulaire. Même si je me
repète, mille merci à toi pour m'avoir aidé à ce point dans ce problème où
je ne voyais pas de solution.
N'y connaissant rien en VBA, je vais maintenant essayer de décomposer tes
macros. Bon dimanche à toi.

Philippe
"Mishell" a écrit dans le message de news:

Je te rajoute la routine ExtraireNomDeFamilleEtPrenom pour répondre à
cette dernière demande.

Sub test()
f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
Line Input #1, a
a = Trim(a)

While Mid(a, 1, 1) = "!"
a = Mid(a, 2)
Wend
a = Trim(a)

If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

Line Input #1, k
k = Trim(k)
montant = ExtraireDernierMontant(k)
Cells(ligne, 2) = montant

End If

If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

nom = Trim(a)
If InStr(UCase(nom), suite) > 0 Then

b = InStr(UCase(nom), suite)
nom = Trim(Mid(nom, 1, b - 1))
End If

If UCase(nom) <> UCase(precedent) Then

ligne = ligne + 1
strnom = Trim(Mid(a, Len(ligneAgent) + 1))
famille = ""
prenom = ""

Call ExtraireNomDeFamilleEtPrenom(strnom, famille, prenom)

Cells(ligne, 1) = famille & " " & prenom
End If
precedent = nom
End If


Wend
Close

End Sub

Sub ExtraireNomDeFamilleEtPrenom(lignenom, ByRef famille, ByRef prenom)


a = lignenom
b = InStr(a, " ")
a = Trim(Mid(a, b + 1))
b = InStr(a, " ")
a = Trim(Mid(a, b + 1))
b = InStr(a, " ")
famille = Mid(a, 1, b - 1)
prenom = Trim(Mid(a, b + 1))

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function



"Calou" wrote in message
news:
Bonjour,

C'est tout nickel ! mille fois merci pour avoir pris de ton temps pour
me donner la solution à mon problème !
Je vais juste me permettre (si je trouve) c'est de ne récupérer que le
nom prénom sans les quelques chiffres.

Philippe

"Mishell" a écrit dans le message de news:

Bonjour.

Sub test()

f = "C:test.txt"

ligneAgent = UCase("AGENT:")

ligneMontant = UCase("856")

suite = UCase("(suite)")

Open f For Input As 1

While Not EOF(1)
Line Input #1, a
a = Trim(a)

While Mid(a, 1, 1) = "!"
a = Mid(a, 2)
Wend
a = Trim(a)

If UCase(Mid(a, 1, Len(ligneMontant))) = ligneMontant Then

Line Input #1, k
k = Trim(k)
montant = ExtraireDernierMontant(k)
Cells(ligne, 2) = montant

End If

If UCase(Mid(a, 1, Len(ligneAgent))) = ligneAgent Then

nom = Trim(a)
If InStr(UCase(nom), suite) > 0 Then

b = InStr(UCase(nom), suite)
nom = Trim(Mid(nom, 1, b - 1))
End If

If UCase(nom) <> UCase(precedent) Then

ligne = ligne + 1
Cells(ligne, 1) = Trim(Mid(a, Len(ligneAgent) + 1))
End If
precedent = nom
End If


Wend
Close

End Sub

Function ExtraireDernierMontant(a)

Dim t As Variant
t = Split(a, "!")
ExtraireDernierMontant = Trim(t(UBound(t) - 1))

End Function


Mishell


"Calou" wrote in message
news:
Bonjour,

On vient de m'envoyer plus de 4 Mo de fichier texte que je dois
exploiter sous Excel.
J'ai trouvé sur le site de Jacques BOISGONTIER, une petite macro qui
exploite un fichier texte.

Sub LitAvecInput()
ChDir ThisWorkbook.Path
nf = "essai.txt"
[A:A].ClearContents
Open nf For Input As #1
i = 1
Do While Not EOF(1)
Input #1, x
Cells(i, 1) = x
i = i + 1
Loop
Close #1
End Sub

Par contre les fichiers reçus ne sont pas des fichier au format CSV
(pas de ;) et pour bien faire il faudrait que dans la première colonne
j'indique le nom de la personne située de la facon suivante :
AGENT: 4101 H MARTIN BERNARD
soit après le troisième espace (car la partie chiffrée peut être sur 5
caractères.)
et indiquer dans la deuxième colonne le dernier montant de la ligne
qui commence par 586C.

Cela vous semble t il réalisable ?

Par avance, un grand merci à vous pour votre précieuse aide.

Bonne soirée à vous !!

Philippe