Importer partiellement .TXT trop volumineux sinon

Bonjours à toutes et tous,

Voila, je suis etudiant, et je cherche dans le cadre d'un projet avec un indistriel à importer partiellement un fichier .txt:

J'ai déjà chercher 45 min sur le forum mais je ne trouve pas de reponse exacte à mon pb

Je reconnais etre débutant en marco, mais je ne demande qu'a apprendre.

Le système d'acquisition de données de l'industriel me sort un fichier TXT de 12 Mo bcp trop gros pour etre ouvert sous excel.

De plus le fichier text me sort dans ce fichier un tas d'informations dont je me fiche pour le post traitement.

Voila la forme du fichier txt:

Il y a 29 steps (donc 29 fois une meme série d'information collées à la suite les unes des autres)

Chaque série à la forme suivante:

Time Step 0, 25200 seconds

Part Ave Temp Min Temp Max Temp

(deg C) (deg C) (deg C)

1 (front) 25.9999 26 26

1 (back) 25.9999 26 26

2 (front) 25.9998 26 26

2 (back) 25.9998 26 26

420 (no geom) 26 N/A N/A

421 (no geom) 26 N/A N/A

422 (no geom) 26 N/A N/A

423 (no geom) 26 N/A N/A

'Ceci en vert est la partie qui m'interesse et que je veux garder en excel.

'ensuite il y a une partie de rappel de condition et de géometrie mais dont je me fiche

'et que je voudrais ne pas copier

Part 1

(front) Heat Rate (W)

QcondNet 0

QconvNet 0

QconvIn 0

QconvOut 0

Part 423

(no geom) Heat Rate (W)

QcondNet 0

QconvNet 0.0714269

QconvIn 2.52466

QconvOut 2.45323

QradNet 0

QradIn 0

QradOut 0

QadvNet 0

QadvIn 0

QadvOut 0

QsunNet 0

QimpNet 0

'Puis recommence une serie à garder

Time Step 1, 25500 seconds

Part Ave Temp Min Temp Max Temp

(deg C) (deg C) (deg C)

1 (front) 26.0057 26.0049 26.0184

1 (back) 26.0048 26.0041 26.0185

2 (front) 26.0054 26.0049 26.0191

2 (back) 26.0046 26.0041 26.0192

Le but serait donc d'importer dans excel que la partie verte, (et pas la rouge)

Je penser faire une macro qui:

1 - lirait les lignes du fichier txt puis

2 - dès qu'il detecte le mot " Time Step " il copirait dans excel

3 - jusqu'au mot Part 1

puis loop --> jusqu'a la fin du fichier de 12 Mo

Pourriez vous m'aider à faire une telle macro simpliste ou

m'indiquer un poste ou je pourrai trouver des elements de reponse.

Je vous en remercie d'avance.

21exe-light.zip (1.93 Ko)

Salut le forum

Burn7676 comme nouveau membres

Pour lancer le débat...

L'exemple ci dessous t'écrira le fichier txt dans la feuille actif.

Cette ligne est à adapter

Open "d:\forum\exe_light.txt" For Input As #1

Sub OuvertureFichier()

Dim Val_Ligne As String
Dim Compteur As Long

On Error GoTo Ferme

Open "d:\forum\exe_light.txt" For Input As #1

Compteur = 0

Do While Not EOF(1)
Line Input #1, Val_Ligne
ActiveSheet.Range("A1").Offset(Compteur, 0).Value = Val_Ligne
Compteur = Compteur + 1
Loop

Ferme:
Close #1

End Sub

Mytå

Bonjour,

Pour commencer, merci Myta pour ton acceuil

ainsi que pour ta reponse très... matinale

En effet, grace à ton ebauche j'arrive à copier tout le contenu de mon txt dans une feuille excel,

Je vais travailler à present sur les conditions de bouclage:

je copie entre tel et tel mot

puis entre tel et tel mot je ne copie pas.

J'ai neanmoins qq question sur tes lignes de code Myta (c'est juste pour comprendre et pouvoir le faire par moiu même par la suite):

1- tu ecris:

Do While Not EOF(1) --> quel est le role du (1)?

2- y a t'il moyen de voir les lignes de cde de la routine automatique excel qui permet d'importer un fichier txt

notament l'option de se servir de l'espace comme critère de copie dans une nouvelle colonne.

Histoire de m'en inspirer

3- Comment demander à Excel de reconnaitre il une chaine de caratère:

exemple

