[résolu] un souci dans une macro automatique pour enregistrer en txt

stephsteph

XLDnaute Occasionnel
Bonjour à tous, bonjour le forum,

J'ai une macro automatique qui fait diverses manip simples. C'est OK.
A la fin, je demande de copier le contenu d'une colonne dans une nouvelle feuille appelée menualphaCSS. C'est OK.
Puis je finis en demandant l'enregistrement en txt de la feuille menualphaCSS qui ne contient que cette colonne.
Le fichier txt est bien créé mais il est vide.

Voici le tout début et la fin du code:

Code:
    Dim fs As Object
    Dim a As Object
ActiveCell.Offset(0, 6).Range("A1:A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("MenualphaCSS").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A1").Select
    Sheets("MenualphaCSS").Select
    Cells.Replace What:="<!--/-->", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("A1").Select
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile(ThisWorkbook.Path & "\menualphaCSS.txt", True)

Si pour contourner j'essaie d'enregistrer avec la macro automatique d'Excel sous texte MsDos, ou bien texte séparateur tabulation, ou bien par exemple en csv, cela marche (mon fichier est créé et il est rempli de ma colonne), MAIS chaque nouvelle ligne est précédée d'un intempestif guillemet (") dont je ne veux pour rien (et je ne peux pas l'effacer car il y en a d'autres, eux voulus)

Code:
ActiveWorkbook.SaveAs Filename:="C:\menualphaCSS.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True

Je cale (sèche).

Une solution ?

Merci de votre aide,

Steph
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : un souci dans une macro automatique pour enregistrer en txt

bonsoir,

ça ne fonctionne pas comme ça !

voir la suite ici:

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(ThisWorkbook.Path & "\menualphaCSS.txt", True)
a.WriteLine ("Ligne écrite dans le fichier")
a.Close


EDIT:
ou utiliser un fichier à écriture séquentiel comme ceci:
--------------------------------------------------------------
Open ThisWorkbook.Path & "\menualphaCSS.txt" For Output As #1
Print #1, "ceci est une première ligne"
Print #1, "ceci est une deuxième ligne"
Col = 1
For Lig = 1 To 5
Print #1, Cells(Lig, Col)
Next
Print #1, "ceci est la dernière ligne"
Close #1

ou encore avec copy du range de données:
-------------------------------------------------
Sub ExempleAvecUnRangeDansNouvClasseur()
Sheets(1).Activate
Range("A1:F10").Copy
Workbooks.Add
Range("A1").PasteSpecial xlPasteValues
ActiveWorkbook.SaveAs Filename:="CheminEtFichier.txt", FileFormat:=xlUnicodeText, CreateBackup:=False
ActiveWorkbook.Close SaveChanges:=False
End Sub
 
Dernière édition:

stephsteph

XLDnaute Occasionnel
Re : un souci dans une macro automatique pour enregistrer en txt

Bonjour Roland_M

Merci de ta réaction.
Je suis désolée.
J'ai d'autres macros pour d'autres fichiers où simplement
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(ThisWorkbook.Path & "\menualphaCSS.txt", True)
fonctionne bien
sans
a.WriteLine ("Ligne écrite dans le fichier")
a.Close
Donc je m'interroge

J'ai beaucoup écrémé le web avant de poster et je n'ai rien trouvé dans mon cas particulier

J'attache ci-joint un exemple en xlsx et le résultat en txt avec toujours les guillemets en testant plusieurs options, soit avec un enregistrement manuel, soit avec l'automate de macro.

Par contre si j'ouvre un fichier txt avec notepad (ou ++), que je copie le champ manuellement je n'ai pas les guillemets.

A+

Steph

PS: je n'ai pas pu attacher le fichier résultat en txt, le serveur me dit fichier invalide (pourtant txt est listé comme possible)
mais c'est facile à faire chez toi, le résultat affiche un guillemet au début et un autre à la fin de chaque ligne (et comme dans chaque ligne il y adéjà plein de guillemets, c'est la galère!
 

Pièces jointes

  • testguillemet.xlsx
    8.6 KB · Affichages: 36

Roland_M

XLDnaute Barbatruc
Re : un souci dans une macro automatique pour enregistrer en txt

re

je ne comprend pas ton exemple !?
les lignes sur la feuille me semble normales avec leurs guillemets sinon ça ne ressemblerait à rien !

concernant les guillemets avec mon exemple je sais que Write ajoute des guillimets et pas avec Print

Open ThisWorkbook.Path & "\essai.txt" For Output As #1
Write #1, "première ligne"
Print #1, "deuxième ligne"
Close #1

j'otiens ceci:
"première ligne"
deuxième ligne

EDIT: j'ai essayé ton code(ta macro) tel quel et j'obtiens naturellement un fichier vide, ce qui ma paraît normale avec ce code !

c'est que dans tes autres fichiers il y a autre après pour écrire !?
quelque chose m'échappe, mais ce n'est pas clair !?


Set a = fs.CreateTextFile(ThisWorkbook.Path & "\menualphaCSS.txt", True)
ceci n'effectue pas de sauvegarde c'est juste instancier la variable object(a) c'est tout !
et en plus non fermé !?
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : un souci dans une macro automatique pour enregistrer en txt

re

voir avec cette routine qui fonctionne !
Code:
Sub Essai()
ActiveCell.Offset(0, 6).Range("A1:A1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Workbooks.Add
Range("A1").PasteSpecial xlPasteValues
Cells.Replace What:="<!--/-->", Replacement:="", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Range("A1").Select
    
Application.DisplayAlerts = False 'ceci évite le message 'remplacer si existe !?' à toi de voir !?
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\menualphaCSS.txt", _
          FileFormat:=xlUnicodeText, CreateBackup:=False
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
End Sub
 

stephsteph

XLDnaute Occasionnel
Re : un souci dans une macro automatique pour enregistrer en txt

Bonjour Roland_M

Merci bien.
Je vais tester à froid demain.
Là je suis un peu stressée.

Sinon j'ai oublié de dire que j'avais aussi testé en ajoutant les 2 lignes que tu avais suggérées.
J'obtiens bien un fichier txt et cette fois il contient
Ligne écrite dans le fichier


Il faudrait UNE INSTRUCTION pour qu'il contienne la totalité de la feuille menualphaCSS.
comme : a.WriteLine ("INSTRUCTION")


Tiens d'aileurs voici le txt obtenu que je n'avais pas pu attacher avant...

"<div id=""menu"" onmouseout=""mouseOut()""> <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuA')"">&nbsp;A&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuB')"">&nbsp;B&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuC')"">&nbsp;C&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuD')"">&nbsp;D&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuE')"">&nbsp;E&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuF')"">&nbsp;F&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuG')"">&nbsp;G&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuH')"">&nbsp;H&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuI')"">&nbsp;I&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuJ')"">&nbsp;J&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuK')"">&nbsp;K&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuL')"">&nbsp;L&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuM')"">&nbsp;M&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuN')"">&nbsp;N&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuO')"">&nbsp;O&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuP')"">&nbsp;P&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuQ')"">&nbsp;Q&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuR')"">&nbsp;R&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuS')"">&nbsp;S&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuT')"">&nbsp;T&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuU')"">&nbsp;U&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuV')"">&nbsp;V&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuW')"">&nbsp;W&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuX')"">&nbsp;X&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuY')"">&nbsp;Y&nbsp;</span>&nbsp;|&nbsp; <span class=""styleOutMenu"" onmouseover=""mouseOverMenu(this, 'itemMenuZ')"">&nbsp;Z&nbsp;</span></div> <div id=""itemVide""> &nbsp; </div>"
"<div onmouseout=""mouseOut()"" onmouseover=""mouseOverItem()"" id=""itemMenuA"" class=""item""><a href=""http://www.blabla.org/aco-Art.php"" class=""lienItem"" target=""_blank"">Art [1960- ]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Abra.php"" class=""lienItem"" target=""_blank"">Abra [1955- ]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Ada.php"" class=""lienItem"" target=""_blank"">Ada [1979- ]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Ago.php"" class=""lienItem"" target=""_blank"">Ago [1948- ]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Ande.php"" class=""lienItem"" target=""_blank"">Ande [1957- ]</a>&nbsp;|&nbsp;</div>"
"<div onmouseout=""mouseOut()"" onmouseover=""mouseOverItem()"" id=""itemMenuB"" class=""item""><a href=""http://www.blabla.org/aco-Bai.php"" class=""lienItem"" target=""_blank"">Bai [1938 &dagger;]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Bal.php"" class=""lienItem"" target=""_blank"">Bal [1920 &dagger;]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Ban.php"" class=""lienItem"" target=""_blank"">Ban [1938- ]</a>&nbsp;|&nbsp;"


A+, merci encore et bon WE

Steph
 

stephsteph

XLDnaute Occasionnel
Re : un souci dans une macro automatique pour enregistrer en txt

Bonjour Roland_M

Merci mais désolée...

J'ai testé ta proposition et hélas cela ne marche pas (je récupère les guillemets intempestifs... d'ailleurs je me rend compte qu'il y en a d'autres aux milieux).

Par exemple j'obtiens pour la 2ème ligne (comme en le faisant avec une macro automatique):

"<div onmouseout=""mouseOut()"" onmouseover=""mouseOverItem()"" id=""itemMenuA"" class=""item""><a href=""http://www.blabla.org/aco-Art.php"" class=""lienItem"" target=""_blank"">Art [1960- ]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Abra.php"" class=""lienItem"" target=""_blank"">Abra [1955- ]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Ada.php"" class=""lienItem"" target=""_blank"">Ada [1979- ]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Ago.php"" class=""lienItem"" target=""_blank"">Ago [1948- ]</a>&nbsp;|&nbsp;"
"<a href=""http://www.blabla.org/aco-Ande.php"" class=""lienItem"" target=""_blank"">Ande [1957- ]</a>&nbsp;|&nbsp;</div>"

alors que je devrais avoir:

<div onmouseout="mouseOut()" onmouseover="mouseOverItem()" id="itemMenuA" class="item"><a href="http://www.blabla.org/aco-Art.php" class="lienItem" target="_blank">Art [1960- ]</a>&nbsp;|&nbsp;
etc.

Comme dans l'exemple xslx

C'est vraiment troublant (sans oublier l'autre soluce qui passe par set fs où il semble manquer une instruction).

