Comment traiter un fichier txt (csv)?

Signaler
Messages postés
19
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
26 octobre 2007
-
Messages postés
42
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2010
-
Bonjour à tous,

a partir d'un fichier excel convertit en txt (avec des point virgules pour le séparateur) je dois venir lire et écrire des données dans ce fichier txt. Je dois passé par le txt car le poste ou sera installé le programme ne dispose pas de licence office (excel entre autre). Cependant, le fichier txt (une fois modifié) sera exploité par un autre pc qui dispose de excel.

En vba je connais les syntaxes pour lire écrire dans une cellule et surtout naviguer en ligne et colone. par contre dasn un fichier txt avec des point virgule je ne connais rien. pouvez vous svp m'aider en répondant à ces questions?

Comment ouvrir un fichier txt?
Comment accede t on à la ligne i et colone j dans un txt (avec les points virgules)?
Comment trouver une chaine de caractère "toto" dans une colone?
Comment écrire dans un txt exemple "toto" à la ligne i et colone j ?
Comment sauvegarder après les modifications faites?

Merci à tous pour vos réponses

10 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Fais des recherches sur
Open
Line Input
Split
Instr

éventuellement Trim, Mid

MPi²
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
52
Salut,
Pour la lecture du fichier regarde ce topicouvert 2h avant le tien...
Pour le reste regarde ce que te propose [auteur/MPI/6078.aspx MPi]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
19
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
26 octobre 2007

<li>bonjour à tous j'ai regardé le topic jrivet

Dim T() As String, i As Long, FN As Long

FN = FreeFile
Open "Fichier.txt" For Input As #FN
T = Split(Input(Lof(FN), #FN), vbCRLF)
Close #FN
For i = i To UBound(T)
Msgbox T(i)
Next

pour l'ouverture du fichier c ok
mais honnetement je comprend pas ce qu'il fait? c quoi FN?  a quoi sert la fonction Split?

je ne comprend pas comment accéder à une ligne et une colone spécifique?
Pouvez vous m'aider en  postant un bout de code pour les routines ci dessous

Comment ouvrir un fichier txt? OK
Comment accede t on à la ligne i et colone j dans un txt (avec les points virgules)?
Comment trouver une chaine de caractère "toto" dans une colone j?
Comment écrire dans un txt exemple "toto" à la ligne i et colone j ?
Comment sauvegarder après les modifications faites?

Merci à tous pour votre aide.
</li>
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
FN = Freefile
Freefile récupère un nombre disponible (1 à 256) pour l'ouverture d'un fichier en utilisant la méthode Open

Le bout de code est, comme on le voit souvent, une méthode comprimée et peu lisible.
Ça économise plusieurs lignes de code, mais ça ne donne, en général, pas plus de vitesse ou de rendement... et là je ne parle pas du mode Binary qui est plus rapide normalement. On pourrait traduire comme suit, enfin pas tout à fait mais bon...

Lire une ligne, utiliser Split avec point-virgule comme séparateur pour créer un tableau avec toutes les données de la ligne et afficher celle qu'on veut

FN = FreeFile 'trouve un numéro non utilisé pour l'ouverture du fichier
Open "Fichier.txt" For Input As #FN
Do Until EOF(FN)                'boucle tout le fichier
    Line Input #FN, strTemp   'lecture d'une ligne, mise dans la variable strTemp
    T = Split(strTemp, ";")       'transposer chaque donnée dans un tableau T
    For i = 0 To UBound(T)   'message de chaque item de la ligne (ou tableau T)
        Msgbox T(i)
    Next
    Stop 'pour arrêter la boucle avant de devenir fou
Loop
Close #FN

MPi²
Messages postés
19
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
26 octobre 2007

Hello MPi,
ok la je comprend mieux, par contre msgbox T(i) renvoie la ligne complete.

Comment fait tu pour lire une colone particuliere de la ligne en question?

exemple mon fichier:

nom;prénom;age
boby;lapointe;50
jo;toto;19

comment accéder à "toto" seulement et pas à "jo toto 19" ?

tu boucle 3 fois (pour aller à ligne N°3) et après?

maintenant si je veux changer toto en tatan, quelle est la syntaxe pour écrire au bon endroit?

Merci et désolé pour le harcelement de questions (mais après tout, ca sert à ca un forum  )

Encore merci et bon appétit
Messages postés
42
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2010

Bonjour,

"exemple mon fichier:

nom;prénom;age
boby;lapointe;50
jo;toto;19

comment accéder à "toto" seulement et pas à "jo toto 19" ?"

1°) puisque tu sais que ton séparateur est le ";"
2°) puisque tu sais que "toto" se trouve après le ";" numéro un

