Gestion des fichiers *.txt avec séparateur "espace"

dieu08

XLDnaute Occasionnel
Bonjour,

Je dois procéder à des recherches, remplacements et suppression de chaines dans un fichier *.txt (voir exemple joint) dont le contenu est structuré par des séparateurs "espace" dont le nombre est fixe pour bien identifier chaque champ.

Pour être plus clair, ce fichier est intégré dans un progiciel qui identifie les données en fonction de leurs positions respectives.

J'ouvrir ce fichier dans Excel comme un fichier *.txt simple en précisant bien la taille de chaque champ lors de l'importation mais dès que les manipulations ont été réalisées, je ne parviens pas à procéder à une sauvegarde qui conserve les tailles définies au départ. La largeur des colonnes se limite aux données les plus "larges" mais ne respectent en rien les tailles définies.

J'espère avoir été cristallin dans mes propos et ainsi obtenir une aide (divine ?).

Merci d'avance.
 

Pièces jointes

  • exemple.txt
    980 bytes · Affichages: 94
  • exemple.txt
    980 bytes · Affichages: 80
  • exemple.txt
    980 bytes · Affichages: 83

mutzik

XLDnaute Barbatruc
Re : Gestion des fichiers *.txt avec séparateur "espace"

bonjour,

cristallin, bon, à peu près ...
si tu ouvres ce fichier dans excel, en import avec délimiteur 'espace', tu peux tout aussi facilement l'enregistrer sous par la suite avec délimiteur espace ...
Je vois pas trop ou est le prob
Montre nous ce que tu as déjà fait et on t'aidera
 

dieu08

XLDnaute Occasionnel
Re : Gestion des fichiers *.txt avec séparateur "espace"

J'ai importé le fichier *.txt en largeur fixe (voir result_import.xlsx) selon les critères de largeur dont je disposais et qui sont fixe : par exemple pour le champ n°1 du caractère 0 au caractère 23, pour le champ n°2 du caractère 23 au 24, pour le champ n°3 du caractère 24 au 52, pour le champ n°4 du caractère 52 au 219...

J'ai ensuite procéder à la suppression de certains caractère dans le champ situé en cellule C1 et ensuite procédé à un enregistrement en format *.prn. Le résultat n'est pas probant car les espaces ne sont plus respectés.

C'est plus concret comme cela effectivement mutzik.

Le fichier joint "result_import.txt" est en fait "result_import.prn" mais il ne passait pas sur le forum avec cette extension.
 

Pièces jointes

  • result_import.xlsx
    9.8 KB · Affichages: 61
  • result_import.txt
    456 bytes · Affichages: 59

mutzik

XLDnaute Barbatruc
Re : Gestion des fichiers *.txt avec séparateur "espace"

re,

trois solutions à ton probleme :
- ouvrir ton fichier avec un éditeur de texte style notepad ou notepad ++
- ouvrir ton fichier avec word
- avec excel avec des formules
- avec excel, mais il y a de la programmation à faire

dans ce dernier cas, quel est ton niveau de programmation en VBA ?
 

dieu08

XLDnaute Occasionnel
Re : Gestion des fichiers *.txt avec séparateur "espace"

Re,

Je dois réaliser cela pour d'autres utilisateurs et cela doit donc être automatisé; je dois forcement passé par des macros Excel.

Cela ne va pas t'aider mais je pense que j'ai un bon niveau en VBA mais là je ne vois pas trop comment m'en sortir; peux-tu me donner des conseils pour la programmation en VBA afin de conserver mon format de fichier avec les bonnes largeurs de colonnes ?

Merci.
 

mutzik

XLDnaute Barbatruc
Re : Gestion des fichiers *.txt avec séparateur "espace"

re,
pas de prob

