uploader/tronquer/sauvegarder au format txt

theocyt

XLDnaute Nouveau
Hello

Ma première macro !! et surement pas la dernière !!!!

Alors je reçois des fichiers au format .txt sans retour chariot.
Je souhaite en intégrer un tous les 120 caractères.

J'ai donc tenter d'automatiser ca dans Excel avec mes faibles connaissances des formules et en repompant des bouts de macro par ci par là.

En pièce jointe un exemple de fichier à charger.
Dans ma conception, j'ai une erreur lorsque j'upload mon fichier car en feuil2 je devrais avoir l'intégralité du fichier dans la cellule A1. Et là il tronque sur plusieurs ligne la 1ère ligne du fichier .txt.

Et ensuite j'aimerai apprendre à 'optimiser' le résultat que j'ai sorti.
(la fonction enregistrer macro automatiquement m'aide bcp !!!)

Theocyt
 

Pièces jointes

  • BMCI.zip
    23.4 KB · Affichages: 43

Roland_M

XLDnaute Barbatruc
Re : uploader/tronquer/sauvegarder au format txt

bonsoir

essais comme ceci (à cet endroit de ton code)

Else
Feuil2.Select
NumFile = FreeFile
Compteur = 1
Open Nom_Fichier For Input As NumFile ' ouverture du fichier
Do While Not EOF(NumFile)
Input #NumFile, Texte
For I = 1 To Len(Texte) Step 120
Feuil2.Range("A" & Compteur).Value = Left(Texte, 120)
Texte = Mid(Texte, 121)
Compteur = Compteur + 1
Next
Loop
End If
 

ledzepfred

XLDnaute Impliqué
Re : uploader/tronquer/sauvegarder au format txt

bonjour et bienvenue dans le monde merveilleux des macros,

une autre piste :

Code:
Sub extraction()
Workbooks.OpenText Filename:="C:\BMCI.txt", Origin:=xlMSDOS, StartRow:=1 _
, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), Array(120, 1)), TrailingMinusNumbers:=True
i = 1
Do While IsEmpty(Cells(i, 2)) = False
x = Len(Cells(i, 2))
If x > 120 Then
Cells(i + 1, 1) = Left(Cells(i, 2), 120)
Cells(i + 1, 2) = Right(Cells(i, 2), x - 120)
Else
Cells(i + 1, 1) = Cells(i, 2)
End If
i = i + 1
Loop
Columns(2).ClearContents
End Sub

Ce code réalise sans formule les trois étapes de ta procédure, reste à enregistrer le fichier comme tu le souhaites

A+
 
Dernière édition:

theocyt

XLDnaute Nouveau
Re : uploader/tronquer/sauvegarder au format txt

Merci pour cette aide, je vais me plonger dans ce monde merveilleux pendant mes soirées !!

Roland _ M :
J'obtiens toujours en résultat que le prmeier bloc de chiffre de la première ligne. Je pense qu'il y a un "séparateur" qui est interprêté.

Ledzepfred :
Aucun retour chariot n'est mis en place dans la macro, mais je vais tenter de l'insérer ce soir. Retour d'info demain.

Theocyt
 

myDearFriend!

XLDnaute Barbatruc
Re : uploader/tronquer/sauvegarder au format txt

Bonjour theocyt, Roland_M, ledzepfred, le Forum,

Une autre proposition... J'ai cru comprendre que tu avais plusieurs fichiers .txt à traiter. Voici une façon de le faire "en lot" :

  1. Tu copies le code ci-dessous dans un module de code Standard (ex: Module1),
  2. Tu lies ton bouton à la procédure Traitement(),
  3. Et tu sauvegardes ce classeur Excel dans le répertoire où se trouvent tes fichiers .txt à traiter.
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]

[COLOR=NAVY]Sub[/COLOR] Traitement()
[COLOR=GREEN]'myDearFriend!  -  www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] Fichier [COLOR=NAVY]As Object
Dim[/COLOR] Chemin [COLOR=NAVY]As String[/COLOR], T [COLOR=NAVY]As String
Dim[/COLOR] Compteur [COLOR=NAVY]As Long[/COLOR]
    [COLOR=GREEN]'Chemin à adapter le cas échéant...[/COLOR]
    Chemin = ThisWorkbook.Path & "\"
    [COLOR=GREEN]'Traitement[/COLOR]
    [COLOR=NAVY]With[/COLOR] CreateObject("Scripting.FileSystemObject")
        [COLOR=NAVY]For Each[/COLOR] Fichier [COLOR=NAVY]In[/COLOR] .GetFolder(Chemin).Files
            [COLOR=NAVY]If[/COLOR] Fichier.Name [COLOR=NAVY]Like[/COLOR] "*.txt" [COLOR=NAVY]Then[/COLOR]
                Compteur = Compteur + 1
                [COLOR=GREEN]'Ouvre le fichier texte et mémorise le contenu[/COLOR]
                [COLOR=NAVY]With[/COLOR] .OpenTextFile(Chemin & Fichier.Name, 1)
                    T = .readall
                    .[COLOR=NAVY]Close
                End With[/COLOR]
                [COLOR=GREEN]'Traite le contenu[/COLOR]
                T = Split120(T)
                [COLOR=GREEN]'Crée le fichier texte modifié[/COLOR]
                [COLOR=NAVY]With[/COLOR] .CreateTextFile(Chemin & "OK " & Fichier.Name, [COLOR=NAVY]True[/COLOR])
                    .WriteLine T
                    .[COLOR=NAVY]Close
                End With
            End If
        Next[/COLOR] Fichier
    [COLOR=NAVY]End With[/COLOR]
    MsgBox Compteur & " fichiers traités."
[COLOR=NAVY]End Sub[/COLOR]

[COLOR=NAVY]Private Function[/COLOR] Split120([COLOR=NAVY]ByVal[/COLOR] T [COLOR=NAVY]As String[/COLOR]) [COLOR=NAVY]As String[/COLOR]
[COLOR=GREEN]'myDearFriend!  -  www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] T2 [COLOR=NAVY]As String
    Do While[/COLOR] Len(T)
        T2 = T2 & Left(T, 120) & vbCrLf
        T = Mid(T, 121)
    [COLOR=NAVY]Loop[/COLOR]
    Split120 = T2
[COLOR=NAVY]End Function[/COLOR]
J'ai repris et légèrement modifier le code que tu peux retrouver ici :
[VBA] Modifier en lot le contenu des fichiers .txt d'un répertoire

Cordialement,
 

Statistiques des forums

Discussions
312 505
Messages
2 089 098
Membres
104 031
dernier inscrit
RimeF