XL 2019 Intégration d'un fichier ".txt" avec des lignes tabulées

  • Initiateur de la discussion Initiateur de la discussion Titof06
  • Date de début Date de début

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 !

Titof06

XLDnaute Occasionnel
Bonjour,

Je reviens vers vous car je me trouve avec un souci lors de l'intégration d'un fichier ".txt".

Celui-ci doit se présenter comme le fichier joint "DumpBht_MAJ_GENCOD_103_17-11-2025_32803.txt".

Mais quelquefois, il se présente sous la forme du fichier joint "DumpBht_MAJ_GENCOD_103_17-11-2025_32803_origine.txt".

Est-ce quelqu'un aurait une astuce pour enlever ces tabulations, svp ?

Je l'intègre avec ce code ci-dessous :
rep = ThisWorkbook.Path & "\"
strNomFichier = rep & "*" & "*GENCOD*" & "*.txt"

Destination = ThisWorkbook.Name

Workbooks.OpenText Filename:=strNomFichier, Origin:=xlWindows, StartRow:= _
1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 2 _
), Array(2, 2)), DecimalSeparator:=".", TrailingMinusNumbers:=True
'
Lorsque le fichier est propre, tout va bien, mais lorsqu'il y a des tabulations, la suite ne fonctionne pas, tout est décalé.

Pour information, ces fichiers viennent d'une scannette pour des articles.

Je vous remercie et vous souhaite une agréable journée.

Titof06
 

Pièces jointes

Solution
Bonjour à tous,

On peut supprimer les tabulations inutiles directement sur le fichier texte :
VB:
Sub Efface_Tab()
Dim fichier, x%, a(), i&
fichier = ThisWorkbook.Path & "\DumpBht_MAJ_GENCOD_103_17-11-2025_32803_origine.txt"
x = FreeFile
Open fichier For Input As #x 'ouverture en lecture séquentielle
While Not EOF(x)
    ReDim Preserve a(i): Line Input #x, a(i): i = i + 1
Wend
Close #x
x = FreeFile
Open fichier For Output As #x 'ouverture en écriture séquentielle
For i = 0 To UBound(a)
    a(i) = Application.Trim(Replace(a(i), vbTab, " ")) 'supprime les espaces inutiles comme le fait la fonction SUPPRESPACE
    a(i) = Replace(a(i), " ", vbTab) 'remplace l'espace par une tabulation
    Print #x, a(i)
Next i
Close #x
MsgBox "Les...
Bonjour a tous,

VB:
Sub test()
    rep = ThisWorkbook.Path & "\"
    strNomFichier = rep & "*" & "*GENCOD*" & "*.txt"
    
    Destination = ThisWorkbook.Name
    Workbooks.OpenText Filename:=strNomFichier, Origin:=xlWindows, StartRow:= _
    1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
    , Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 2 _
    ), Array(2, 2)), DecimalSeparator:=".", TrailingMinusNumbers:=True
    d = Range("B" & Rows.Count).End(xlUp).Row
    
    'test si fichier avec decalage
    If Range("A2") = "" Then
        Range("A2:A" & Range("B" & Rows.Count).End(xlUp).Row).Delete Shift:=xlToLeft
    End If
End Sub
 
Bonjour a tous,

VB:
Sub test()
    rep = ThisWorkbook.Path & "\"
    strNomFichier = rep & "*" & "*GENCOD*" & "*.txt"
   
    Destination = ThisWorkbook.Name
    Workbooks.OpenText Filename:=strNomFichier, Origin:=xlWindows, StartRow:= _
    1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
    , Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 2 _
    ), Array(2, 2)), DecimalSeparator:=".", TrailingMinusNumbers:=True
    d = Range("B" & Rows.Count).End(xlUp).Row
   
    'test si fichier avec decalage
    If Range("A2") = "" Then
        Range("A2:A" & Range("B" & Rows.Count).End(xlUp).Row).Delete Shift:=xlToLeft
    End If
End Sub
Bonjour Oneida,

Je vous remercie pour votre réponse et proposition qui fonctionne parfaitement bien dans ce cas.

J'ai oublié de dire, que de temps en temps, j'ai des lignes tabulées à partir de la ligne 5, par exemple.

Je vous remercie et vous souhaite une agréable journée.

Titof06
 
Re,
Y en pas une autre a sortir du genre "il peut y avoir plusieurs paquets decales sur la longueur du fichier.
Bonjour Oneida,

Oui, c'est possible, mais vu que je ne sais pas comment se génère ce fichier c'est ça qui est compliqué.
Le développeur de ce programme sont des AB...TIS et très imbus de leurs personnes, donc impossible d'avoir des informations, désolé.