tu as trouvé les bonnes questions et donc forcement les bonnes réponses.

Bon courage
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Salut djodjo,
Le Msgbox dans mon bout de code ne retourne pas la ligne mais chaque partie de cette ligne.

Si tu utilises le code que jrivet t'a suggéré, tu devras utiliser 2 tableaux. Un pour séparer le fichier à chaque saut de ligne, ce que tu as déjà ... et un autre pour séparer chaque ligne en ses parties

FN = FreeFile
Open "Fichier.txt" For Input As #FN
    T = Split(Input(Lof(FN), #FN), vbCRLF)
Close #FN
'Ici, T contient tout le fichier. Chacun de ses éléments est une ligne

For i = i To UBound(T) 'lecture de chaque ligne (élément du tableau)
    T2 = Split(T(i), ";")   'séparer cette ligne aux points-virgules
    For J = 0 To Ubound(T2)  'lecture du 2eme tableau qui contient les éléments
        Msgbox T2(i)
    Next
Next

MPi²
Messages postés
19
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
26 octobre 2007

bonjour,

Cool , merci pour l'astuce du 2éme tableau. J'ai créer un autre tableau cellule pour stocker le contenu du fichier et ainsi avoir acces à n'importe quel valeur comme dans une cellule excel avec le code suivant

Sub test2()


Dim cellule(80, 80) '




FN = FreeFile
Open "fichier.txt" For Input As #FN
    T = Split(Input(LOF(FN), #FN), vbCrLf)
Close #FN
'Ici, T contient tout le fichier. Chacun de ses éléments est une ligne




For i = i To UBound(T) 'lecture de chaque ligne (élément du tableau)
    T2 = Split(T(i), ";")   'séparer cette ligne aux points-virgules
   
    For j = 0 To UBound(T2)  'lecture du 2eme tableau qui contient les éléments
        'MsgBox T2(j)
        'MsgBox T(j)
       
        cellule(i + 1, j + 1) = T2(j) 'on remplie le tableau cellule de chaque élément ligne par ligne
        'MsgBox "" & cellule(i, j) & ""
    Next
Next


Stop

Maintenant le probleme réside dans l'écriture du fichier txt au bon endroit.
Dans le fichier exemple et avec le code ci dessus cellule(3,2) vaut toto. comment écrire dans le fichier txt tatan à la place de toto et sauvegarder.

Je sais qu'il faut utiliser du genre Print #1, "tatan" mais je ne sais pas comment indiquer d'écrire à la 3éme ligne et après le 1er ";" (ou avant le 2ème ";")

Merci à tous et bon week end.
Messages postés
42
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2010

Bonjour,

Pour remplacer ton "toto" par "tantan" il suffit de faire une recherche dans ton tableau et de remplacer quand tu as trouver la valeur. Il existe quelques instruction très bien faites pour cela.
Quand à l'ecriture du fichier il suffit de remplacer le "input As xxx" par un "random As xxx" ( "output" detruirait le fichier).
Après tu concatenes ton tableau 3 cel par 3 cel sans oublier les ";" entre :

LigneAEcrire = tableau(X,1) & ";" & tableau(X+1,2) & ";" & tableau(X+2,3)
print LigneAEcrire

A bientôt
Messages postés
42
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2010

OUPS.......
désolé :
LigneAEcrire = tableau(X,1) & ";" & tableau(X,2) & ";" & tableau(X,3)