Option Explicit
Const BFSpec As String = "DefectRecordSpec 15 DEFECTID XREL YREL XINDEX YINDEX XSIZE YSIZE DEFECTAREA DSIZE CLASSNUMBER TEST CLUSTERNUMBER ROUGHBINNUMBER FINEBINNUMBER REVIEWSAMPLE ;"
Sub Test()
Dim fn As Variant, TbFn$(), i&, ff%, s$, b As Boolean, TbLn$(), r&, Mx&, TbCn() As Boolean, bI As Boolean, j%, v%
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'sélection des fichiers 001 à traiter
fn = Application.GetOpenFilename("Fichiers textes (*.001), *.001", , , , True)
If TypeName(fn) = "Boolean" Then Exit Sub 'quitter si annuler
'nouvelle feuille
Sheets.Add
'ligne de titre
TbLn = Split(BFSpec, " "): r = 1
For i = 2 To 16
Cells(1, i - 1) = TbLn(i)
Next i
'fichiers à ouvrirs
ReDim TbFn(1 To UBound(fn))
'inicateur clusternumbermax
Mx = 0
'traitement
For i = 1 To UBound(fn)
TbFn(i) = fn(i) 'fichier en cours
ff = FreeFile: b = False 'n° 'ouverture et non validation ligne de titre
Open TbFn(i) For Input As #ff 'ouverture
Do Until EOF(ff) 'tant que fin du fichier non atteinte
Line Input #ff, s 'lire une ligne
If Not b And s = BFSpec Then b = True 'validation ligne de titre
If b Then
bI = False 'à priori on n'importe pas la ligne en cours
TbLn = Split(s, " ") 'tableau des champs
If UBound(TbLn) = 15 Then 'contrôles 16 champs (car fichier exemple commence par un espace)
If TbLn(12) = 0 Then 'test clusternumber
bI = True 'validation
Else
v = Val(TbLn(12)) 'clusternumber
If v > Mx Then 'ajuster tableau
Mx = v
ReDim Preserve TbCn(1 To Mx)
End If
If Not TbCn(v) Then '1ère occurence de ce clusternumber ?
TbCn(v) = True
bI = True 'validation
End If
End If
End If
'importation
If bI Then
r = r + 1
For j = 1 To 15
Cells(r, j) = TbLn(j)
Next j
End If
End If
Loop
Close #ff 'fermeture
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub