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:

job75

XLDnaute Barbatruc
Bonjour à tous,

Nous en sommes au 60ème post !

Pourquoi vouloir concilier des encodages très différents ?

Alors qu'il suffit d'ouvrir le fichier UTF-8.txt du post #9 et de copier le contenu (dans le presse-papiers).

Puis de le coller dans la TextBox.

A+
 

TooFatBoy

XLDnaute Barbatruc
Tu m'as pas dit ce qui faisait que ça créé un BOM dans ton code du Sub Ecrire_UTF8avecBOM_Marcel32().
Je n'ai rien vu qui le différenciait de sans BOM.
Mais bon j'ai sans doute mal regardé, ça n'a pas d'importance.
Ce qui crée le BOM, c'est la méthode d'écriture utilisée.

Dans la macro qui écrit le fichier sans BOM, il y a un décalage des trois octets pour supprimer le BOM.
 

patricktoulon

XLDnaute Barbatruc
re
tenez là voilà maintenant qui zappe des qu'il y a un de ces caratères bizarre et passe en stream
comme ca pour les gros fichier on risque pas d'etre OUT off BUFFER
VB:
Sub testV1()
    Dim fichier$, texto$
    fichier = ThisWorkbook.Path & "\Mémo UTF-8.txt" 'Fichier UDF-8
    Open_For_Read_Force_Udf_8_V2 fichier, texto
    MsgBox texto
End Sub

Sub testV2()
    Dim fichier$, texto$
     fichier = "C:\Users\polux\Desktop\Mémo 0.txt" 'Fichier ANSI
     Open_For_Read_Force_Udf_8_V2 fichier, texto
    MsgBox texto
End Sub

Function Open_For_Read_Force_Udf_8_V2(ByVal fichier$, texto$)
'patricktoulon
    Dim lachaine As String, x, Sortie As Boolean: x = FreeFile
     Open fichier For Input As #x 'lecture binnaire ligne par ligne
    While Not EOF(x) And Sortie = False
        Line Input #x, lachaine    'lecture de la ligne
        T = T & lachaine & Chr(10): If lachaine Like "*[Ã|é|è|ç|â|€|«|»|û|ê|…|/ø|ø|À|É|È|Ã|Ö|]*" Then Sortie = True
           Wend
    Close #x
    If Not Sortie Then
        texto = T
    Else
        With CreateObject("ADODB.Stream")
            .Charset = "utf-8": .Open: .LoadFromFile (fichier): texto = .ReadText()
        End With
    End If
End Function
 

job75

XLDnaute Barbatruc
Notez qu'il est facile d'ouvrir le fichier texte avec Shell.

Pär contre l'envoi des touches Ctrl+A et Ctrl+C ne fonctionne pas :
VB:
Sub FichierTexte()
CreateObject("WScript.Shell").SendKeys "^a^c" 'n'a pa d'effet
Shell "notepad """ & ThisWorkbook.Path & "\Mémo UTF-8.txt""", vbNormalFocus
End Sub
Il faut envoyer les touches manuellement.
 

patricktoulon

XLDnaute Barbatruc
re
A ben là c'est sur tes sendkeys ne risquent pas de fonctionner si tu les envoie avant d'ouvrir notepad

tiens kado
c'est comme ça que l'on fait
VB:
Sub FichierTexte1()
'patricktoulon
    Shell "notepad """ & ThisWorkbook.Path & "\Mémo UTF-8.txt""", 1
    With CreateObject("WScript.Shell")
        .SendKeys "^a^c"    'n'a pa d'effet
        .Run "taskkill /f /im " & "notepad.exe", 0, True
    End With
End Sub

après on peut tout faire avec le même object sauf qu'il est plus lent a démarrer l'app donc un sleep

VB:
Sub FichierTexte2()
'patricktoulon
    With CreateObject("WScript.Shell")
        ''.exec "notepad.exe " & ThisWorkbook.Path & "\Mémo UTF-8.txt"
        'ou
        .Run "notepad.exe " & ThisWorkbook.Path & "\Mémo UTF-8.txt"
        ExecuteExcel4Macro "CALL(""kernel32"",""Sleep"",""JJ""," & 100 & ")"
        .SendKeys "^a^c"    'n'a pa d'effet
        .Run "taskkill /f /im " & "notepad.exe", 0, True
    End With
End Sub
 

job75

XLDnaute Barbatruc
Oui je m'en suis rendu comte il faut exécuter SendKeys après l'ouverture du fichier texte.

Voyez les fichiers joints et ces 2 macros dans le code de la feuille du fichier Excel :
VB:
Sub Copier()
TextBox1 = ""
Shell "notepad """ & ThisWorkbook.Path & "\Mémo UTF-8.txt""", vbNormalFocus 'ouverture du fichier texte
CreateObject("WScript.Shell").SendKeys "^a^c%{F4}" 'copie et fermeture
Application.OnTime 1, "Feuil1.Coller" 'lancement différé
End Sub

Sub Coller()
CreateObject("WScript.Shell").SendKeys "^v"
TextBox1.Activate
End Sub
 

Pièces jointes

  • TextBox(1).xlsm
    21.7 KB · Affichages: 0
  • Mémo UTF-8.txt
    83 bytes · Affichages: 0

patricktoulon

XLDnaute Barbatruc
et puisque l'on parle de textbox

on se passe carrément du ctrl +V aussi
un userform ,2 boutons , 2 textboxs
Code:
'ecriture
Function PutInPresse_papier_Mac_window(Texte)'écriture dans le clipbord(compatible Mac)'
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText Texte: .PutInClipboard: End With
End Function

'lecture
Public Property Get presse_papier_Mac_window()
'collection fonction clip board patricktoulon(lecture du clipbord)(compatible Mac)
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"):
        .GetFromClipboard: presse_papier_Mac_window = .GetText(1)
    End With
End Property

Private Sub CommandButton1_Click()
'patricktoulon
    With CreateObject("WScript.Shell")
       '.exec "notepad.exe " & ThisWorkbook.Path & "\Mémo UTF-8.txt"
        'ou
        .Run "notepad.exe " & ThisWorkbook.Path & "\Mémo UTF-8.txt"
        ExecuteExcel4Macro "CALL(""kernel32"",""Sleep"",""JJ""," & 100 & ")"
        .SendKeys "^a^c"    'n'a pa d'effet
        .Run "taskkill /f /im " & "notepad.exe", 0, True
    End With

    TextBox1 = presse_papier_Mac_window

End Sub

Private Sub CommandButton2_Click()
'patricktoulon
    Shell "notepad """ & ThisWorkbook.Path & "\Mémo UTF-8.txt""", 1
    With CreateObject("WScript.Shell")
        .SendKeys "^a^c"    'n'a pa d'effet
        .Run "taskkill /f /im " & "notepad.exe", 0, True
    End With
    TextBox2 = presse_papier_Mac_window
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
@job75
là encore tu marche a reculons
active le textbox avant
Sub Coller()
TextBox1.Activate
CreateObject("WScript.Shell").SendKeys "^v"
End Sub


et c'est quoi cette gestion d'attente ???????
quand c'est dans le clip bord e que notepad est fermé tu peux y aller

au pire je vous ai donné mes deux fonctions clipboard utilisez les
comme ça pas besoins de gérer des focus ou activate eventuels
après travailler de cette manière c'est revenir pas mal en arrière au temps ou le mot "com" n’était que le suffixe de ma boite mail de MSN
 

Discussions similaires

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