A+

Steph
 

stephsteph

XLDnaute Occasionnel
Re : un souci dans une macro automatique pour enregistrer en txt

Bonjour,
C'est résolu ! Je suis très fière.
Un peu grâce à toi Roland_M.
Je suis repartie de Set a = fs.CreateTextFile(ThisWorkbook.Path & "\menualphaCSS.txt", True)

J'ai cherché sur Internet des infos sur WriteLine et j'ai trouvé le code suivant (en Anglais, c'était dur dur la trad mot à mot)
Je l'ai adapté en remplaçant « xml » par txt et j'ai même pu éviter de créer une nouvelle feuille en jouant sur la colonne dans la feuille initiale qui est la 7, avec a.WriteLine dat(i, 7)
Pour moi c'est OK et cela aidera je l'espère sur le forum.
Si quelqu'un lit ce fil, j'aurai juste une question supplémentaire pour un autre fichier,
c'est comment modifier le code pour qu'il ne prenne pas qu'une seule colonne mais plusieurs colonnes adjacentes?
J'ai essayé a.WriteLine dat(i, 7 – 8), mais cela bugue!
J'ai aussi essayé Set myrange = .Range("A1:B1"..., cela ne bugue pas mais la 2ème colonne n'est pas prise (c'est d'ailleurs relou)!
A+, peut-être, Steph

Code:
Sub exportxmlfile()
   ' declare all your variables
    Dim myrange As Range
    Dim fs As Object
    Dim a As Object
    Dim dat As Variant
    Dim i As Long

    ' No need to activate sheet
    With Worksheets("xml")
        ' get the actual last used cell
        Set myrange = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
        ' copy range data to a variant array - looping over an array is faster
        dat = myrange.Value
        Set fs = CreateObject("Scripting.FileSystemObject")
        ' use the excel file name
        Set a = fs.CreateTextFile("C:\exports\2012\" & .Parent.Name & ".xml", True)
    End With
    For i = 1 To UBound(dat, 1)
        a.WriteLine dat(i, 1)
    Next
    a.Close
End Sub
 

Discussions similaires

Réponses
11
Affichages
1 K