Dudulle32
Messages postés42Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention31 janvier 2014
-
11 juil. 2008 à 07:12
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDerniè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:
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.
A voir également:
Recuperer et mettre en forme des données issues d'un fichier txt.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 11 juil. 2008 à 08:18
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
Dudulle32
Messages postés42Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention31 janvier 2014 11 juil. 2008 à 07:14
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).
Dudulle32
Messages postés42Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention31 janvier 2014 11 juil. 2008 à 09:32
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.