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
Bien joué les barbabidules !
Bon allez, le premier qui me donne l'écriture en UTF-8 à partir d'ANSI ou la simple conversion d'ailleurs (y en a sur stackoverflow.com, mais je n'arrive plus à réfléchir ce soir) a gagné ... mon estime éternelle

D'ailleurs j'en peux plus, je vais me coucher
Je vous lirai demain. Bonne nuit.
 

TooFatBoy

XLDnaute Barbatruc
En effet ça marche. Je ne connaissais absolument pas ce truc.
Moi non plus il y a peu.

Le code n'est pas tout à fait de moi...
J'ai rencontré le même problème que toi il y a quelques semaines, et après de nombreux tests j'ai fini par en déduire que mes fichiers avaient des caractères encodés en UTF-8 au lieu d'ANSI.
J'ai cherché et trouvé sur internet une macro que j'ai simplifiée/adaptée.



T'aurais pas le code pour l'écriture en UTF-8 ?
Ah non, désolé, je n'ai pas ça en réserve.


Bonne nuit.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Ah non, désolé, je n'ai pas ça en réserve.

Mais peut-être quelque chose dans ce genre :
VB:
Private Sub Exporter_UTF8(NomFichier As String)
' Ouverture du fichier en forçant l'encodage des caractères en UTF-8
'
Dim MonFlux As Object
Dim MonTexte As String

    Set MonFlux = CreateObject("ADODB.Stream")
 
    With MonFlux
        .Open
        .Position = 0
        .Charset = "UTF-8"
        .WriteText MonTexte
        .SaveToFile NomFichier
        .Close
    End With

    Set MonFlux = Nothing

End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
le problème avec stream c'est que le mauvais fichier il le lit bien et le bon il le lit mal
conclusion il faut tester les deux
en attendant mieux voici une fonction de lecture qui te lira les deux

VB:
Sub test2()
'on lit un fichier UDF 8
    Dim texto$, fichier$
    fichier = "C:\Users\polux\Desktop\Mémo UTF-8.txt"
    Open_For_Read_Force_Udf_8 fichier, texto
    MsgBox texto
End Sub
Sub test3()
'on lit un fichier ANSI
    Dim texto$, fichier$
    fichier = "C:\Users\polux\Desktop\Mémo 0.txt"
    Open_For_Read_Force_Udf_8 fichier, texto
    MsgBox texto
End Sub


Function Open_For_Read_Force_Udf_8(ByVal fichier$, texto$)
    Dim laChaine As String, x: x = FreeFile
    'lecture binnaire
    Open fichier For Binary Access Read As #x: laChaine = String(LOF(x), " "): Get #x, , laChaine: Close #x
    If Not laChaine Like "*[Ã|é|è|ç|â|€|«|»|û|ê|…|/ø|ø|À|É|È|Ã|Ö|]*" Then    'si la chaine ne contient pas de carateres sbizarre
        texto = laChaine    ' alors texto = lachaine
    Else    ' sinon on stream le fichier avec ADOBD.Stream
        With CreateObject("ADODB.Stream")
            .Charset = "utf-8": .Open: .LoadFromFile (fichier): texto = .ReadText()
        End With
    End If
End Function
 

patricktoulon

XLDnaute Barbatruc
re
Marcel tu écris quoi avec le 19
j'ai essayé le fichier traduit en lecture et je l'ai renvoyé en écriture avec ton 19
et j'ai relu le fichier avec open for read as binary et les caractères en faux latin reviennent
donc c'est pas bon
 

patricktoulon

XLDnaute Barbatruc
re
je confirme ca ne fonctionne pas avec son fichier
VB:
Function Open_For_Read_Force_Udf_8(ByVal fichier$, texto$)
    Dim lachaine As String, x: x = FreeFile
    'lecture binnaire
    Open fichier For Binary Access Read As #x: lachaine = String(LOF(x), " "): Get #x, , lachaine: Close #x
    If Not lachaine Like "*[Ã|é|è|ç|â|€|«|»|û|ê|…|/ø|ø|À|É|È|Ã|Ö|]*" Then    'si la chaine ne contient pas de carateres sbizarre
        texto = lachaine    ' alors texto = lachaine
    Else    ' sinon on stream le fichier avec ADOBD.Stream

        With CreateObject("ADODB.Stream")
            .Charset = "utf-8": .Open: .LoadFromFile (fichier): texto = .ReadText()
        End With
    End If
End Function



Sub convert()    ' recupe le texte complet  avec binary acces read
   Dim texto$, lachaine$
   Open_For_Read_Force_Udf_8 ThisWorkbook.Path & "\Mémo UTF-8.txt", texto
   MsgBox " à la lecture avec la fonction bimode ça donne ça" & vbCrLf & texto
   fichier = ThisWorkbook.Path & "\BisMémo UTF-8.txt"
   If Dir(fichier) <> "" Then Kill fichier
    With CreateObject("ADODB.Stream")
        .Open
        .Position = 0
        .Charset = "UTF-8"
        .WriteText texto
        .SaveToFile fichier
        .Close
    End With
 DoEvents
 x = FreeFile: Open fichier For Binary Access Read As #x: lachaine = String(LOF(x), " "): Get #x, , lachaine: Close #x
   MsgBox " a la relecture apres comversion ça donne ça" & vbCrLf & lachaine

End Sub
 

Pièces jointes

  • Mémo UTF-8.txt
    83 bytes · Affichages: 2

patricktoulon

XLDnaute Barbatruc
re
peut être mais tu me dis que ça fonctionne chez toi en ecrivant simplement un texte avec des accents etc...
je fait la même chose avec une variable texte avec des données du fichier
il y est plus le BOM dans la variable non ?
 

Discussions similaires

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