Rendre explotable sous excel un fichier txt !

symphyle

XLDnaute Nouveau
Bonjour,

Je dois rendre exploitable sur excel une extraction au format txt.
Cette extraction ressemble à ça :

cf fichier ci joint

Donc au final des colonnes et une ligne qui s'étend sur 3 ligne !
Par exemple la catégorie s'étend comme ceci :
PIECE
DETACHEE-
NEUVE

Je dois donc trouver le moyen :
- Cibler un lot de trois lignes
- Le diviser en cellule
- Concaténer le tout

Ma démarche est elle bonne ?

Une piste pour m'éclairer !
Inutile de préciser qu'il s'agit de mon premier travail sous VBA excel... si vous pouvez détailler vos réponses cela m'aiderai énormément !

Bien cordialement,

Symph
 

Pièces jointes

  • une partie.zip
    1.4 KB · Affichages: 32

job75

XLDnaute Barbatruc
Re : Rendre explotable sous excel un fichier txt !

Bonjour symphyle,

Une piste pour m'éclairer !

Clic droit sur l'icône du fichier => Ouvrir avec => Microsoft Excel

Après vous faites ce que vous voulez sur Excel, en particulier :

- menu Données-Convertir pour placer les textes dans des cellules

- concatener des cellules

- menu Fichier-Enregistrer sous, en choisissant le format .txt

C'est une piste :)

A+
 

symphyle

XLDnaute Nouveau
Re : Rendre explotable sous excel un fichier txt !

En demandant une piste, je faisais référence à ce que j'ai expliqué quelques lignes au dessus :

Code:
Je dois donc trouver le moyen : 
- Cibler un lot de trois lignes
- Le diviser en cellule
- Concaténer le tout

Ma démarche est elle bonne ?

Et si mon raisonnement n'ai pas bon, m'indiquer comment je dois procéder !
Je ne pense pas que tu ais regardé la pièce jointe à mon message, car tu aurais probablement vu (sauf erreur de ma part) qu'un simple traitement de donné automatique avec séparateur ne peux aps convenir.

Merci quand meme...
 

job75

XLDnaute Barbatruc
Re : Rendre explotable sous excel un fichier txt !

Je ne pense pas que tu ais regardé la pièce jointe à mon message, car tu aurais probablement vu (sauf erreur de ma part) qu'un simple traitement de donné automatique avec séparateur ne peux aps convenir.

Bien sûr que je regarde les pièces jointes :)

Justement la macro suivante convertit le texte dans les cellules (en largeur fixe) :

Code:
Sub Traitement()
Dim derlig&, i&, j&, plage As Range, col As Byte, txt$, lig&, sup As Range

Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si on relance la macro
On Error Resume Next
'ouvre le fichier texte
Workbooks.Open ThisWorkbook.Path & "\une partie.txt" 'ou un autre chemin d'accès
If Err Then MsgBox "Fichier introuvable !": Exit Sub
'copie la feuille (sécurité)
Sheets(1).Copy After:=Sheets(1)
'renomme les feuilles
Sheets(2).Name = Sheets(1).Name & " (traité)"
Sheets(1).Name = Sheets(1).Name & " (original)"

derlig = Range("A65536").End(xlUp).Row
For i = 1 To derlig
  If Left(Cells(i, 1), 2) = "I " Then
    For j = i + 1 To derlig
      If Left(Cells(j, 1), 2) = "I " Or Cells(j, 1) = Chr(12) Then Exit For
    Next
    Set plage = Cells(i, 1).Resize(j - i)
    'convertit la plage vers les cellules (largeur fixe)
    plage.TextToColumns Destination:=Cells(i, 1), DataType:=xlFixedWidth
    'supprime la colonne des "M."
    If Cells(i, 3) = "M." Then Cells(i, 3).Resize(j - i).Delete xlToLeft
    'concatène verticalement
    For col = 2 To Cells(i, 256).End(xlToLeft).Column
      txt = Cells(i, col)
      For lig = i + 1 To j - 1
        txt = txt & IIf(Left(Cells(lig, col), 2) Like "? *", "", " ") & Cells(lig, col)
      Next
      Cells(i, col) = Application.Trim(txt) 'supprime les espaces inutiles
    Next
    'concatène horizontalement pour ramener la date en colonne N
    While Cells(i, "O") <> ""
      Cells(i, "H") = Cells(i, "H") & " " & Cells(i, "I")
      Cells(i, "I").Resize(j - i).Delete xlToLeft 'supprime la colonne concaténée
    Wend
    'transforme le texte en date
    Cells(i, "N") = CDate(Cells(i, "N"))
    'supprime la colonne des "I" (facultatif)
    'plage.Delete xlToLeft
    'crée l'union des lignes à supprimer
    If j > i + 1 Then
      Set plage = Cells(i + 1, 1).Resize(j - i - 1)
      Set sup = Union(IIf(sup Is Nothing, plage, sup), plage)
    End If
    i = j - 1
  End If
Next

If Not sup Is Nothing Then sup.EntireRow.Delete 'supprime les lignes superflues
Cells.Replace "M.", "", LookAt:=xlPart
Cells.Replace "- ", "-"
Cells.Replace "MANOMET RE", "MANOMETRE" 'vraiment, vraiment!!
'largeurs des colonnes
'Columns(1).ColumnWidth = 18 'ou autre valeur (si les "I" sont supprimés)
Columns("B:N").AutoFit 'ajustement automatique
End Sub

Seules sont traitées les lignes entre les "I".

Pour vous faciliter la tâche, je joins le fichier avec la macro.

Il faut le mettre dans le même répertoire que le fichier texte.

A+
 

Pièces jointes

  • Traitement fichier texte(1).xls
    44 KB · Affichages: 40
Dernière édition:

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87