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
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:
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
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)
"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
OK, je vais tester tout ça à tête reposé.
Merci à tous
JJ
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le message
de news:ehxqXR9JEHA.3944@tk2msftngp13.phx.gbl...
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:
Vers le bas de page, 5 ou 6 fonctions personnalisées.
"Jacky" <Jackyenlevez.jaeg@wanadoo.fr> a écrit dans le message de
news:urMSJI6JEHA.952@TK2MSFTNGP12.phx.gbl...
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" <pascal.engelmajer@ilyapa_spam.net> a écrit dans
le
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" <Jackyenlevez.jaeg@wanadoo.fr> a écrit dans le message de
news:
epje8s4JEHA.1388@TK2MSFTNGP09.phx.gbl...
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
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)
"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
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:
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
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)
"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