Découper un fichier texte .txt en plusieurs fichiers excel

steph05

Habitué
Bonjour,

J'ai un fichier .txt qui contient 300 000 lignes. J'ai besoin de le mettre sous excel.
Comment faire pour créer automatiquement un premier fichier avec les 65 536 premières lignes, un autre avec les 65536 suivantes ... et appeler ces fichiers "Fichier 1", "Fichier 2" ...

Je voudrais un truc style une macro parce que ça m'arrive souvent.

Merci beaucoup pour votre aide
 

kiki29

Habitué
via Google j'ai trouvé cela
[Fixed]
Option Explicit

Sub ImportLargeFile()
Dim strFilePath As String, strFilename As String, vFullPath As Variant
Dim lngCounter As Long
Dim oConn As Object, oRS As Object, oFSObj As Object

vFullPath = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Please select text file...")

If vFullPath = False Then Exit Sub
Application.ScreenUpdating = False

Set oFSObj = CreateObject("Scripting.FileSystemObject")
strFilePath = oFSObj.GetFile(vFullPath).ParentFolder.Path
strFilename = oFSObj.GetFile(vFullPath).Name

Set oConn = CreateObject("ADODB.CONNECTION")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strFilePath & ";" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited"""

Set oRS = CreateObject("AdoDb.Recordset")

oRS.Open "SELECT * FROM " & strFilename, oConn, 3, 1, 1
While Not oRS.EOF
Sheets.Add
ActiveSheet.Range("A1").CopyFromRecordset oRS, 65536
Wend
oRS.Close
oConn.Close
Application.ScreenUpdating = True
End Sub
[/fixed]
 

marsien

Grand Maître
Je ne connais pas les fonctions VB* correspondantes à ces explications, mais il est tout à fait possible de lire par une boucle un nombre définit de lignes, et de les copier dans un fichier qui sera créé automatiquement.

En gros, il te faut :
■une boucle qui t'avertisse quand tu as atteint la fin du fichier
■une boucle qui incrémente le nom du fichier et qui le crée par le même occasion
■une boucle qui lit dans le fichier de départ un nombre définit de lignes et qui les copies dans le fichier créé et ouvert.

Voilà :)
 

steph05

Habitué
Merci pour vos 2 explications.

Pour le code trouvé sur Google, il me faut l'application ADOB à laquelle le programme fait appel.

Quant au 2ème message, c'est justement le code VBA qui me manque !

Merci quand même
 

marsien

Grand Maître
Oui, mais on est pas là pour faire le code à ta place. Sinon, ce serait un service payant et pas un forum d'entre-aide.

Nous sommes par contre ouvert pour corriger et débugger le code que tu auras écrit si ce dernier ne marche pas.
 

kiki29

Habitué
>> Steph05 : Si au lieu de gloser tu l'essayais ... ou simplement lisais ....
"This macro example assumes that your VBA project has added a reference to the ADO object library.
You can do this from within the VBE by selecting the menu Tools, References and selecting Microsoft ActiveX Data Objects x.x Object Library." en bas du lien donné
 

steph05

Habitué
Merci beaucoup, je croyais qu'il s'agissait d'un outil spécial.

C'est presque parfait, sauf que ça ne me copie pas la 1ère ligne. (j'ai utilisé exactement ton code)
Comment faire pour récupérer la 1ère ligne ?

Merci beaucoup
 

marsien

Grand Maître
Comme dit plus haut faut que tu rajoutes une boucles qui ne s'arrête qu'à la fin de la lecture du fichier initial et qui t'incrémente autant de fichiers que nécessaire pour la découpe.
 

steph05

Habitué
Bonjour

Encore un petit détail. Si mon fichier txt contient des nombres longs (20 chiffres), quand ils se collent dans excel, ils s'écrivent en format scientifique. Comment faire un collage spécial format pour coller en texte, et ainsi garder mes nombres au bon format ?

Si j'ai par exemple, 1111111111111111111, je voudrais qu'il reste exactement écrit comme ça.

D'habitude, je fais PAsteSpecial mais là je ne sais pas où le mettre dans le code.

Merci
 

kiki29

Habitué
Utilise le Macro Recorder et crée une macro à part pour formater les colonnes concernées
 

kiki29

Habitué
OOOOOOOOOOHHHHHHH !!!!
C'est le B A BA
Sous Excel Menu Outils | Macro | Nouvelle Macro cliquer sur OK
Sélectionner la colonne et faire les manips de formatage
quand c'est fini arrêter l'enregistreur de macro
Menu Outils | Macro | Arrêter la Macro ou cliquer sur le carré bleu

Après il faudra optimiser manuellement le code généré
 

kiki29

Habitué
Autre question que veux-tu faire de ses données ? sur un autre forum il y a un cas de fichier texte encore plus énorme et en fait l'utilisateur veut une moyenne des données de ses colonnes, cela permet en fait de ne pas importer les données texte mais de les traiter à la volée.Ne serait-ce pas ton cas ?
 

steph05

Habitué
Je ne savais pas que ça s'appelait comme ça! Je le faisais sans savoir.
Je l'ai donc fait et ça me donne:
Columns("A:A").Select
Selection.NumberFormat = "@"

Mais ça ne marche pas.

En fait, ce sont des identifiants clients. Il existe plusieurs classes de clients reconnaissables au 1ers chiffres de l'identifiant.
Je veux donc ensuite regrouper les clients d'une même classe. La suite ça va, il ne me manque qu'à pouvoir copier mes chiffres en chiffres.

 

steph05

Habitué
En plus il faut que je change le format de ma colonne avant de coller les données sinon, même en temps normal (dans Excel, sans macro), je perds les derniers chiffres (ils deviennent des zéros).
 

steph05

Habitué
Je me dis que je pourrais modifier le fichier txt pour que la cellule soit reconnue en texte.
Par exemple, je pourrais mettre un "a" à la fin de chaque ligne.

Y a-t-il un moyen pour ajouter un caractère à la fin de chaque ligne d'un fichier txt ?

Merci
 

kiki29

Habitué
il faudrait que ces identifiants sur 20 digits se présentent dans le fichier texte sous la forme '12345678901234567890 pour qu'ils soient importés correctement sous Excel
Il reste à faire une moulinette sous Excel qui transcrive cela avant le traitement , ces identifiants sont uniquement dans la colonne A ?
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 040
Membres
1 586 389
Dernier membre
ROCKET8
Partager cette page
Haut