Caractère parasite fichier texte

A

Abel

Guest
Bonjour,

Je dois importer un fichier texte dans Excel.
Dans ce fichier texte, il se trouve de temps en temps des caractères parasites corrigeables pour la plupart depuis Excel une fois le fichier importé.
Mais il y en a un qui me pose problème : c'est le retour chariot.

Apparemment, il faut que je puisse corriger dans le fichier texte car une fois importé dans Excel, il est trop tard.
Je voudrait faire cette correction de manière automatique (rechercher/remplacer) pour que mes utilisateurs n'aient pas à le faire manuellement.

L'import se fait sur largeur délimitée et la virgule est le séparateur.

Les versions d'Excel utilisées dans ma société sont 97 et 2000.

Ci-joint un exemple pour illustrer le souci que me pose ce retour chariot.

Toute idée est la bienvenue.

Merci d'avance.

Abel
 

Pièces jointes

  • ExempleParasite.zip
    465 bytes · Affichages: 36
@

@+Thierry

Guest
Bonjour Abel, le Forum

Bien que je ne puisse télécharger quoique ce soit pour les règles de sécurité de mon job, je connais bien ton problème !

Je viens de poster un exemple pour Creepy dans un autre fil qui est très facile à l'adapter pour toi...

Le Chr(10) = le caractère de Retour Chariot qui sera remplacé par un simple espace Chr(32)

A noter que le Chr(59) est le Point Virgule est c'est le séparateur de champs du Txt, à arranger en fonction de tes besoins... si c'est rééllement la simple "," virgule qui est le séparateur alors remplacer par Chr(44)

A noter aussi par contre que seuls les Poste équippés d'Excel 2000 (ou plus) supporteront la méthode Split utilisé ici. (pour Excel 97 il faut faire un traffic avec "Instr" et reconstruire une array)

Sub TxtImportWithoutTab()
Dim Chemin As String, Fichier As String
Dim i As Integer, ii As Long, iii As Integer
Dim Record As String, CleanRecord As String
Dim Container As Variant


Chemin = ThisWorkbook.Path & "\"
Fichier = "UpTo20040102.txt"

ii = 1

Open Chemin & Fichier For Input As #1
Do While Not EOF(1)

Line Input #1, Record
Nbr = Nbr + 1
Container = Split(Record, Chr(59)) '<<< Séparateur Point-Virgule
For i = 1 To UBound(Container)
iii = i - 1
CleanRecord = Application.WorksheetFunction.Substitute(Container(iii), Chr(10), Chr(32))
Cells(ii, i) = CleanRecord
Next
ii = ii + 1
Loop
Close #1

End Sub

Bon Travail est bonne journée

@+Thierry
 
T

Ti

Guest
Salut à tous
Le problème n'est pas si simple et, sans avoir testé la solution de Thierry, je pense que celle-ci risque de renvoyer des erreurs, puisqu'alors les séquences CRLF ne seront plus reconnues comme telles pour insérer les différentes lignes du tableau.
Voici une solution plus simplement écrite, qui fait tout en une seule opération de lecture, supprimant les boucles et le laborieux Split, qu'on peut très souvent remplacer avantageusement par un simple Replace.

Pour cette démo l'ancien fichier texte est simplement écrasé pour être remplacé par sa version "corrigée" ainsi importable directement par Excel.

Option Explicit
'Ti
Private Sub LitFichier(ByVal Chemin$, Texte$)
Dim hFile%
hFile = FreeFile
Open Chemin For Binary Access Read As #hFile
Texte = String(LOF(hFile), " ")
Get #hFile, , Texte
Close hFile
End Sub

Private Sub EcritFichier(ByVal Chemin$, Texte$)
Dim hFile%
hFile = FreeFile
Open Chemin For Binary Access Write As #hFile
Put #hFile, , Texte
Close hFile
End Sub

Sub RemplaceTexte()
Dim Chemin, Texte$

