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

10 réponses

1 2
Avatar
ru-th
Salut

logiquement, en utilisant l'enregistreur de macro, tu aurais quelque chose
comme cela
ChDir "D:temp"
Workbooks.OpenText Filename:="D:temptoto.txt", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse,
Comma:úlse _
, Space:úlse, Other:=True, OtherChar:="|",
FieldInfo:=Array(Array(1, 1 _
), Array(2, 1), Array(3, 1), Array(4, 9), Array(5, 9), Array(6, 9),
Array(7, 9), Array(8, 9))

a+
rural thierry

"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







Avatar
Pascal Engelmajer
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







Avatar
Jacky
Salut Thierry
Ton code est bon, malheureusement les limites d'Excel 65536 lignes, alors
que mon fichier en fait déjà plus de 74000 et le traitement est trop long.
Cependant, je n'ai pas besoin d'entrer les données dans un tableau Excel,
seulement les consulter et en récupérer certaine pour traiter un autre
fichier. Ma recherche doit ce faire soit par le n° soit par le nom.
Aurais-tu plus d'info sur FieldInfo avec Array, je n'ai pas beaucoup
d'expérience avec cela. Je crois que je vais me diriger vers cette direction

JJ.

"ru-th" a écrit dans le message news:

Salut

logiquement, en utilisant l'enregistreur de macro, tu aurais quelque chose
comme cela
ChDir "D:temp"
Workbooks.OpenText Filename:="D:temptoto.txt", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote,
_

ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse,
Comma:úlse _
, Space:úlse, Other:=True, OtherChar:="|",
FieldInfo:=Array(Array(1, 1 _
), Array(2, 1), Array(3, 1), Array(4, 9), Array(5, 9), Array(6,
9),

Array(7, 9), Array(8, 9))

a+
rural thierry

"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











Avatar
Jacky
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











Avatar
Pascal Engelmajer
Salut Jacky,
as-tu essayé Split (à partir de Excel 2000) :
ce qui doit donner à peu près ....
.../...
Dim t
.../...
Line Input #1, numero
t=Split(numero,"|")
if t(0)=res then
nom=t(1)
prenom=t(2)
end if
.../...
je pense que ça doit gagner en vitesse
--
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:

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















Avatar
Jacky
Re..
Ben non,,,
Je suis encore sous le bon et vieux xl 97
JJ

"Pascal Engelmajer" a écrit dans le
message news:
Salut Jacky,
as-tu essayé Split (à partir de Excel 2000) :
ce qui doit donner à peu près ....
.../...
Dim t
.../...
Line Input #1, numero
t=Split(numero,"|")
if t(0)=res then
nom=t(1)
prenom=t(2)
end if
.../...
je pense que ça doit gagner en vitesse
--
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:

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



















Avatar
Pascal Engelmajer
Salut,
dans ce cas il faut incorporer un bibliothèque d'expressions régulière...
(Microsoft VBScript Regular Expressions 1.0 ou Microsoft VBScript Regular
Expressions 5.5 par ex.)
...
et obtenir le tableau t avec la méthode adéquate de l'objet RegExp...

--
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:
#
Re..
Ben non,,,
Je suis encore sous le bon et vieux xl 97
JJ

"Pascal Engelmajer" a écrit dans le
message news:
Salut Jacky,
as-tu essayé Split (à partir de Excel 2000) :
ce qui doit donner à peu près ....
.../...
Dim t
.../...
Line Input #1, numero
t=Split(numero,"|")
if t(0)=res then
nom=t(1)
prenom=t(2)
end if
.../...
je pense que ça doit gagner en vitesse
--
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:

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























Avatar
Jacky
Re..
Pff..
Alors là, cela revient à me parler en chinois
Y aurait pas plus simple que mon code pour qu'une vieille petite tête comme
la mienne puisse comprendre??
Ou alors je garde et m'en contente, bien que cela me désole.
JJ

"Pascal Engelmajer" a écrit dans le
message news:
Salut,
dans ce cas il faut incorporer un bibliothèque d'expressions régulière...
(Microsoft VBScript Regular Expressions 1.0 ou Microsoft VBScript Regular
Expressions 5.5 par ex.)
...
et obtenir le tableau t avec la méthode adéquate de l'objet RegExp...

--
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:
#
Re..
Ben non,,,
Je suis encore sous le bon et vieux xl 97
JJ

"Pascal Engelmajer" a écrit dans le
message news:
Salut Jacky,
as-tu essayé Split (à partir de Excel 2000) :
ce qui doit donner à peu près ....
.../...
Dim t
.../...
Line Input #1, numero
t=Split(numero,"|")
if t(0)=res then
nom=t(1)
prenom=t(2)
end if
.../...
je pense que ça doit gagner en vitesse
--
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:




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



























Avatar
Pascal Engelmajer
C'est pas très compliqué et il faut tester la vitesse
avec outils/références il faut cocher Microsoft VBScript RegExp 5.5 ou 5.6
(le télécharger éventuellement chez MS)
vite faut sur le gaz un exemple
Dim r As regexp
Dim i as Integer
Dim t()
Set r = New regexp
r.Global = True
r.IgnoreCase = True
r.Pattern = "([^|]+)|"
Set res = r.Execute("22 |test |prenom| 33| 33| 33| 33| 33 ")
Redim t(res.Count)
r.Pattern = "|"
For i = 0 To res.Count - 1
t(i)= r.Replace(res(i), "")
Debug.Print i & " => " & t(i)
Next i
pour remplacer Split absent de 97
--
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:
ej8$
Re..
Pff..
Alors là, cela revient à me parler en chinois
Y aurait pas plus simple que mon code pour qu'une vieille petite tête
comme

la mienne puisse comprendre??
Ou alors je garde et m'en contente, bien que cela me désole.
JJ

"Pascal Engelmajer" a écrit dans le
message news:
Salut,
dans ce cas il faut incorporer un bibliothèque d'expressions
régulière...


(Microsoft VBScript Regular Expressions 1.0 ou Microsoft VBScript
Regular


Expressions 5.5 par ex.)
...
et obtenir le tableau t avec la méthode adéquate de l'objet RegExp...

--
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:
#
Re..
Ben non,,,
Je suis encore sous le bon et vieux xl 97
JJ

"Pascal Engelmajer" a écrit dans
le



message news:
Salut Jacky,
as-tu essayé Split (à partir de Excel 2000) :
ce qui doit donner à peu près ....
.../...
Dim t
.../...
Line Input #1, numero
t=Split(numero,"|")
if t(0)=res then
nom=t(1)
prenom=t(2)
end if
.../...
je pense que ça doit gagner en vitesse
--
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:




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































Avatar
Clément Marcotte
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