Import de plusieurs fichiers txt

Fab57330

XLDnaute Junior
Bonsoir.
Je viens aujourd'hui vers vous car j'ai un petit soucis. Je dois importer 3 fichiers txt (numérotés de 1 à 3). Chaque fichier fait plus de 700.000 lignes (donc j'utiliser EXCEL 2007). Dans ce fichier, j'ai une colonne apellée "VITESSE", qui quelque fois a des valeurs "0". Toute les autres colones ont des fois des NaN.

Le but est en fait de réaliser un import des fichiers, les uns a prés les autres, cependant uniquement des lignes ou la vitesse n'est pas égale a zero, et ou dans les autres colones je n'ai pas de valeurs NaN.

On m'a conseiller d'utiliser la fonction suivante:

Code:
Open "l:/1.txt" For Input As #1
 

Do While Not EOF(1)
    Input #1, Ligne
    NBLigne = NBLigne + 1                           'récupère le nombre de ligne du fichier
    
    tableau = Split(Ligne, vbTab)
    
    Sheets(1).Cells(NBLigne, 1) = tableau(0)
    Sheets(1).Cells(NBLigne, 2) = tableau(1)
        
Loop
 
Close

Cependant, je ne trouve pas beaucoup de documentation sur cette fonction, du moins avec ce que je sougaite faire.

Quelqu'un pourrait-il m'aider SVP?

Merci,
Fab.
 

jp14

XLDnaute Barbatruc
Re : Import de plusieurs fichiers txt

Bonjour
Bonjour

Ci dessous le code commenté
Code:
Open "l:/1.txt" For Input As #1 ' ouverture du fichier "l:/1.txt" pour lecture  séquentielle avec pour nom au niveau du programme 1
 

Do While Not EOF(1) ' tant que l'on n'a pas atteint la fin du fichier n° 1
    Input #1, Ligne ' lecture du fichier 1, jusqu'au séparateur (code ascii 10,13)
    NBLigne = NBLigne + 1                           'récupère le nombre de ligne du fichier 
   
    tableau = Split(Ligne, vbTab)' décomposition du texte en prenant comme séparateur une tabulation et inscription dans un tableau
   
    Sheets(1).Cells(NBLigne, 1) = tableau(0)' écriture dans la feuille excel à la ligne NBLigne, colonne 1 du contenu 
    Sheets(1).Cells(NBLigne, 2) = tableau(1)' du premier et deuxième élément du tableau
       
Loop
 
Close

Il faudra rechercher dans le tableau les variables désirées

For i = lbound(tableau) to ubound(tableau)

If tableau(i) = "" then

End if
next i


JP
 
Dernière édition:

Fab57330

XLDnaute Junior
Re : Import de plusieurs fichiers txt

La valeur l'est toujours effectivement. Cependant je pense que le point bloquant pour moi est en fait le code de base.

Avec le code de base que j'ai noté et que vous avez commenté, il importe un fichier dans la feuille EXCEL ligne par ligne?
 

jp14

XLDnaute Barbatruc
Re : Import de plusieurs fichiers txt

Bonsoir

Le code suivant permettra de passer à la ligne suivante
NBLigne = NBLigne + 1
Par contre si on relance la procédure la procédure recommencera a la ligne 1.
En remplaçant le code ci dessus par
Sheets(1).Range("A" & Sheets(1).Rows.Count).End(xlUp).Row +1 les lignes seront remplies au fur et à mesure.


JP
 
Dernière édition:

Fab57330

XLDnaute Junior
Re : Import de plusieurs fichiers txt

Je comprends dans le code ci-dessous la première partie avant le signe EGAL.
Code:
Sheets(1).Cells(NBLigne, 2) = tableau(0)
Sheets(1).Cells(NBLigne, 2) = tableau(1)

Cependant, je ne comprends pas ce que fait la commande "tableau(0)" puis "tableau(1)".

Merci d'avance,
Fab.
 

jp14

XLDnaute Barbatruc
Re : Import de plusieurs fichiers txt

Bonjour

Le code "split" transforme une chaine de caractère en tableau
Exemple:
tableau = Split(Ligne, " ")
Ligne= "aaaa bbbbb cccccc ....... ddddd" le séparateur étant l'espace. On peut définir tout autre séparateur
Le code donnera
tableau(0) = aaaa
tableau(1) = bbbbb
................
tableau(n) =ddddd

JP
 

jp14

XLDnaute Barbatruc
Re : Import de plusieurs fichiers txt

Bonjour

Un tableau est comme une colonne excel, ensuite dans cette colonne on trouve des lignes.
Tableau(0) correspond à la première ligne
Tableau(1) correspond à la deuxième ligne
Tableau(10) correspond à la onzième ligne
.........................

JP
 

Fab57330

XLDnaute Junior
Re : Import de plusieurs fichiers txt

Bonsoir.

Donc dans mon cas, si je souhaite importer la ligne scrutée par le fichier, je dois mettre tableau(NBLigne), avec "NBLigne" correspondant a la ligne scrutée apr la macro dans le fichier txt. J'ai bien compris?

Merci d'avance,
Fab.
 

jp14

XLDnaute Barbatruc
Re : Import de plusieurs fichiers txt

Bonjour

Un fichier informatique est plus complexe, car le fichier est vu à travers un programme.
La structure d'un fichier va dépendre du programme.
Dans le cas d'un fichier dit Texte, comme cette réponse, comporte des mots séparés par des espaces, et quand on passe à la ligne avec la touche entrée on rajoute un code (retour chariot CR Ligne suivante LF manipulation effectué avec les machine à écrire).
Les différentes lignes de texte sont mise séquentiellement en mémoire.

Le code Input #1, Ligne permet de lire une ligne, ensemble de mots limités par CRLF

Le code Split va mettre dans un tableau les mots en fonction du séparateur.
"Dans le cas d'un fichier dit Texte" on trouvera donc "Dans" tableau(0) si le séparateur est l'espace.
Pour récupérer la valeur de la vitesse il faut connaitre sa position dans une ligne qui à priori est toujours la même:
"j'ai une colonne appelée "VITESSE""

Bon Week End

JP
 

Fab57330

XLDnaute Junior
Re : Import de plusieurs fichiers txt

Bonjour.

Effecivement, j'ai une colone vitrsse toujours a la même place.
Cependant, je dois importer toute les lignes, sauf celle ou la vitesse =0 et ou l'une des valeurs de la ligne contient "NaN".

Ceci est réalisable je pense, mais je ne vois pas comment...
 

jp14

XLDnaute Barbatruc
Re : Import de plusieurs fichiers txt

Bonjour

Ci dessous un code qui devrait réaliser l'opération
Code:
Private Sub import()
Dim i As Long
Dim PasEnregistrement As Boolean

Open "classeur2.txt" For Input As #1
 

Do While Not EOF(1)
    Input #1, Ligne
                           'récupère le nombre de ligne du fichier
    PasEnregistrement = False
    tableau = Split(Ligne, vbTab)
    If LBound(tableau) <> UBound(tableau) Then
        For i = LBound(tableau) To UBound(tableau)
            If tableau(i) = "NaN" Then
                PasEnregistrement = True
                Exit For
            End If
        Next i
        ' vitesse colonne 5
        If PasEnregistrement = False And tableau(4) <> 0 Then
            NBLigne = NBLigne + 1
            For i = LBound(tableau) To UBound(tableau)
                Sheets(1).Cells(NBLigne, i + 1) = tableau(i)
            Next i
        End If
    End If
Loop
 
Close #1
End Sub


A tester

JP
 

Fab57330

XLDnaute Junior
Re : Import de plusieurs fichiers txt

Bonjour.
Merci pour votre aide. Je vais essayer et vous tiens informé.

A ce qui parrait, utiliser la fonction ci-dessus permet d'accélérer l'import (surtout que j'ai 700.000 lignes et que avant je faisait tout ca par macro: environs 100 lignes...)

Fabrice.
 

Discussions similaires

Réponses
11
Affichages
545

Statistiques des forums

Discussions
312 472
Messages
2 088 710
Membres
103 929
dernier inscrit
Tangerine9