OVH Cloud OVH Cloud

Traitement fichier txt

11 réponses
Avatar
Jacky
Bonjour à tous

Je voudrais sur un fichier txt récupérer un certain nombre de
renseignements.(3 premiers )
Le fichier en lui même comporte actuellement 74580 lignes (évolutive) sous
cette forme
10174312|Oxxxxxx|Eyyy|MG|25/10/1971|27/11/2003|27/11/2002|carte saphir
valable jusqu'au 03/02/2005
13445647|Hxxxx|Dyyyyy|LAP|21/04/1950|16/09/2004|22/12/1995|
9947824|Mxxxxx|Uyyyyt|LJR|17/07/1987|17/07/2001|21/02/1997|Prochaine carte
payante. - 15/01/1999. - NEH. - JG
Apparemment 8 zones avec comme séparateur "|"
1-numéro
2-nom
3-prénom
4-localisation
5-date
6-date
7-date
8-observation

Ma question......
Est-il possible d'obliger Excel se prendre comme séparateur de liste
momentanément le signe"|" en VBA ?

Actuellement je fait cela pour récupérer les infos.
Je n'ai besoin que des 3 première infos 1, 2, et 3
'--------------------------------
Private Sub CommandButton1_Click()
Dim numeros As String, nom As String, prenom As String
ad_cel = Mid(Selection.Address, 2, 1) & Right(Selection.Address, 1)
res = InputBox("Recherche de lecteur par son numéro," & Chr$(10) & "pour la
cellule: " & ad_cel, "Recherche")
x = Len(res)
If res = "" Then Exit Sub
Sheets("Attente").Visible = True
Worksheets("attente").Activate ' feuille d'attente
Open "d:\FICHTEST.txt" For Input As #1
Do While Not EOF(1)
' Lit les données dans 1 variable.
Line Input #1, numero
If Left(numero, x) = res Then
For i = 1 To Len(numero)
If Mid(numero, i, 1) = "|" Then
num = Mid(numero, 1, i - 1)
Exit For
End If
Next i
For j = i + 1 To Len(numero)
If Mid(numero, j, 1) = "|" Then
nom = Mid(numero, i + 1, j - i - 1)
Exit For
End If
Next j
For k = j + 1 To Len(numero)
If Mid(numero, k, 1) = "|" Then
prenom = Mid(numero, j + 1, k - j - 1)
Exit For
End If
Next k
Close #1
Sheets("Attente").Visible = False
Worksheets("occupation").Select
rep = MsgBox("le n°: " & num & " correspond au lecteur " & Chr$(10) &
"Nom: " & nom & Chr$(10) & "Prénom: " & prenom & Chr$(10) & Chr$(10) &
"Voulez-vous l'attribuer à la cellule (" & ad_cel & ") selectionnée ?", 4,
"Recherche de lecteur")
If rep = 6 Then
Selection = nom & " " & prenom & Chr$(10) & num
End If
Exit Sub
End If
Loop
Close #1
Sheets("Attente").Visible = False
Worksheets("occupation").Select
msg = MsgBox("Le lecteur dont le n° est : " & res & Chr$(10) & "n'existe
pas. ", 0, "Fin de la recherche")
End Sub
'-----------------------
J'ai aussi essayé avec ' Input #1 ' , pour récupérer les infos les unes
après le autres, sans succès, car dans la section 8- observation , il est
permis tous les caractères. Ce qui me provoque un décalage dès que une
virgule ou un point virgule est rencontrés.
Je cherche une solution pour améliorer ce code ou un autre code tenant
compte de ce "|" sans en affecter Excel dans les autres applications.
Il m'est interdit de modifier ce fichier qui est généré par un autre
logiciel.

Ouf je ne sais pas si cela est très clair.....
Merci
JJ

1 réponse

1 2
Avatar
Jacky
OK, je vais tester tout ça à tête reposé.
Merci à tous
JJ

"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Je vais peut-être dire une SITELerie (ânerie sur d'autres forums),
mais, as-tu essayé en passant par Données - Données externes - Créer
une requête etc.

Sinon, pour compléter un peu les réponses de Pascal, il y a ce petit
texte en anglais (et beaucoup d'autres, mais je manque de tempos) sur
le site de MS au sujet des expressions régulières:


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting051099.asp



Pour importer le fichier texte au complet:


http://perso.wanadoo.fr/frederic.sigonneau/code/Formats/ImportVeryBigTextFile.txt




http://perso.wanadoo.fr/frederic.sigonneau/code/Formats/ImportVeryBigTextFile2.txt



Pour faire le SPLIT avec Excel 97:

http://perso.wanadoo.fr/frederic.sigonneau/Fonctions.htm

Vers le bas de page, 5 ou 6 fonctions personnalisées.




"Jacky" a écrit dans le message de
news:
Salut Pascal
Oui, bien sur, malheureusement ce fichier est en traitement constant
sur une

centaine de Pc et très évolutif.
je doit donc le consulter à l'endroit ou il se trouve à n'importe
quel

moment de la journée.
Et cela ne résout pas mon problème de virgule ou autre qui me
provoque le

décalage avec input#1.
Je doit faire une recherche très rapide soit par le n°, soit par le
nom.

Je trouve ma méthode un peu (beaucoup) archaïque, c'était pour cela
que je

me suis adressé au forum.
Je pense qu'il y a plus pro et plus rapide que mon code.
Cela dit , mon code trouve le dernier enregistrement en 3 seconde en
recherche par le n°, avec une copie du fichier sur mon PC. Je ne
sais pas

encore combien de temps il mettra pour une recherche sur le serveur.
Autre(s) solution(s) peut-être?

Salutations
JJ



"Pascal Engelmajer" a écrit dans
le

message news: u#
Salut,
sans modifier le fichier source on peut, en VBA, en faire une
copie et


remplacer les | par autre chose (TAB par exemple)
puis utiliser cette copie modifiée
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il
va."


Sénèque.
http://www.ilyapa.net/excel
"Jacky" a écrit dans le message de
news:



Bonjour à tous

Je voudrais sur un fichier txt récupérer un certain nombre de
renseignements.(3 premiers )
Le fichier en lui même comporte actuellement 74580 lignes
(évolutive)



sous
cette forme
10174312|Oxxxxxx|Eyyy|MG|25/10/1971|27/11/2003|27/11/2002|carte
saphir



valable jusqu'au 03/02/2005
13445647|Hxxxx|Dyyyyy|LAP|21/04/1950|16/09/2004|22/12/1995|

9947824|Mxxxxx|Uyyyyt|LJR|17/07/1987|17/07/2001|21/02/1997|Prochaine



carte
payante. - 15/01/1999. - NEH. - JG
Apparemment 8 zones avec comme séparateur "|"
1-numéro
2-nom
3-prénom
4-localisation
5-date
6-date
7-date
8-observation

Ma question......
Est-il possible d'obliger Excel se prendre comme séparateur de
liste



momentanément le signe"|" en VBA ?

Actuellement je fait cela pour récupérer les infos.
Je n'ai besoin que des 3 première infos 1, 2, et 3
'--------------------------------
Private Sub CommandButton1_Click()
Dim numeros As String, nom As String, prenom As String
ad_cel = Mid(Selection.Address, 2, 1) & Right(Selection.Address,
1)



res = InputBox("Recherche de lecteur par son numéro," & Chr$(10)
& "pour



la
cellule: " & ad_cel, "Recherche")
x = Len(res)
If res = "" Then Exit Sub
Sheets("Attente").Visible = True
Worksheets("attente").Activate ' feuille d'attente
Open "d:FICHTEST.txt" For Input As #1
Do While Not EOF(1)
' Lit les données dans 1 variable.
Line Input #1, numero
If Left(numero, x) = res Then
For i = 1 To Len(numero)
If Mid(numero, i, 1) = "|" Then
num = Mid(numero, 1, i - 1)
Exit For
End If
Next i
For j = i + 1 To Len(numero)
If Mid(numero, j, 1) = "|" Then
nom = Mid(numero, i + 1, j - i - 1)
Exit For
End If
Next j
For k = j + 1 To Len(numero)
If Mid(numero, k, 1) = "|" Then
prenom = Mid(numero, j + 1, k - j - 1)
Exit For
End If
Next k
Close #1
Sheets("Attente").Visible = False
Worksheets("occupation").Select
rep = MsgBox("le n°: " & num & " correspond au lecteur " &
Chr$(10)



&
"Nom: " & nom & Chr$(10) & "Prénom: " & prenom & Chr$(10) &
Chr$(10) &



"Voulez-vous l'attribuer à la cellule (" & ad_cel & ")
selectionnée ?",



4,
"Recherche de lecteur")
If rep = 6 Then
Selection = nom & " " & prenom & Chr$(10) & num
End If
Exit Sub
End If
Loop
Close #1
Sheets("Attente").Visible = False
Worksheets("occupation").Select
msg = MsgBox("Le lecteur dont le n° est : " & res & Chr$(10) &
"n'existe



pas. ", 0, "Fin de la recherche")
End Sub
'-----------------------
J'ai aussi essayé avec ' Input #1 ' , pour récupérer les infos
les unes



après le autres, sans succès, car dans la section 8- observation
, il



est
permis tous les caractères. Ce qui me provoque un décalage dès
que une



virgule ou un point virgule est rencontrés.
Je cherche une solution pour améliorer ce code ou un autre code
tenant



compte de ce "|" sans en affecter Excel dans les autres
applications.



Il m'est interdit de modifier ce fichier qui est généré par un
autre



logiciel.

Ouf je ne sais pas si cela est très clair.....
Merci
JJ


















1 2