Re : Concatener des fichiers .txt dans un fichier Excel
Bonjour Efgé,
Dsl pour ma réponse tardive, j'ai bien ouvert ton fichier, problème il me met une erreur d’exécution 9 qui provient de la ligne D(T(0)) = D(T(0)) & T(1) & ";" (voir ci dessous)
Si jamais je supprime celle ci cela a fonctionne à merveille sur les 15 premiers dossiers .txt ensuite seul la colonne commentaire est renseignée.
Option Explicit
Dim D As Object
Private Sub CommandButton1_Click()
Dim dossier As Object, Fichier As Object
Dim i&, J&, k&, L&, FileNumber&
Dim Texte$
Dim T, T2, Coupe_Texte, C
Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path)
Set D = CreateObject("Scripting.Dictionary")
FileNumber = FreeFile
For Each Fichier In dossier.Files
If Fichier.Name Like "fiche-annuaire-*.txt" Then
i = i + 1
Open Fichier For Input As #FileNumber
Do Until EOF(FileNumber)
Line Input #FileNumber, Texte
If InStr(Texte, ";") > 0 And InStr(Texte, Chr(10)) > 0 Then
Coupe_Texte = Split(Texte, Chr(10))
For J = LBound(Coupe_Texte) To UBound(Coupe_Texte)
If Trim(Coupe_Texte(J)) <> "" Then
If Left(Coupe_Texte(J), 1) = ";" Then Coupe_Texte(J) = Right(Coupe_Texte(J), Len(Coupe_Texte(J)) - 1)
If Right(Coupe_Texte(J), 1) = ";" Then Coupe_Texte(J) = Left(Coupe_Texte(J), Len(Coupe_Texte(J)) - 1)
T = Split(Coupe_Texte(J), ";")
MiseàJour T(0), i
D(T(0)) = D(T(0)) & T(1) & ";"
End If
Next J
Else
MiseàJour "Commentaires", i
D("Commentaires") = D("Commentaires") & Texte & IIf(Right(Texte, 1) = Chr(10), "", Chr(10))
End If
Loop
For Each C In D.Keys
T2 = Split(D(C), ";")
If UBound(T2) < i Then D(C) = D(C) & ";"
Next C
End If
Close #FileNumber
Next Fichier
k = 0
Application.ScreenUpdating = False
ActiveSheet.UsedRange.ClearContents
Cells(1, 1).Resize(, D.Count) = D.Keys
For Each C In D.Keys
k = k + 1
T2 = Split(D(C), ";")
If C = "Commentaires" Then
For L = LBound(T2) To UBound(T2)
If T2(L) <> "" Then T2(L) = Left(T2(L), Len(T2(L)) - 1)
Next L
End If
Cells(2, k).Resize(UBound(T2), 1) = Application.Transpose(T2)
Next C
End Sub
Function MiseàJour(ByVal Var As String, ByVal Num As Long)
Dim k&
If Not D.exists(Var) Then
For k = 1 To Num - 1
D(Var) = D(Var) & ";"
Next k
End If
End Function