Extraire du texte d'un fichier txt [Résolu]

Signaler
Messages postés
17
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
23 novembre 2006
-
 ucfoutu -
bonjour à tous

je ne suis pas tres expérimenté en VBA excel, mais je souhaiterais faire ceci :

- j'ai un fichier texte "test.txt" contenant qqchose de ce type :
"blabla 123456 azerty"

- j'aimerais extraire de ce fichier le texte contenu entre "blabla" et "azerty" : soit "123465" et le placer dans une cellule excel

ca parait simple expliqué comme ca, mais pour un debutant, c'est pas si évident que ca

merci à celles et ceux qui pourraient m'aider dans cette recherche

A bientot

Cruzy

37 réponses

Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Plus court et plus simple pour la même chose:



Private Sub CommandButton1_Click()


Dim TaString As String
Dim TablString() As String
Dim keff As String
Dim sigma As String


Open "C:\Analyse.txt" For Input As #1


NbLignes = 0


While Not EOF(1)


Line Input #1, TaString


  If Left(TaString, 21) = "number of batch used:" Then


     TablString = Split(TaString, " ", -1, vbTextCompare)
     keff = TablString(6) & TablString(7) & TablString(8)
     sigma = TablString(10) & TablString(11) & TablString(12)
     MsgBox (keff & Chr(10) & sigma)


  End If


Wend


Close #1


End Sub

 Drikce 06
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Salut, si tu fais une petite recherche sur le site tu n'auras aucun mal à trouver ce que tu cherches:
Sources pour lire un fichier text.
Et pour récupérer 123456 la fonction Split.

 Drikce 06
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Salut,
Je pense que tu devrais chercher un peu sur le site dans la section code tu devrais trouver assez rapidement, c'est bourré d'exemple.

Si tu ne trouve toujours pas , explique un peu mieux ou tu coinces
- Est ce que tu sais récupérer le contenu d'un fichier?
- Est ce que tu sais parcourir une chaine de caracteres?

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
[auteurdetail.aspx?ID=786090 >Drikce06]

(Salut) => TU VAS PAS RECOMMENCER HEIN!!!!




@+: Ju£i?n


Pensez: Réponse acceptée
Messages postés
17
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
23 novembre 2006

> jrivet

non, je ne sais pas recuperer le contenu d'un fichier
et oui, je sais parcourir une chaine de caractere, mais uniquement quand ces caractere sont deja dans une cellule excel

si j'arrivais à copier coller mon fichier txt dans une cellule, y'aurais alors pu de probleme ;)

merci à vous, je vais parcourir la section codes

Cruzy
Messages postés
50
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
23 janvier 2008

salut,
Un bon moyen lorsqu'on commence est d'utiliser l'enregistreur de macro pour voir comment c'est code..
Dans ton cas ouvre l'enregistreur puis
Data/ Get External data / Import Text file puis tu te laisses guider ensuite ca voir ce que ca donne en VBA et customise a ta guise...

good luck

carvals
Messages postés
17
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
23 novembre 2006

>carvals

chui vraiment une bille ... je trouve pas "data"
Messages postés
50
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
23 janvier 2008

Ds la barre d'outils (excel non pas l'editeur VBA) il y a un onglet Data ou Donnees (je crois) si c'est en francais.

A+
carvals
Messages postés
17
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
23 novembre 2006

heuuuuuuuuuuuuuu

ouai, d'accord, ca je savais faire (quand meme) : j'aimerais faire ca en VBA en fait :D

parce que quand j'ai 100 fichiers à faire de cette facon, c'est pas tres rapide "à la main" !

merci quand meme
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour à tous....

Exemple avec la function split
chaine = "blabla 123456 azerty"
var = Split(chaine, " ")
MsgBox var(0) &vbCrLf& var(1) &vbCrLf& var(2)

[mk:@MSITStore:D:\Mes%20scripts%20vbs\SCRIPT56.CHM::/html/vsfctjoin.htm Join, fonction]

<!--Footer Start-->

Caractéristiques requises
[mk:@MSITStore:D:\Mes%20scripts%20vbs\SCRIPT56.CHM::/html/vtoriversioninformation.htm Version 2]

<!--NONSCROLLING BANNER END-->
Renvoie un tableau à une dimension commençant par zéro contenant le nombre spécifié de sous-chaînes.

Split( [ expression][,[ delimiter][,[ count][,[ compare]]]] )

Arguments
* expression : Expression de chaîne contenant des sous-chaînes et des séparateurs. Si l'argument expression est une chaîne de longueur nulle, la fonction Split renvoie un tableau vide, c'est-à-dire un tableau ne comportant ni éléments, ni données.
* delimiter : Facultatif. Caractère de chaîne utilisé pour identifier les limites de sous-chaîne. S'il est omis, le caractère espace (" ") est utilisé comme séparateur par défaut. Si l'argument delimiter est une chaîne de longueur nulle, un tableau à un élément contenant toute la chaîne expression est renvoyée.
* count : Facultatif. Nombre de sous-chaînes à renvoyer ; -1 indique que toutes les sous-chaînes sont renvoyées.
* compare : <dd>Facultatif. Valeur numérique indiquant le type de comparaison à utiliser lors de l'évaluation des sous-chaînes. Reportez-vous à la section Paramètres.
Paramètres
L'argument compare peut prendre les valeurs suivantes :

Constante |Valeur |Description |----
vbBinaryCompare, 0, Effectue une comparaison binaire., ----
vbTextCompare, 1, Effectue une comparaison texte.

Notes
L'exemple ci-dessous utilise la fonction Split pour renvoyer un tableau à partir d'une chaîne. La fonction effectue une comparaison textuelle du délimiteur et renvoie toutes les sous-chaînes.