Je vous remercie et vous souhaite une agréable journée.

Titof06
 
Bonjour à tous,

On peut supprimer les tabulations inutiles directement sur le fichier texte :
VB:
Sub Efface_Tab()
Dim fichier, x%, a(), i&
fichier = ThisWorkbook.Path & "\DumpBht_MAJ_GENCOD_103_17-11-2025_32803_origine.txt"
x = FreeFile
Open fichier For Input As #x 'ouverture en lecture séquentielle
While Not EOF(x)
    ReDim Preserve a(i): Line Input #x, a(i): i = i + 1
Wend
Close #x
x = FreeFile
Open fichier For Output As #x 'ouverture en écriture séquentielle
For i = 0 To UBound(a)
    a(i) = Application.Trim(Replace(a(i), vbTab, " ")) 'supprime les espaces inutiles comme le fait la fonction SUPPRESPACE
    a(i) = Replace(a(i), " ", vbTab) 'remplace l'espace par une tabulation
    Print #x, a(i)
Next i
Close #x
MsgBox "Les tabulations inutiles ont été effacées"
End Sub
Les ouvertures en lecture ou écriture séquentielles sont très rapides.

Nota : avant de télécharger le fichier texte assurez-vous qu'il n'y en a pas un autre du même nom dans le répertoire.

A+
 

Pièces jointes

Bonjour à tous,
Ou encore supprimer les vides directement dans le fichier XL, en remplaçant dans la macro d' Oneida :
VB:
'test si fichier avec decalage
If Range("A2") = "" Then
  Range("A2:A" & Range("B" & Rows.Count).End(xlUp).Row).Delete Shift:=xlToLeft
End If
par
Code:
'test si fichier avec decalage
Application.ScreenUpdating = False
For L = 1 To d
    If Cells(L, "A") = "" Then Cells(L, "A").Delete Shift:=xlToLeft
Next L
 
Bonjour à tous,

On peut supprimer les tabulations inutiles directement sur le fichier texte :
VB:
Sub Efface_Tab()
Dim fichier, x%, a(), i&
fichier = ThisWorkbook.Path & "\DumpBht_MAJ_GENCOD_103_17-11-2025_32803_origine.txt"
x = FreeFile
Open fichier For Input As #x 'ouverture en lecture séquentielle
While Not EOF(x)
    ReDim Preserve a(i): Line Input #x, a(i): i = i + 1
Wend
Close #x
x = FreeFile
Open fichier For Output As #x 'ouverture en écriture séquentielle
For i = 0 To UBound(a)
    a(i) = Application.Trim(Replace(a(i), vbTab, " ")) 'supprime les espaces inutiles comme le fait la fonction SUPPRESPACE
    a(i) = Replace(a(i), " ", vbTab) 'remplace l'espace par une tabulation
    Print #x, a(i)
Next i
Close #x
MsgBox "Les tabulations inutiles ont été effacées"
End Sub
Les ouvertures en lecture ou écriture séquentielles sont très rapides.

Nota : avant de télécharger le fichier texte assurez-vous qu'il n'y en a pas un autre du même nom dans le répertoire.

A+
Bonjour job75,

Je vous remercie pour cette solution qui fonctionne parfaitement.

Je vous remercie encore pour le temps que vous m'avez accordé et vous souhaite une agréable fin de journée.

Titof06
 
Bonjour à tous,
Ou encore supprimer les vides directement dans le fichier XL, en remplaçant dans la macro d' Oneida :
VB:
'test si fichier avec decalage
If Range("A2") = "" Then
  Range("A2:A" & Range("B" & Rows.Count).End(xlUp).Row).Delete Shift:=xlToLeft
End If
par
Code:
'test si fichier avec decalage
Application.ScreenUpdating = False
For L = 1 To d
    If Cells(L, "A") = "" Then Cells(L, "A").Delete Shift:=xlToLeft
Next L
Bonjour sylvanu,

C'est vrai que cette solution fonctionne également très bien.

Je vous remercie encore pour le temps que vous m'avez accordé et vous souhaite une agréable fin de journée.

Titof06
 
Pour tester ma macro du post #9 j'ai recopié le contenu du fichier texte sur 120 000 lignes, durées d'exécution :

- en utilisant Application.Trim => 1,5 seconde

- en remplaçant cette expression par Trim => 0,6 seconde (on peut l'utiliser si au centre de chaque ligne il n'y a qu'une tabulation).
 
- 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

Discussions similaires

Réponses
1
Affichages
866
Réponses
22
Affichages
3 K
Réponses
11
Affichages
2 K
Réponses
13
Affichages
2 K
Retour