si je tappe: Do While Not Val_line = " Part 1"

faut il placer la chaine de caratère à reconnaitre (ici :[espace][espace]Part 1) entre des " " ou des ' ' ou des ( ) peut etre encore des [ ]

En fait j'ai plein plein de question mais avant de trop te et vous saouler je vais chercher par moi meme(en plus c'est plus gratifiant en cas de succes)

Encore merci pour ce power start, j'y retourne pour travailler la question.

-- 19 Déc 2009, 00:39 --

Hello à tous

Bon grace aux supers conseils de Myta j'ai pondu qq chose de pas trop mal:

Le principe:

Je lis la ligne N du .TXT

je copie cette ligne du .TXT sous excel à la ligne M

Temps que je ne detecte pas un mot clé ici Part 1

je copie la ligne n+1 du .txt à la ligne m+1 d'Excel

si je detecte le mot Part 1

alors je continue de lire la ligne n+1 du .txt

mais sans la copier dans Excel

et ceux durant une boucle dont je definis manuellement la taille

voila la macro:

Sub OuvertureFichier()

Dim Val_Ligne As String
Dim CompteurCopy As Long

Dim TailleBoucle As Long
Dim Decompte As Long

On Error GoTo Ferme

Open "C:\compo_J5_init_29-150.txt" For Input As #1

    TailleBoucle = 4320
    Decompte = TailleBoucle
    CompteurCopy = 1

Do While Not EOF(1)
 Line Input #1, Val_Ligne

     If Val_Ligne = "  Part 1               " Then
             Do While Not Decompte = 0
               Decompte = Decompte - 1
               CompteurDoc = CompteurDoc + 1
              Line Input #1, Val_Ligne
          Loop
           Decompte = TailleBoucle

     Else:
        ActiveSheet.Range("A1").Offset(CompteurCopy, 1).Value = Val_Ligne
        CompteurCopy = CompteurCopy + 1
     End If

Loop

Ferme:
Close #1

End Sub

Pb et questions

1 - question (issue du poste precedent)

dans la cde Do While Not EOF(1) --> quel est le role du (1)?

2- question

comment demander à Excel de prendre les espaces comme indicateur de changement de colonne

merci pour vos reponses.

Bonjour le forum

Bon ca y est j'ai enfin accouché de la version finale de mes lignes de cde.

Pour faire avancer le schmil-blik et pour les novices qui comme moi était temporairement désemparé au début, voici la version finale avec qq commentaires .

Sub OuvertureFichier()

Dim Val_Ligne As String
Dim CompteurDoc As Long
Dim CompteurCopy As Long

Dim TailleBoucle As Long
Dim Decompte As Long

Dim texte() As String
Dim i As Integer
Dim j As Integer

On Error GoTo Ferme

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

    TailleBoucle = 11579       'defini le nb de ligne à suprimer --> à modifier en fct du fichier result
    Decompte = TailleBoucle
    CompteurDoc = 1
    CompteurCopy = 1

Do While Not EOF(1)
 Line Input #1, Val_Ligne

' boucle de supression des lignes de definition de la géometrie
     If Val_Ligne = "  Part 1               " Then
             Do While Not Decompte = 0
               Decompte = Decompte - 1
               CompteurDoc = CompteurDoc + 1
               Line Input #1, Val_Ligne
             Loop

     Else:
          'option permet de suprimer les lignes vides entre chaque pas de calcul Pth
          'If Len(Val_Ligne) = 0 Then GoTo Suite

'Splitage de la partie à garder en 1 mot = une case
          texte = Split(Val_Ligne)
          i = 0
          j = 0
              For i = 1 To UBound(texte)
'supression des espaces pour ne pas avoir de cases vides
                   If texte(i) = "" Then
                   Else
                    j = j + 1
                    Range("A1").Offset(CompteurCopy, j).Value = texte(i)
                   End If
              Next i

       CompteurDoc = CompteurDoc + 1
       CompteurCopy = CompteurCopy + 1
       Decompte = TailleBoucle
Suite:
     End If

Loop

Ferme:
Close #1

End Sub

Merci aux modérateurs et aux habitués de ce forum pour votre initiative de faire vivre ce type de forum

Et merci à Myta pour ton aide précieuse pour démarrer c’est souvent le plus dur et pour tes précédentes réponses à d’autre postes dont je me suis inspiré.

Joyeuses fêtes le forum.

Rechercher des sujets similaires à "importer partiellement txt trop volumineux sinon"