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

XL 2021 Fichiers Txt en UTF8 ou ANSI

Marc Vanlindt

XLDnaute Nouveau
Bonjour à toutes et à tous.
Lorsque j'importe un fichier .txt dans une TextBox, ce fichier peut être encodé soit en ANSI, soit en UTF8 (sans BOM).
L'affichage dans une TextBox est toujours ANSI.
Comment déterminer l'encodage du fichier .txt afin de savoir si je dois le convertir ou non ?
Merci d'avance pour vos réponses ! (ChatGPT n'y parvient pas)
Marc
 
Solution
Bonjour,

Il y a quelques temps j'avais rencontré le même problème que toi et j'avais pondu un bout de code, qui ne vaut que ce qu'il vaut... mais qui fonctionnait avec les fichiers que j'utilisais.

Je t'ai construit un classeur-exemple avec les macros de l'époque, et ça a l'air de fonctionner avec tes trois fichiers qui sont bien détectés au format indiqué par leurs noms.
A toi de voir si tu peux en tirer quelque chose ou pas.

Marc Vanlindt

XLDnaute Nouveau
Bonjour J.P.
Merci pour cette réponse. Je ne connaissais pas ce module Powershell. Je vais faire quelques tests.
Amitiés,
Marc
 

Marc Vanlindt

XLDnaute Nouveau
Ouiiii !! C'est intégré, testé et ça marche !
Ouf ! Même ChatGpt n'y était pas arrivé !
Merci beaucoup!
Marc
 

patricktoulon

XLDnaute Barbatruc
Bonjour
j'ai retrouvé mes deux fonctions dans les version beta du créatorRibbonx
je viens de les retester et elles fonctionnent
VB:
Sub test1()
     FileConvert_UTF8_To_Ansi "C:\Users\patricktoulon\Desktop\MacCustomUI.xml"
End Sub

Sub test2()
    FileConvert_Ansi_To_UTF8 "C:\Users\patricktoulon\Desktop\MacCustomUI.xml"
End Sub

Function FileConvert_UTF8_To_Ansi(fich)
   'patricktoulon creatorRibbonx V2.7
Dim lachaine As String, x, texte$: x = FreeFile
    'test lecture binnaire
    Open fich For Binary Access Read As #x: lachaine = String(LOF(x), " "): Get #x, , lachaine: Close #x
    If lachaine Like "*Ã*" Then 'si la chaine contient des carateres bizarres
        With CreateObject("ADODB.Stream"): .Charset = "utf-8": .Open: .LoadFromFile (fich): texte = .ReadText(): End With
        Kill fich
        x = FreeFile: Open fich For Output As #x: Print #x, texte: Close #x
        Else: MsgBox "ce fichier n'est pas encodé en utf-8"
    End If
End Function

Function FileConvert_Ansi_To_UTF8(fich)
     'patricktoulon creatorRibbonx V2.7
     Dim lachaine As String, x, texte$: x = FreeFile
    'test lecture binnaire
    Open fich 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
        Kill fich
        Dim oStream
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Charset = "utf-8"
        oStream.Open
        oStream.WriteText lachaine
        oStream.SaveToFile fich, 2
        Else: MsgBox "ce fichier est déjà encodé en utf-8"
    End If
End Function
edit:
je me souviens ca y est
je les avais abandonné car si le texte ne contient pas de caractères particulier le utf8 passe pour du ansi
c'est pour ça que j'ai opter pour les 3 premier caractères en lecture binaire
 
Dernière édition:

Marc Vanlindt

XLDnaute Nouveau
Merci beaucoup Patrick.
Mais entre-temps, TooFatBoy m'a apporté une solution qui marche parfaitement.
Quoi qu'il en soit, merci à toi d'avoir bien voulu te pencher sur ce cas et je garde sous la main ces codes que tu m'envoie "au cas où...".
Amicalement,
Marc
 

TooFatBoy

XLDnaute Barbatruc
Mais entre-temps, TooFatBoy m'a apporté une solution qui marche parfaitement.
Attention, c'est loin d'être parfait. Comme je l'ai dit, ça ne vaut que ce que ça vaut...

Par exemple, si le fichier est encodé en UTF-8 mais qu'il ne comporte aucun caractères spéciaux (accentués ou autres), il sera considéré comme étant encodé en ANSI et donc certains caractères pourraient être mal décodés.

De plus, la macro essaye de détecter si c'est de l'UTF-8, elle considère que c'est, soit de l'UTF-8 (avec possibilité de se tromper), soit (si ce n'est pas de l'UTF-8) de l'ANSI. Elle ne "gère" aucun autre encodage.

Elle ne regarde pas s'il y a le BOM, ce qui permettrait d'être sûr que le fichier est encodé en UTF-8.
Ceci dit, ce n'est pas très grave car d'après ce que j'ai compris le BOM n'est plus vraiment utilisé de nos jours.


Il faut donc que tu aies bien en tête que la macro peut se tromper, même si à mon avis les chances sont quasiment nulles, mais ça peut arriver.
 

Marc Vanlindt

XLDnaute Nouveau
Bonjour TooFatBoy.
J'ai bien vu que le test ne se faisait finalement que sur un seul caractère "Ã" mais étant donné que mes textes font en général plus de 1000 caractères, il faudrait un hasard immense pour que ce caractère ne s'y retrouve pas.
D'autre part, s'il arrive que le texte ne s'affiche pas correctement, je pourrai toujours le convertir avec Notepad++. Ce serait une opération supplémentaire mais étant donné la rareté des cas, ce n'est pas bien grave.
Bonne journée.
Marc
 

Discussions similaires

Réponses
18
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…