Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Cela fait plusieurs jour que j'embête tout le monde avec cette macro, voici ce que je voudrais modifier :
Cette macro marche très lorsqu'il s'agit consolider de fichier xls, mais lorsque j'essaie de consolider des fichier txt qui se trouve dans le même répertoire ci-dessous (voir macro) et qui sont pas delimité en "tab" mais en "|" cela ne fonctionne pas. Comment puis-je rendre les fichier txt "clean" afin de les importer tous dans ma feuille1 de mon fichier "Consolider fichiers.xls".
En annexe fichier txt exemple.
Sub Consolidation_old_V_4()
Dim Temp As String
Dim Ligne As Long, Ligne2 As Long
Temp = Dir("H:\David Jones\FS10n\4.7" & "\*.txt")
Application.DisplayAlerts = False
Do While Temp <> ""
If Temp <> "Consolider fichiers.xls" Then
Workbooks.Open "H:\David Jones\FS10n\4.7" & "\" & Temp
Ligne2 = Workbooks(Temp).Sheets(1).Range("A1").CurrentRegion.Rows.Count
Workbooks(Temp).Sheets(1).Range("A1").CurrentRegion.Copy
Workbooks("Consolider fichiers.xls").Sheets(1).Activate
Ligne = Sheets(1).Range("A65536").End(xlUp).Row
Range("B" & CStr(Ligne)).Select
ActiveSheet.Paste
Range("A" & CStr(Ligne), "A" & Ligne + Ligne2 - 1).Value = Temp
Workbooks(Temp).Close
End If
Temp = Dir
Loop
Range("A1").Select
Application.DisplayAlerts = True
End Sub
Sub Read_Text_File()
Dim Tablo() As String
Dim TextLine As String
Dim Ligne As Integer
Dim I As Byte
Ligne = 1
Cells.Delete
'Lecture des données contenues dans un fichier texte
Open "D:\Excel\ABH0000017364.TXT" For Input As #1
Do While Not EOF(1) ' Loop until end of file.
Line Input #1, TextLine
If Left(TextLine, 1) = "|" Then
Tablo = Split(TextLine, "|")
For I = 1 To UBound(Tablo)
Cells(Ligne, I) = Trim(Tablo(I))
Next I
Else
Cells(Ligne, 1) = Trim(TextLine)
End If
Ligne = Ligne + 1
Loop
Close #1
End Sub
Sub Read_Text_File()
Dim Tablo() As String
Dim TextLine As String
Dim Ligne As Integer
Dim I As Byte
Ligne = 1
Cells.Delete
'Lecture des données contenues dans un fichier texte
Open "D:\Excel\ABH0000017364.TXT" For Input As #1
Do While Not EOF(1) ' Loop until end of file.
Line Input #1, TextLine
If Left(TextLine, 1) = "|" Then
Tablo = Split(TextLine, "|")
For I = 1 To UBound(Tablo)
Cells(Ligne, I) = Trim(Tablo(I))
Next I
Else
Cells(Ligne, 1) = Trim(TextLine)
End If
Ligne = Ligne + 1
Loop
Close #1
End Sub
J'ai testé votre macro et elle pourrait peut-être me servir, est-il possible d'enlever les traits horizontaux ----------- aussi ?
Mon idée serait la suivante et celle de votre confrère que je remercie par ailleur pour sa patience. En 1er ce serait de lancer en Dos le fichier.bat ci-dessous avec le résulat serait la compilaton de tous mes fichiers.txt et en 2ème faire tourner votre marcro ci-dessus, il faudrait juste rajoutés en colomne A un à côte de  qui délimite chaque fichier importé et ajouté le nom du fichiers.text importé auparavant avec le fichier bat ?
J'ai testé votre macro et elle pourrait peut-être me servir, est-il possible d'enlever les traits horizontaux ----------- aussi ?
Mon idée serait la suivante et celle de votre confrère que je remercie par ailleur pour sa patience. En 1er ce serait de lancer en Dos le fichier.bat ci-dessous avec le résulat serait la compilaton de tous mes fichiers.txt et en 2ème faire tourner votre marcro ci-dessus, il faudrait juste rajoutés en colomne A un à côte de  qui délimite chaque fichier importé et ajouté le nom du fichiers.text importé auparavant avec le fichier bat ?
Je crois que les explication ci-dessous sont trop compliquées, ci-dessous d'autre explications.
Est-il est-il possible de modifier la macro ci-dessous en step 3, j'ai mis en annexe le premier fichier obtenu en "état actuel.xls" après avoir lancé la macro et le résultat que j'aimerais en obtenir en "résultat souhaité.xls" en fichier attaché.
En sachant que "" délimite les fichiers importé par le fichier bat lancer en step 1.
Ci-dessous le détail de ma compil.🙂
1. j'ai lancer le dossier.bat
2. Résultat obtenu : fichier XLScompil.xls obtenu avec nom des fichiers. txt importé dans cellule A1 et A2 voir fichier "état actuel.xls" dans les fichiers attachés.
3. Je lance la macro suivante:
Sub Read_Text_File()
Dim Tablo() As String
Dim TextLine As String
Dim Ligne As Integer
Dim I As Byte
Ligne = 1
Cells.Delete
'Lecture des données contenues dans un fichier texte
Open "H:\David Jones\FS10n\4.7\XLScompil.TXT" For Input As #1
Do While Not EOF(1) ' Loop until end of file.
Line Input #1, TextLine
If Left(TextLine, 1) = "|" Then
Tablo = Split(TextLine, "|")
For I = 1 To UBound(Tablo)
Cells(Ligne, I) = Trim(Tablo(I))
Next I
Else
Cells(Ligne, 1) = Trim(TextLine)
End If
Ligne = Ligne + 1
Loop
Close #1
End Sub
Une autre approche ( à approfondir, car ceci n'est pas un code pas très beau )
avec Scripting.FileSystemObject
Code:
Sub test()
Dim FSO As Object
Dim fic, fStr, i As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fic = FSO.GetFile("c:\temp\ABH0000017364.TXT")
Set fStr = fic.OpenAsTextStream(1, 0)
i = 1
Application.ScreenUpdating = False
With fStr
While Not .AtEndOfStream
Cells(i, 1) = .Readline
i = i + 1
Wend
End With
Range("A1:A" & [A65536].End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Value = "----"
Range("A1").EntireRow.Insert
Range("A1") = "XXXXX"
Range("A1").AutoFilter Field:=1, Criteria1:="=*---*", Operator:=xlAnd
Range("A1").CurrentRegion.EntireRow.Delete
ActiveSheet.AutoFilterMode = False
Range("A1").CurrentRegion.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="|", FieldInfo:=Array(1, 1)
Application.ScreenUpdating = True
End Sub
Une autre approche ( à approfondir, car ceci n'est pas un code pas très beau )
avec Scripting.FileSystemObject
Code:
Sub test()
Dim FSO As Object
Dim fic, fStr, i As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fic = FSO.GetFile("c:\temp\ABH0000017364.TXT")
Set fStr = fic.OpenAsTextStream(1, 0)
i = 1
Application.ScreenUpdating = False
With fStr
While Not .AtEndOfStream
Cells(i, 1) = .Readline
i = i + 1
Wend
End With
Range("A1:A" & [A65536].End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Value = "----"
Range("A1").EntireRow.Insert
Range("A1") = "XXXXX"
Range("A1").AutoFilter Field:=1, Criteria1:="=*---*", Operator:=xlAnd
Range("A1").CurrentRegion.EntireRow.Delete
ActiveSheet.AutoFilterMode = False
Range("A1").CurrentRegion.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="|", FieldInfo:=Array(1, 1)
Application.ScreenUpdating = True
End Sub
Merci pour votre réponse, le code est presque parfait il enlève bien les traits horizontaux mais il manque le noms des fichiers.txt en colomne A exemple ci-dessous. Le résultat devrait correspondre au fichier "résultat souhaité.xls" que j'ai attaché plus haut. Par contre il faudrait utiliser comme fichier "test" de départ le fichier que je viens d'attacher "XLScompil.xls" et non le fichier "ABH0000017364.txt". En sachant que "" délimitent le nbre de fichiers importés.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD