1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| Option Explicit
Dim tRow As Variant, NS As Variant
Dim R As Integer
Dim nbFeuilles As Integer, nbCol As Integer, StartCol As Integer
Dim WB As Workbook
Sub Fichier_TXT_Volumineux()
Dim Resultat, Chemin As String
Dim Lecture As Integer, Sh As Integer
Chemin = Application.GetOpenFilename
If Chemin = "False" Then Exit Sub
Lecture = FreeFile()
Open Chemin For Input As #Lecture
Application.ScreenUpdating = False
R = 1
Sh = 1
'le nombre de feuilles nécessaires est colonne de départ- nb de colonnes / 256 arrondi au dessous
StartCol = 600
nbCol = 1031
nbFeuilles = Fix((nbCol - StartCol) / 256) + 1
'on ouvre nouveaux book & on ne laisse que nbfeuilles feuilles
Application.DisplayAlerts = False
Set WB = Workbooks.Add
If WB.Sheets.Count > nbFeuilles Then
Do While WB.Sheets.Count > nbFeuilles
WB.Sheets(1).Delete
Loop
Else
If Not WB.Sheets.Count = nbFeuilles Then
Do While WB.Sheets.Count < nbFeuilles
WB.Sheets.Add
Loop
End If
End If
Application.DisplayAlerts = True
Do While Not EOF(Lecture)
Line Input #Lecture, Resultat
'on splitte la ligne par colonne
tRow = Split(Resultat, "|")
'on saute les trois premère ligne
If Not Left(Trim(tRow(0)), 1) = "#" Then
'on considére la première ligne comme étant les noms de champs
'on les place dans une variable
If IsEmpty(NS) Then NS = tRow
'on copie les données
CopyData tRow, Sh, R
R = R + 1
'si on dépasse les 65536 lignes on ajoute des feuilles si elle n'existent pas encore
If R > 3 Then
WB.Sheets.Add , WB.Sheets(WB.Sheets.Count), nbFeuilles
Sh = Sh + nbFeuilles
'on copie les noms de champs
CopyData NS, Sh
R = 2
End If
End If
Loop
Close
Application.ScreenUpdating = True
End Sub
Private Sub CopyData(ByVal NR As Variant, ByVal StartSheet As Integer, Optional DestRow As Integer = 1)
Dim C As Integer, S As Integer
C = 1
'on copie à partie de la colonne 600
For S = StartCol - 1 To nbCol - 1
'on défini la feuille de destination
If C > 256 Then
C = 1
StartSheet = StartSheet + 1
End If
'on copie la donnée dans la cellule
WB.Sheets(StartSheet).Cells(DestRow, C) = NR(S)
C = C + 1
Next S
End Sub |
Partager