lecture
en 1 : ouvrir le fichier avec open #1 ...
en 2 : tu importes chaque ligne complète que tu inscris en A1, A2 ... et tu fermes le fichier (close #1)
en 3 : tu utilises une boucle de A1 jusqu'à la dernière ligne en utilisant spli qui te permets de 'découper' une chaine de caractère (séparateur par défaut = espace)
modifier les données ...

écriture
- open #1 ... pour y écrire des données
- boucler de A1 jusqu'à derniere ligne dernière colonne
- on écrit dans le fichier A1 + le nombre d'espaces necessaire pour que le fichier soit identique à celui d'origine (space(6) = 6 espaces)
- puis B1 idem
- puis C1 ...
- à la dernière colonne, on rajoute à la chaine de caractère un vbLf (= retour à la ligne)
 

dieu08

XLDnaute Occasionnel
Re : Gestion des fichiers *.txt avec séparateur "espace"

Je vais tenter d'oeuvrer dans ce sens.

Je laisse la discussion ouverte jusqu'à finalisation. Ainsi je saurais vers qui me tourner en cas de problème si tu le permets évidemment :p
 

dieu08

XLDnaute Occasionnel
Re : Gestion des fichiers *.txt avec séparateur "espace"

Bonjour,

Je me heurtes à certaines difficultés concernant l'alimentation de mon fichier Excel.

Pour reprendre la cinémathique de mutzik, pas de soucis pour mettre chaque ligne du fichier *.txt à l'intérieur des cellules de la colonne A.

Ce qui me pose des difficultés est d'alimenter les colonnes de la ligne 1 (de la colonne 2 jusque ...) avec les informations de la fonction split. Je pense que je m'embrouille avec les différentes variables utilisées.

Pour chaque cellule de la colonne A, il faut que le code puisse aller mettre l'information de split(0) de la cellule A1 dans A2, puis split(1) de la cellule A1 dans A2, split(2) de la cellule A1 dans A3...

Ci-dessous le code écrit jusqu'à présent :

Code:
Sub interface()

' copie des lignes txt vers excel

Dim T() As String

Worksheets("import").Activate
Cells(1, 1).Activate

Open "C:\DOCUME~1\FRVARA~1\Bureau\WORK_T~1\COMPTA~2\TEST_O~1\test.dat" For Input As #1
i = -1
While Not EOF(1)
  i = i + 1
  ReDim Preserve T(i)
  Line Input #1, T(i)
  Cells(i + 1, 1) = T(i)
Wend

' mise en places des séparateurs

nbcount0 = Application.CountA(Range("A1:A65536"))

c = 2

For j = 1 To nbcount0

        For l = 1 To nbcount0
                                                                      
                    For k = 0 To UBound(Split(Cells(j, 1), " "))
                       
                        Cells(l, c) = Split(Cells(j, 1), " ")(k)
                        c = c + 1
                                           
                    Next k
                                
         Next l
    
Next j

End Sub

La variable j correspond aux lignes (de la première colonne), l aux lignes devant recevoir les informations de split(x), c aux colonnes devant recevoir les informations de split(x) et k à l'énième du split(k).

Merci d'avance.
 

dieu08

XLDnaute Occasionnel
Re : Gestion des fichiers *.txt avec séparateur "espace"

Bonjour mutzik,

Je te remercie pour ta réponse, mais je reste :confused: sur la compréhension.

Je n'ai pas honte de dire que j'ai beaucoup de mal à comprendre les manipulations réalisées dans ton code. Déjà au niveau des déclarations en préambule avec :

Code:
Option Explicit

Type Record    
    n1 As String * 24
    n2 As String * 9
    n3 As String * 8
    n4 As String * 7
    n5 As String * 3
    n6 As String * 11
    n7 As String * 8
    n8 As String * 50
    n9 As String * 10
    n10 As String * 5
    n11 As String * 30
    n12 As String * 8
    n13 As String * 6
    n14 As String * 8
    n15 As String * 26
    n16 As String * 9
    n17 As String * 6

Je souhaiterais comprendre ce que j'utilise; si tu as un peu de temps pour m'expliquer.

Merci :p
 

mutzik

XLDnaute Barbatruc
Re : Gestion des fichiers *.txt avec séparateur "espace"

re,

en fait, dans le code que tu cites, je découpe la ligne d'information ( de type string = texte) en 17 morceaux de taille variable et que je mets ensuite dans les cellules A1 à A17
le total de tous les champs fait 226 caractères, + 2 pour le CR LF (Carriage Return et Line Feed)
on peut aussi, comme dans l'autre exemple ne mettre que toute la ligne dans une cellule et/ou découper cette ligne en mettant une info par colonne

Pour plus de clarification, il faudrait que tu me donnes la longueur exacte de chaque champ et ce qu'il représente, ex:
champ1 : matricule sur 26 caractères + 1 espace de séparateur de champ
champ 2 : 8 espaces + SC (séparateur de champ)
champ 3 ...

ces infos sont ensuite utilisées pour lire et réécrire proprement les infos dans le fichier
 

dieu08

XLDnaute Occasionnel
Re : Gestion des fichiers *.txt avec séparateur "espace"

Bonjour mutzik

Après analyse, et recherche sur le net, j'ai fini par comprendre la première partie de ton développement test(), que j'ai adapté :

Code:
Option Explicit

Type interface
    int1 As String * 8
    int2 As String * 4
    int3 As String * 4
    int4 As String * 1
    int5 As String * 7
    int6 As String * 2
    int7 As String * 1
    int8 As String * 112
    int9 As String * 60
    int10 As String * 20
    int11 As String * 12
    int12 As String * 12
    int13 As String * 12
    int14 As String * 3
    int15 As String * 1
    int16 As String * 2
    int17 As String * 7
    int18 As String * 7
    int19 As String * 5
    int20 As String * 5
    int21 As String * 11
    int22 As String * 2
    int23 As String * 5
    int24 As String * 30
    int25 As String * 30
    int26 As String * 30
    int27 As String * 30
    int28 As String * 5
    int29 As String * 30
    int30 As String * 4
    int31 As String * 10
    int32 As String * 1
    int33 As String * 10
    int34 As String * 3
    int35 As String * 1
    int36 As String * 14
        
End Type
       
Sub IntText()

Dim MyInterface As interface

Open "C:\DOCUME~1\FRVARA~1\Bureau\WORK_T~1\COMPTA~2\TEST_O~1\test.dat" For Binary As #1 Len = Len(MyInterface)

Do While Not EOF(1)

    Get #1, , MyInterface
        Cells(1, 1) = MyInterface.int1
        Cells(1, 2) = MyInterface.int2
        Cells(1, 3) = MyInterface.int3
        Cells(1, 4) = MyInterface.int4
        ' à compléter  
Loop

Close #1

End Sub

Par contre, j'ai beaucoup de mal à décrypter ta façon de remplir les informations avec test2(). Si cela t'es possible, pourrais-tu me décrire les étapes de ton code pour que je réussise à alimenter mon onglet avec les informations de chaque "MyInterface.int*" dans les colonnes de la ligne 1 pour la ligne 1 du fichier *.txt et ainsi de suite ?

Merci.
 

mutzik

XLDnaute Barbatruc
Re : Gestion des fichiers *.txt avec séparateur "espace"

re,

le code de test2 n'a rien à voir avec l'autre façon de faire, ce sont deux méthodes différentes pour ouvrir les infos

le premier:
tu peux retrouver directement l'enregistrement num 17 (par exemple)

le 2eme code
te sort toutes les infos du fichier les une en dessous des autres
 

Discussions similaires

Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
312 211
Messages
2 086 289
Membres
103 170
dernier inscrit
HASSEN@45