Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Copier le texte d'un fichier .txt en TextBox

Dudu2

XLDnaute Barbatruc
Bonjour,

Je rencontre un problème que vous avez peut-être déjà résolu.

En copiant le contenu d'un fichier texte dans une TextBox j'obtiens des caractères étranges. Est-ce le résultat d'un codage Unicode des caractères accentués dans le fichier texte ?

Fichier texte TextBox


Merci par avance pour toute indication.

Edit:
Je viens de voir qu'en enregistrant le fichier texte en encodage ANSI le problème ne se pose plus.
Mais ça créé l'obligation de cet encodage qui n'est pas pas défaut.
Une solution pour l'encodage par défaut des fichiers texte serait utile.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Bonsoir @patricktoulon,

Voilà un fichier...
Et le code pour le lire au cas où...
VB:
'-------------------------------------
'Lecture du contenu d'un fichier texte
'-------------------------------------
Private Function LireFichierTexte(NomCompletFichier As String) As String
    Dim IndexFichier As Integer
 
    IndexFichier = FreeFile()
    Open NomCompletFichier For Binary Access Read As #IndexFichier
    LireFichierTexte = Space$(LOF(IndexFichier))
    Get #IndexFichier, , LireFichierTexte
    Close #IndexFichier
End Function

Tu veux peut-être identifier les caractères accentués et limiter le StrConv vbFromUnicode à ceux-ci ?
 

Pièces jointes

  • Mémo 0.txt
    82 bytes · Affichages: 5

TooFatBoy

XLDnaute Barbatruc
Oui c'est bien identifié comme ça.
Ca ne l'était pas quand j'ai lu et répondu à la question.


Mais l'idée serait d'avoir un petit bout de code qui fasse la traduction car l'UTF-8 est par défaut l'encodage des fichiers textes.
Pourquoi ne pas plutôt ouvrir le fichier en utilisant le format UTF-8 ?
Désolé, je n'ai pas un tel bout de code.
 

Dudu2

XLDnaute Barbatruc
Comment tu fais pour ouvrir un fichier texte en mode UTF-8 en VBA ?
Je ne sais faire que ça:
Open NomCompletFichier For Binary Access Read As #IndexFichier
Et je ne vois pas où on peut indiquer un encodage.
 

TooFatBoy

XLDnaute Barbatruc
Une proposition :
VB:
Sub Importer_UTF8(NomFichier As String)
' Ouverture du fichier en forçant le décodage des caractères en mode UTF-8
'
Dim MonFlux As Object
Dim MonTexte As String

    Set MonFlux = CreateObject("ADODB.Stream")

    With MonFlux
        .Charset = "utf-8"
        .Open
        .LoadFromFile (NomFichier)
        MonTexte = .ReadText()
        .Close
    End With

    Set MonFlux = Nothing

End Sub

/!\ Il me semble que ça ne marche que si les caractères sont encodés en UTF-8 et que "les données du fichier sont aussi encapsulées aussi au format UTF-8".
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
En effet ça marche. Je ne connaissais absolument pas ce truc.

Mais j'ai le problème inverse de l'écriture.
Si je prends ma TextBox et que je l'écris avec un Print #IndexFichier, Texte traditionnel, ça repart en ANSI.

T'aurais pas le code pour l'écriture en UTF-8 ?
 

patricktoulon

XLDnaute Barbatruc
re
je savais bien que j'avais ca quelque part
je reprend une partie de ma fonction encode decode base64 et voila
VB:
Sub test1()
Dim texto$, fichier$
fichier = "C:\Users\polux\Desktop\Mémo UTF-8.txt"
j_aime_bien_mes_carateres_bizarres_moi fichier, texto$
MsgBox texto
End Sub

Sub test2()
Dim texto$, fichier$
fichier = "C:\Users\polux\Desktop\Mémo UTF-8.txt"
je_veux_mes_accents_sinon_je_cris fichier, texto
MsgBox texto
End Sub

Function j_aime_bien_mes_carateres_bizarres_moi(fichier$, ByRef texto$)
    Dim laChaine As String, x
    fichier = "C:\Users\polux\Desktop\Mémo UTF-8.txt"
    x = FreeFile
    Open fichier For Binary Access Read As #x
    laChaine = String(LOF(x), " ")
    Get #x, , laChaine
    Close #x
   texto = laChaine
End Function

Function je_veux_mes_accents_sinon_je_cris(fichier$, ByRef texto$)
Dim streamer, sTexte
Set streamer = CreateObject("ADODB.Stream")
streamer.Charset = "utf-8"
streamer.Open
streamer.LoadFromFile (fichier)
sTexte = streamer.ReadText()
texto = sTexte
End Function

edit n c'est croisé @Marcel32
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…