Utilisation de VBA pour mise en forme Excel=>Fichier texte

Kristelle

XLDnaute Nouveau
Bonsoir tout le monde,

C'est la première fois que je m'inscris à un forum, j'espères que vous serez indulgent avec des débutantes (j'accepte les moqueries si elles sont constructives ^^).

Donc voilà je vous expose mon problème (qui n'en est peut être pas un pour certains mais je débute dans les macros...:s). J'ai des valeurs dans un fichier Excel (avec des structures qui se répètent, et je voudrai les récupérer et les ordonner dans un fichier texte (un fichier texte créé par la macro en pouvant choisir l'emplacement de destination). En me baladant sur le forum, j'ai pu trouver quelques fonctions mais l'ordonnancement, qui est ma principale priorité, n'est pas explicitée. J'ai joint un fichier Excel (avec des valeurs aberrantes) dans le cas où je n'aurai pas été assez claire, avec le type de fichier texte (ici en format word) que j'aimerai obtenir en résultat.

Si quelqu'un pouvez m'aider dans ma démarche.
Merci d'avance
Kristelle
 
Dernière édition:

Kristelle

XLDnaute Nouveau
Re : Utilisation de VBA pour mise en forme Excel=>Fichier texte

Bonsoir kjin,

J'ai pas réussi à fournir un .txt dans la gestion des pièces jointes ("fichier non valide"...). C'était soit word, soit je zippais le fichier excel et le .txt, j'ai choisi la première option :) (en espérant que je ne n'instaure pas trop de doute : c'est bien un .txt que je souhaite obtenir via une macro)

Voilou ^^
 

kjin

XLDnaute Barbatruc
Re : Utilisation de VBA pour mise en forme Excel=>Fichier texte

Bonsoir,
Est-ce bien le résultat attendu ?
TEST 1

RESULTAT DE TEST


A 10 20
z1 0 0
z2 0 0
z3 0 0
z4 0 0
a1 1 1
a2 2 2
a3 3 3


B 30 40
z1 0 0
z2 0 0
z3 0 0
z4 0 0
b1 4 4
b2 5 5
b3 6 6
b4 7 7
Il n'y a donc pas de séparateurs à ajouter ?
Ce fichier devra -t-il pouvoir être réimporté ?
Je ne vois pas la gestion des cellules vides que tu signales !
A+
kjin
 

Kristelle

XLDnaute Nouveau
Re : Utilisation de VBA pour mise en forme Excel=>Fichier texte

Merci de te pencher sur mon cas ^^,

Oui c'est le type de résultat attendu, et mise à part les espaces, il n'y a pas de séparateurs particuliers. Il est en effet susceptible d'être chargé plus tard pour traitement, mais je ne suis pas encore là ^^. La gestion des cellules vides c'était pour ne pas avoir dans le fichier texte autant de lignes de séparation que de cellules vides dans le ficher Excel (vu que je ne sais pas comment fonctionne les macros... Ce que tu me montres c'est un fichier que tu as généré??

Kristelle
 

KenDev

XLDnaute Impliqué
Re : Utilisation de VBA pour mise en forme Excel=>Fichier texte

Bonjour Kristelle, le forum,

Je te propose ceci, voit si cela te convient. Le fichier est créé dans le répertoire du classeur.

Cordialement.

VB:
Option Explicit

Sub LegendeTest()
Dim Nff As Byte, Pth As String, Txt() As String, oS1 As Worksheet, oS2 As Worksheet
Dim FcNm As String, i As Long, Rw1 As Long, NLn As Long, Rw2 As Long, j As Long

Set oS1 = Worksheets("Feuil1"): Set oS2 = Worksheets("Feuil2")
Pth = ThisWorkbook.Path: Nff = FreeFile: FcNm = "Test" & Nff & ".txt"
Rw1 = oS1.Cells(Rows.Count, 4).End(xlUp).Row: If Rw1 = 1 Then Exit Sub
ReDim Txt(1 To 3): Txt(1) = "TEST 1": Txt(3) = "RESULTAT DE TEST": NLn = 3
Rw2 = oS2.Cells(Rows.Count, 1).End(xlUp).Row

i = 2
Do
    If Trim(oS1.Cells(i, 1)) <> "" And Trim(oS1.Cells(i, 1)) <> "." Then
        If Trim(oS1.Cells(i, 2)) <> "" And Trim(oS1.Cells(i, 2)) <> "." Then
            NLn = NLn + 3: ReDim Preserve Txt(1 To NLn)
            Txt(NLn) = oS1.Cells(i, 1) & " " & oS1.Cells(i, 2) & " " & oS1.Cells(i, 3)
            NLn = NLn + Rw2 - 1: ReDim Preserve Txt(1 To NLn)
            j = 2
            Do
                Txt(NLn - Rw2 + j) = "  " & oS2.Cells(j, 1) & " " & oS2.Cells(j, 2) & " " & oS2.Cells(j, 2)
                j = j + 1
            Loop Until j > Rw2
        End If
    Else
        If Trim(oS1.Cells(i, 4)) <> "" And Trim(oS1.Cells(i, 4)) <> "." Then
            NLn = NLn + 1: ReDim Preserve Txt(1 To NLn)
            Txt(NLn) = "  " & oS1.Cells(i, 4) & " " & oS1.Cells(i, 5) & " " & oS1.Cells(i, 6)
        End If
    End If
i = i + 1
Loop Until i > Rw1

Call WriteNLine(Txt(), NLn, FcNm, Pth, Nff)
Set oS1 = Nothing: Set oS2 = Nothing
End Sub

Sub WriteNLine(vStr() As String, NbRw As Long, vFnm As String, vPth As String, vNff As Byte)
Dim i As Long
Open vPth & "\" & vFnm For Output As #vNff
i = 1
Do
    Print #vNff, vStr(i)
    i = i + 1
Loop Until i > NbRw
Close #vNff
End Sub

Edit : ', vWL As String' dans la fonction WriteNLine ne ser à rien, oubli de nettoyage, à supprimer. Corrigé dans le code, pas dans le classeur.
 

Pièces jointes

  • exemple_test.xls
    47.5 KB · Affichages: 117
  • exemple_test.xls
    47.5 KB · Affichages: 115
  • exemple_test.xls
    47.5 KB · Affichages: 115
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Utilisation de VBA pour mise en forme Excel=>Fichier texte

Bonsoir,
Je ne sais pas si tu as vu mon précèdent message, j'aurai voulu savoir comment tu t'y étais pris pour obtenir le résultat attendu.
Simplement en ouvrant ton fichier exemple sous word !
Maintenant, pour répondre à ta demande, je constate qu'il n'y a aucune logique évidente dans la structure de ton fichier.
Il y a 6 colonnes dans le fichier mais toutes ne sont pas renseignées;y aura t-il à terme d'autres valeurs dans ces colonnes et quelle influence sur la structure du fichier txt
Il y a des espaces au début de chaque lignes, faut-il les conserver ?
Tu dis que tu ne veux pas de séparateur, comment feras-tu pour réimporter le fichier en conservant sa structure...
Bref, en nous expliquant un peu plus le but de ce fichier...
A+
kjin
 

KenDev

XLDnaute Impliqué
Re : Utilisation de VBA pour mise en forme Excel=>Fichier texte

Bonsoir Kristelle, Kjin,

Pour préciser : mon code marche avec l'exemple fourni. Il continuera à fonctionner tant que pour la feuille 1 :

_ Les données légende 4 à 6 ne sont pas au même niveau que les 1 à 3.
_ Le fichier n'aura pas d'autres parasites que le "."
_ Il y aura une ligne de titre (peu importe le contenu ou l'absence de contenu)

pour la feuille 2 :
_ Il y aura une ligne de titre (peu importe le contenu ou l'absence de contenu)
_ pas de lignes vides

La macro ignore également les données C & D sur le test si colonne 1 alors il doit y avoir une colonne 2. Si jamais il devait y avoir des données 4 à 6 pour une lettre sans colonne 2, ces données se retrouveraient associées à l'enregistrement précédent.

Je pense avoir fait le tour...

Cordialement

KD
 

Discussions similaires

Statistiques des forums

Discussions
314 655
Messages
2 111 605
Membres
111 217
dernier inscrit
aladinkabeya2