XL 2019 VBA - problèmes de guillemets dans un export d'Excel vers un fichier texte

CHL1234

XLDnaute Nouveau
Bonjour,

J'aimerais créer une macro permettant d'exporter une sélection d'Excel vers un fichier texte.
Je pense y être presque parvenue, à ceci près que le fichier texte obtenu insère parfois des guillemets que je ne parviens pas à supprimer.

Ci-dessous le code que j'utilise. La macro va copier la sélection dans un nouveau fichier Excel, ouvrir une boîte de dialogue pour savoir comment nommer le nouveau fichier, et enregistrer celui-ci au format .txt dans C:\Documents.

Sub GenerateTxt()

Dim Filename As String
Dim Path As String
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
NomduFichier = InputBox("Please enter the name of the txt file", "Name of the file", "File")
Path = "C:\Documents"
ActiveWorkbook.SaveAs Filename:=NomduFichier, FileFormat:=xlTextWindows, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

End Sub

Et ci-joint un extrait du fichier Excel que je souhaite basculer en .txt. Si j'applique la macro ci-dessus, des guillemets apparaissent dans le fichier .txt que je crée lorsque j'ouvre celui-ci avec Notepad. A l'inverse, si je ne passe pas par la macro et que je copie-colle les valeurs dans NotePad, aucun guillemet n'apparaît.

Merci d'avance pour votre aide !
 

Pièces jointes

  • Extrait à copier dans fichier texte.xlsx
    8.7 KB · Affichages: 13

sylvanu

XLDnaute Barbatruc
Supporter XLD
et plus rigolo.
Si on regarde la valeur ASCII des caractères en pas à pas par :
VB:
Sub test()
    chaine = [B1].Value
    For i = 1 To Len(chaine)
        Caractère = Asc(Mid(chaine, i, 1))
        Valcar = Chr(Caractère)
    Next i
End Sub
Eh bien, ça commence par I1, aucun caractère spécial. Je donne ma langue au chat.:)
 

patricktoulon

XLDnaute Barbatruc
bonsoir
@sylvanu pousse un peu plus loin ;)
VB:
Sub WriteTxtFile()
    Dim Chaine As String, Fichier As String, f As Integer, Path As String
    'Path = "C:\Users\PC_PAPA\Desktop\"      ' Mettre chemin
    Path = Environ("userprofile") & "\Desktop\"     ' Mettre chemin
    On Error GoTo Erreur
    NomduFichier = InputBox("Please enter the name of the txt file", "Name of the file", "File")
    If NomduFichier <> "" Then
        Fichier = Path & NomduFichier & ".txt"
        f = FreeFile
        Open Fichier For Output As #f
        For i = 1 To 6  ' Nombre de lignes
            'Chaine = [A:B].Cells(i, 1) & "     " & [A:B].Cells(i, 2)    ' Construit la chaine à écrire
            Chaine = Join(WorksheetFunction.Index(Range("A1:Q1000").Value, i, 0), vbTab)     ' Construit la chaine à écrire
            Print #f, Chaine   'Ecrit chaine dans fichier
        Next i
        Close #f
    End If

    Exit Sub
Erreur:
    MsgBox "Le fichier de sortie est inaccessible"
End Sub

et c'est pas cette methode qui est complexe ;)

j'ai dis plus complexe ???? non!!!....

tiens regarce celle la
VB:
Sub rangeToTXT()
    Dim Fichier As String, f As Integer, Path As String
    Selection.Copy
    Path = Environ("userprofile") & "\Desktop\"     ' Mettre chemin
    NomduFichier = InputBox("Please enter the name of the txt file", "Name of the file", "File")
    If NomduFichier <> "" Then
        Fichier = Path & NomduFichier & ".txt"
        f = FreeFile
        Open Fichier For Output As #f
        Print #f, CreateObject("htmlfile").parentwindow.clipboardData.GetData("TEXT")   'Ecrit chaine dans fichier
        Close #f
    End If
End Sub
;)
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour CHL,
Pour mon code il faut changer le chemin et mettre le votre : Path = "C:\Users\PC_PAPA\Desktop\" Ne pas oublier le \ à la fin.
Je l'ai évidemment testé, il marche.
Normalement s'il ne parvient pas à le créer, il doit dire : "Le fichier de sortie est inaccessible"
Faites une recherche sur tous vos disques avec votre NomDeFichier.txt.
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 181
Membres
112 677
dernier inscrit
Justine11