On Error GoTo erreur
Chemin = Application.GetOpenFilename("Fichier texte (*.txt), *.txt")
If Chemin = False Then Exit Sub

LitFichier Chemin, Texte
Texte = Replace(Texte, vbLf, "")
Texte = Replace(Texte, vbCr, vbCrLf)
Kill Chemin
EcritFichier Chemin, Texte
Exit Sub

erreur:
MsgBox "Erreur"
End Sub
 
A

Abel

Guest
@Thierry, Ti, tous

Merci beaucoup.

La grosse épine, une fois retirée du pied, fait tout de suite beaucoup moins mal.

Je vais nourrir la bestiole et je programme ça de suite en rentrant.
Je vous tiens au courant.

A+

Abel.
 
@

@+Thierry

Guest
Bonjour Ti, re Abel

Je n'ai aucun souci avec le code que j'ai produit ci-dessus je l'utilise en exploitation depuis plusieurs mois.

En fait si on analyse bien comment se déroule mon code, il ne peut y avoir de soucis pour le CRFL de ligne du TXT puisque la séquence où je lis la ligne et dans la boucle Do While et la String complète pour la Ligne est générée dans "Record", ce n'est qu'ensuite, que je traite "Record" par "Record" sur une boucle "For" et c'est là que je permutte le Chr(10) pour un espace pour en faire un "CleanRecord". Donc simple et efficace sans aucun problème reconnu par mes utilisateurs sur des extractions quotidiennes.

Maintenant je vais regarder un peu ce que tu nous proposes, mais déjà ce ne serait pas envisageable pour mon cas particulier car je ne dois pas toucher un "poil" des fichiers txt qui proviennent de banques et par conséquent ne doivent pas être retouchés.

Bon Appétit
@+Thierry
 
Z

Zon

Guest
Salut,


Trés intéressante ta solution Ti d'autant que @+Thierry (ça devait être la fête cette nuit à Monaco) on peut faire une copie du fichier Texte assez facilement avec filecopy. Il reste à la tester sous XL97.

A+++
 
A

Abel

Guest
@Thierry, Ti, tous

Je viens de m'apercevoir que mon import ne me prend que 712 lignes sur les 1305 (ce mois ci c'est 1305. Le mois prochain sera différent).
Avec la 242ème ligne du fichier texte à la 712ème ligne dans Excel et ainsi de suite.
Va savoir Charles.....

Me semblait bien que mes résultats étaient bizarres.

Encore merci.

Je programme ça dès que mon nouveau problème est résolu.

Abel
 
@

@+Thierry

Guest
Hello Zon, re Ti, Abel

Et oui Zon un peu la fête oui (surtout les anglais avant le macth), c'est certain, mais tout de même moins qu'après le "Real", enfin on se Redim Preserve pour le match retour...

Sinon, of course, il est aussi Absolutly Forbiden de travailler sur des copies des TXT, sinon ce serait trop simple. Auditors Purposes, you know what I mean

Mis à part çà je viens de tester la procédure de Ti et c'est impec, comme d'habitude, dommage que je n'y ai pas droit !

Bon Après Midi à tous et toutes
@+Thierry
 
A

Abel

Guest
@Thierry, Ti, Zon, tous

Piègeux !
Ce n'était pas un saut de paragraphe ni un saut de ligne mais un chr(11).
Et pourtant, il se présente de la même manière dans le ".txt".
J'ai mis du temps à le trouver jusqu'à ce que je pense à faire "=code(bidule)" dans Excel via un copier/coller de mon"bidule".

Merci à tous.


Abel.


ps : Allez l'OM !!!.. (ben faut y croire, non ?)
Bon Monaco, c'est bien aussi ...
 

Discussions similaires

Réponses
2
Affichages
457

Statistiques des forums

Discussions
312 320
Messages
2 087 220
Membres
103 497
dernier inscrit
JP9231