Recuperer et mettre en forme des données issues d'un fichier txt. [Résolu]

Messages postés
42
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
31 janvier 2014
- - Dernière réponse : jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
- 11 juil. 2008 à 11:41
Bonjour à tous.

Je travaille actuellement sur un projet qui m'impose de recuperer et mettre en forme des données issues d'un fichier texte; ce fichier étant généré par un appareil de mesure.

Voici un exemple de ce que l'on peut trouver dans le fichier texte:

Time    Value
0    -27
0,00166666666666667    -25
0,00333333333333333    -26
0,005    -26
0,00666666666666667    -26
0,00833333333333333    -27
0,01    -32
0,0116666666666667    -25
0,0133333333333333    -26
0,015    -28

La 1ere valeur de chaque ligne designe un temps en seconde, la 2eme une valeur. Le fichier continue comme ça sur 18000 lignes environ.

Mon probleme est le suivant; je voudrais recuperer ces données et les ranger par cellules afin de pouvoir les exploiter sur excel, par exemple pour le debut du fichier je veux recuperer la valeur 0 dans la cellule A2 et la valeur -27 dans la cellule B2, puis la valeur0,00166666666666667dans la cellule A3 et la valeur -25 dans la cellule B3 etc

Bien sur je peux importer les données avec la fonction integrée de Excel et definir manuellement les colonnes, mais je voudrais que l'ensemble de la procedure d'importation se fasse automatiquement (un simple bouton à presser).

Pour l'instant j'ai ce code; dans mon exemple j'ai ajouté une condition sur le n° de ligne pour n'importer qu'une ligne sur 100 (je n'ai pas besoin d'autant de valeurs) :

'determine le fichier à ouvrir

chemin = Application.GetOpenFilename("Fichiers texte(*.txt), *.txt")
If chemin <> FAUX Then MsgBox "Ouverture de " & chemin

'affiche le chemin du fichier en d4

Cells(4, 4) = chemin
   
' ouvre le fichier et stoque les infos dans la variable textline
' stoque le n° de ligne dans la variable ligne

ligne = 1

Open chemin For Input Access Read As 1
Do While Not EOF(1) ' Loop until end of file.
Line Input #1, textline

'Si le n° de ligne est divisible par 100 importe la valeur de textline dans la cellule (ligne/100),1

If (Int(ligne / 100)) - (ligne / 100) = 0 Then
Cells(ligne / 100, 1) = textline
End If

' incremente le n° de ligne
ligne = ligne + 1

Loop
Close #1

Bien sur ce code importe la totalité de la ligne dans la cellule de la 1ere colonne à chaque fois, ce qui ne me permet pas d'utiliser les données (pour en faire un graph par exemple).

Je remercie d'avance toute personne qui pourra m'indiquer une procedure utilisable.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
45
3
Merci
Salut,

Deux choses:

1- "Tout" ce qui est fait manuellement sous excel peu être fait par code. l'importation comprise. utilises l'enregistreur de macro pour voir comment faire.

2- Si tu veux utiliser ton code, utilises Split pour séparer Temps et valeur

exemple pour l'importation avec Tab
Call Workbooks.OpenText("C:\PP.txt", xlWindows, 1, xlDelimited, xlDoubleQuote, False, True

@+: Ju£i€n
Pensez: Réponse acceptée

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jrivet
Messages postés
42
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
31 janvier 2014
0
Merci
Une chose que j'ai oublié de preciser: La 1ere valeur de chaque ligne est separée de la 2eme par une tabulation, mais je peux configurer l'appareil de mesure pour modifier le separateur (un ; par exemple).
Commenter la réponse de Dudulle32
Messages postés
42
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
31 janvier 2014
0
Merci
Split; c'est la fonction qu'il me manquait...

Je dois obligatoirement passer par du code car il faut que je fasse une mise en forme et poser des conditions à partir de certaines valeurs que je vais récuperer.

Par contre ça n'a pas l'air de marcher avec une tabulation, mais en remplaçant quelques lignes par des ";" ça passe.
Merci encore pour ta réponse, et pour la rapidité avec laquelle tu me l'as donnée.
Commenter la réponse de Dudulle32
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
45
0
Merci
Salut,
Y a pas de quoi, content d'avoir pu te dépanner.
@+ sur le forum: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet