djodjo2050
Messages postés19Date d'inscriptiondimanche 11 mars 2007StatutMembreDernière intervention26 octobre 2007
-
24 oct. 2007 à 00:46
FaroukVazaha
Messages postés42Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention11 septembre 2010
-
26 oct. 2007 à 19:01
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?
djodjo2050
Messages postés19Date d'inscriptiondimanche 11 mars 2007StatutMembreDernière intervention26 octobre 2007 24 oct. 2007 à 16:56
<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?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 25 oct. 2007 à 03:32
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²
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 25 oct. 2007 à 23:40
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
djodjo2050
Messages postés19Date d'inscriptiondimanche 11 mars 2007StatutMembreDernière intervention26 octobre 2007 26 oct. 2007 à 16:53
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 ";")
FaroukVazaha
Messages postés42Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention11 septembre 2010 26 oct. 2007 à 18:58
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 :