Dim MyString, MyArray, Msg
MyString = "VBScriptXestSuper!"
MyArray =
 Split( 
MyString
,
"x"
,
-1
,
1
)

' MyArray(0) contient "VBScript".
' MyArray(1) contient "est".
' MyArray(2) contient "super !".
Msg = MyArray(0) & " " & MyArray(1)
Msg = Msg & " " & MyArray(2)
MsgBox Msg

[mk:@MSITStore:D:\Mes%20scripts%20vbs\SCRIPT56.CHM::/html/vsfctjoin.htm Join, fonction]

<!--Footer Start-->

Caractéristiques requises
[mk:@MSITStore:D:\Mes%20scripts%20vbs\SCRIPT56.CHM::/html/vtoriversioninformation.htm Version 2]

<!--NONSCROLLING BANNER END-->
Renvoie un tableau à une dimension commençant par zéro contenant le nombre spécifié de sous-chaînes.

Split( [ expression][,[ delimiter][,[ count][,[ compare]]]] )

Arguments
* expression : Expression de chaîne contenant des sous-chaînes et des séparateurs. Si l'argument expression est une chaîne de longueur nulle, la fonction Split renvoie un tableau vide, c'est-à-dire un tableau ne comportant ni éléments, ni données.
* delimiter : Facultatif. Caractère de chaîne utilisé pour identifier les limites de sous-chaîne. S'il est omis, le caractère espace (" ") est utilisé comme séparateur par défaut. Si l'argument delimiter est une chaîne de longueur nulle, un tableau à un élément contenant toute la chaîne expression est renvoyée.
* count : Facultatif. Nombre de sous-chaînes à renvoyer ; -1 indique que toutes les sous-chaînes sont renvoyées.
* compare : <dd>Facultatif. Valeur numérique indiquant le type de comparaison à utiliser lors de l'évaluation des sous-chaînes. Reportez-vous à la section Paramètres.
Paramètres
L'argument compare peut prendre les valeurs suivantes :

Constante |Valeur |Description |----
vbBinaryCompare, 0, Effectue une comparaison binaire., ----
vbTextCompare, 1, Effectue une comparaison texte.

Notes
L'exemple ci-dessous utilise la fonction Split pour renvoyer un tableau à partir d'une chaîne. La fonction effectue une comparaison textuelle du délimiteur et renvoie toutes les sous-chaînes.

Dim MyString, MyArray, Msg
MyString = "VBScriptXestSuper!"
MyArray =
 Split( 
MyString
,
"x"
,
-1
,
1
)

' MyArray(0) contient "VBScript".
' MyArray(1) contient "est".
' MyArray(2) contient "super !".
Msg = MyArray(0) & " " & MyArray(1)
Msg = Msg & " " & MyArray(2)
MsgBox Msg

jean-marc
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Re,

Carton rouge JMO pour la non maitrise du copier/coller.......
Sorry,
jean-marc
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
'Ceci suggère que ce que tu veux récupérer est la première ligne du fichier texte


Dim TaString As String
Dim TablString() As String


Open "C:\Analyse.txt" For Input As #1


Input #1, TaString


TablString = Split(TaString, " ")
TaString = TablString(1)


Close #1

 Drikce 06
Messages postés
17
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
23 novembre 2006

merci jean-marc

ca, je sais le faire, mais quand le texte est deja dans une cellule ou feuille excel

mais qu'en est-il lorsque ce texte est placé dans un fichier txt distinct

merci
Messages postés
17
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
23 novembre 2006

ah, merci Drikce 06

la ca m'aide vraiment, je vais bidouiller ca

qu'en est-il si je veux que VBA me recherche la ligne où est situé mon texte recherché ?

merci encore
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Si tu connais le numéros de la ligne remplace 1 par ce numéro.

 Drikce 06
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
euh!!!! désolé j'ai dit une bétise!!! je regarde!

 Drikce 06
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
Salut,

Avec ceci, tu devrais déjà y voir plus clair.




Dim s As String
Dim tablo() As String

Open "monfichier.txt" For Input As #1
 While not EOF(1) ' Tant qu'on est pas au bout du fichier
  Line Input #1,s ' Lecture de chaque ligne
  tablo = Split(s," ") ' découpage de la ligne suivant les espaces
  MsgBox "La donnée recherchée sur cette ligne est " & tablo(1)
 Wend
Close #1







Manu


--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Sinon petite variante (sans le split) qui stock toutes les lignes dans un tableau : c'est plus long mais comme je cherche depuis tout à l'heure je le met comme même, car en fait j'avais jamais fais ça en VBA (ou VB6). En tout cas, comme quoi les recherches sur le site sont fructueuses!


Dim NbLignes As Integer


Private Sub CommandButton1_Click()


Dim TaString As String
Dim TablString()


compte_ligne ("C:\Analyse.txt")


Open "C:\Analyse.txt" For Input As #1


ReDim Preserve TablString(NbLignes)


For i = 1 To NbLignes
Line Input #1, TaString
TablString(i) = TaString
Next i


Close #1


For i = 1 To NbLignes
MsgBox TablString(i)
Next i


End Sub


Sub compte_ligne(Chemin_complet As String)


On Error GoTo ANNULER


Open Chemin_complet For Input As #1


While Not EOF(1)
Line Input #1, texte
NbLignes = NbLignes + 1
Wend


Close #1


ANNULER:


End Sub





 Drikce 06
Messages postés
17
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
23 novembre 2006

bon merci bcp les gars, je crois que je suis pas fait pour le VBA, j'y arrive trop pas

je retourne à mon flash
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Si tu crée un userfrom avec un bouton de commande et que tu fais un copier coller de mon code en remplaçant  ("C:\Analyse.txt") par le chemin de ton fichier texte, tu auras ce que tu veux. De même avec le code de econs!

 Drikce 06