Import fichiers txt en commençant à la 5 lign

Fermé
pipouche - 29 juil. 2010 à 13:09
 pipouche - 29 juil. 2010 à 15:15
Bonjour,

J'ai trouvé du code pour importer plusieurs fichiers txt, présents dans un même répertoire.
Le problème est que dans ces fichiers, qui ont la même structure, je ne veux pas importer les 4 premières lignes. J'ai essayé avec RowStart ou Range, mais je n'y arrive pas.

Voici le code actuel :

Dim Chemin As String
Dim I As Long
'Chemin du dossier à analyser (à adapter au besoin)
Chemin = ThisWorkbook.Path
'
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
For Each Fichier In Dossier.Files
If Right(Fichier.Name, 3) <> "xls" Then
LireFichier Fichier
End If
Next
'Conversion des données
'Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
'TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
'Semicolon:=False, Comma:=True, Space:=True, Other:=False
'Range("A5").Select
End Sub

Sub LireFichier(Fichier As Object)
Dim NL As Long, Chaine As String
Dim L As Long


'Insère le nom du fichier
L = ActiveSheet.Range("A65536").End(xlUp).Row
Cells(L + 1, 1).Value = Fichier.Name
'Récupère les lignes du fichier
Open Fichier For Input As #1
RowStart = 4
Do While Not EOF(1)
NL = NL + 1
Input #1, Chaine
Cells(L + NL + 1, 1).Value = Chaine
Loop
Close #1
End Sub

Merci ;))



A voir également:

11 réponses

MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
29 juil. 2010 à 13:39
Tu as essayé en mettant une condition ?

Juste après le : Do While Not EOF(1)
Tu mets un :
if (numero ligne > 4) then
traitement
end if
0
En faisant ça, ça ne m'importe que la dernière ligne de mes fichiers txt, qui d'ailleurs ne comportent pas toujours le même nombre de lignes !
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
29 juil. 2010 à 13:58
Juste pour être sûr que je ne me plante pas. ^^

Tu as fait :

Do while Not EOF (1)
NL = NL + 1
if(numero ligne > 4)
Input #1, Chaine
Cells(L + NL + 1, 1).Value = Chaine
Loop
0
Non car ce cas là je ne vois plus où placer mon End if
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
Modifié par MrSlave le 29/07/2010 à 14:06
Je l'avais oublié. ^^

Do while Not EOF (1)
NL = NL + 1
if(numero ligne > 4)
Input #1, Chaine
Cells(L + NL + 1, 1).Value = Chaine
end if
Loop
Bloup ! :)
0
Alors là j'ai une erreur de syntaxe sur : if(numero ligne > 4)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
29 juil. 2010 à 14:12
Je te donnais la méthode pas la syntaxe exacte vu que je n'en suis pas sûr.
Numero de ligne n'existe pas. Mais je ne sais pas trop comment récupérer le numéro de la ligne.

Je pense à un truc tout con là. :/
Si tu fais :

NL = 4
Do while Not EOF (1)
NL = NL + 1
Input #1, Chaine
Cells(L + NL + 1, 1).Value = Chaine
Loop
0
en mettant ça :
'Récupère les lignes du fichier
Open Fichier For Input As #1
NL = 4
Do While Not EOF(1)
NL = NL + 1
Input #1, Chaine
Cells(L + NL + 1, 1).Value = Chaine
Loop
j'ai l'erreur : fichier déjà ouvert
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
29 juil. 2010 à 14:48
C'est sur la ligne Open Fichier For Input As #1 qu'il bloque ?
0
oui tout à fait
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
29 juil. 2010 à 14:55
Tu as toujours la ligne Close #1 après le loop ?
0
c'est ma faute j'avais oublié le : Close #1 après le loop, dédolée.
Mais bon, là il importe tout, il n'exclut pas les 4 premières lignes
0
en enregistrant la macro pour un fichier, j'y parviens : c'est le code suivant :
Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 29/07/2010 par Leroy Karine
'

'
Workbooks.OpenText Filename:= _
"D:\juxg3w\Mes Documents\capi\Nouveau dossier\PAYE0504.TXT", Origin:= _
xlWindows, StartRow:=5, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, _
1), Array(4, 1), Array(5, 1), Array(16, 1), Array(17, 1), Array(22, 1), Array(23, 1), Array( _
28, 1), Array(29, 1), Array(34, 1), Array(35, 1), Array(40, 1), Array(41, 1), Array(46, 1), _
Array(47, 1), Array(53, 1), Array(54, 1), Array(59, 1), Array(60, 1), Array(65, 1), Array( _
66, 1), Array(71, 1), Array(72, 1), Array(78, 1), Array(79, 1), Array(84, 1), Array(85, 1), _
Array(91, 1), Array(92, 1), Array(98, 1), Array(99, 1), Array(106, 1), Array(107, 1), Array _
(112, 1), Array(113, 1))
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
Range("A:A,C:C,E:E,G:G,I:I,K:K").Select
Range("K1").Activate
ActiveWindow.SmallScroll ToRight:=8
Range("A:A,C:C,E:E,G:G,I:I,K:K,M:M,O:O,Q:Q,S:S,U:U").Select
Range("U1").Activate
ActiveWindow.SmallScroll ToRight:=8
Range("A:A,C:C,E:E,G:G,I:I,K:K,M:M,O:O,Q:Q,S:S,U:U,W:W,Y:Y,AA:AA").Select
Range("AA1").Activate
ActiveWindow.SmallScroll ToRight:=6
Range( _
"A:A,C:C,E:E,G:G,I:I,K:K,M:M,O:O,Q:Q,S:S,U:U,W:W,Y:Y,AA:AA,AC:AC,AE:AE,AG:AG"). _
Select
Range("AG1").Activate
Selection.Delete Shift:=xlToLeft
ActiveWindow.ScrollColumn = 1
Range("A13").Select
End Sub


Mais maintenant je ne sais pas comment l'intégrer pour que l'importation-conversion se fasse pour tous les fichiers de mon répertoire !
0