Read special characters from a text file

Hi all,

I have a text file in French (file .txt), which means with accents and other specials characters.

In a VBA macro I want to read every character from this file and write it in an excel cell.

But while reading the file, the macro transforms every special characters.

For exemple the 'é' is transformed into an upper A with tilde...

Do you know I can manage to avoid this?

Thanks

Bonjour,

Function Sans_accents(Chaine$) As String ' R. Dezan + Michel Pierron
'Cette fonction enlève également les Œ, œ, Æ, æ qui posent un problème sur les sytèmes anglais.
' remplacement des caractères accentués
    Dim a As String, b As String
    Dim i As Long, u As Long
    a = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
    b = "AAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
    Chaine = Replace(Replace(Replace(Replace(Chaine, "œ", "oe"), "Œ", "OE"), "æ", "ae"), "Æ", "AE")
    For i = 1 To Len(Chaine)
        u = InStr(1, a, Mid(Chaine, i, 1), 0)
        If u Then Mid(Chaine, i, 1) = Mid(b, u, 1)
    Next i
    Sans_accents = Chaine
End Function

eric

Bonjour,

Excusez-moi pour la gene occasionnee, je croyais m'etre inscrit sur un forum anglophone, je viens de me rendre compte que c'est francophone. Je me melange les pinceaux avec tous ces forums

Merci beaucoup pour le retour.

Si je comprend bien votre code, le é sera transforme en e. Est-ce bien le cas?

Le souci c'est qu'apres je fais un espece de comptage donc il faut que le é reste bien un é et non pas un e (auquel cas il se melangera avec tous les e).

Au fait je voudrais juste eviter qu'il soit transforme depuis le fichier texte.

N'y a t-il pas un moyen?

Merci

Bonjour,

là je ne comprend plus ton problème.

Et sans savoir ce que fait ta macro pas facile...

Ce n'est pas une simple histoire de police non accentuée ?

eric

Pas de soucis, mais finalement meme sur un forum francophone on comprend plus facilement les messages en anglais qu'en francais, la preuve lol

Typiquement j'ai un texte qui provient d'un bouquin , dans un fichier texte, et je dois, entre autre choses, faire une etude statistique du texte. C'est plus complexe que ca, mais l'idee est celle-ci

Dans un premier temps j'ai cree une macro juste pour recuperer les differents characteres du texte en question sur un classeur excel:

Sub getchar()

    Dim myFile, textline, text, textchar As String
    Dim allchar, estpresent As Integer

    allchar = 0
    myFile = "mypath\myfile.txt"
    Open myFile For Input As #1
    Do Until EOF(1)
        Line Input #1, textline
        text = text & textline
    Loop
    Close #1

    Cells(1, 3) = Len(text)
    For i = 1 To Len(text)
        Cells(1, 2) = i
        textchar = Mid(text, i, 1)
        estpresent = 0
        For j = 1 To allchar
            If textchar = Cells(j, 1) Then
                estpresent = 1
                Exit For
            End If
        Next
        If estpresent = 0 Then
            allchar = allchar + 1
            Cells(allchar, 1) = textchar
        End If

    Next
End Sub

Et voila le resultat sur les 30 premieres lignes du classeur excel:

"c

h

a

p

i

t

r

e

1

l

s

u

v

n

m

d

y

q

b

4

o

j

f

Ã

©

g

x

."

En suivant ta reponse qui transforme les 'é' en e, le 'é' ne va pas apparaitre dans la liste des differents characteres du texte.

J'aimerais qu'il continue a apparaitre mais comme un 'é' et non pas un 'Ã'

Merci

Vu. J'ai testé 2-3 trucs mais sans résultat probant pour l'instant.

Je me repencherai sûrement dessus mais pour l'instant je suis à court d'idées, désolé.

eric

Bonjour

Il est probable que le fichier soit en unicode et non ascii : il faudrait revoir l'importation...

Peux-tu joindre un extrait...

Chris78 tu as raison.

Je m'étais fait un fichier test sous Notepad++ pensant qu'il serait en ASCII pur mais à l'éditeur hexa on voit qu'il ne l'est pas.

Ce n'est donc pas le Line Input qui le modifie.

J'ai tenté de l'ouvrir et l'enregistrer avec le bloc-note, il recode encore plus de caractères.

Par contre ouvert sous word puis enregistré en texte brut (*.txt) on a enfin de l'ASCII pur (que ce soit codage Windows ou MS-DOS) et est lu correctement par le bout de code.

eric

Re

Sauf erreur de ma part, Excel VBA travaille difficilement en unicode.

On doit pouvoir ouvrir le fichier texte en spécifiant le codage puis traiter facilement ce qui est ouvert d'où ma demande d'un exemple.

Effectivement c'est un probleme ASCII j'ai trouve la reponse:

J'ai juste cree deux variables:

ReDim Source(0 To 29)
    ReDim target(0 To 29)
Source = Array("î", "é", "→", "Ü", "ù", "â", "è", "à ", "’", "€", "®", "Ø", "°", "ç", "ô", _
                  "«", "»", "û", "ê", "…", "/ø", "ø", "À", "É", "È", "à ", "Ö", "Å“", "â€", "ë")
    target = Array("î", "é", Chr(26), "Ü", "û", "â", "è", "à", "'", "€", "®", "Ø", "°", "ç", "ô", _
                  Chr(34), Chr(34), "û", "ê", "..", "ø", "ø", "A", "E", "E", "à", "Ö", "oe", "-", "ë")

  For i = 0 To 29
        text = Replace(text, Source(i), target(i))
    Next

(en supposant que text soit le texte recupere depuis le fichier texte.

Merci pour votre aide en tout cas, ca m'a mis sur la piste.

78chris a écrit :

Sauf erreur de ma part, Excel VBA travaille difficilement en unicode.

VBA reconnaît les caractères unicodes ...sauf sur les plates-formes qui ne gèrent pas ce caractère. (c'est à dire pas sur MAC !)

C'est d'ailleurs un outils puissant pour faire de grands nombres de tirages aléatoire sans remise :

Cette routine tire en un instant 30 000 N° dans un ordre aléatoire.

Sub StringUnicode()
Worksheets(1).Activate
'génère un string de 30000 caractères unicodes
For i = 1 To 30000
mVar = mVar & ChrW(32 + i)
Next
'Pour le démonter aléatoirement...
Do
Nb = Int(Rnd * Len(mVar) + 1)
k = k + 1
'En renvoyant son N° AscW
Cells(k, 1) = AscW(Mid(mVar, Nb, 1)) - 32
mVar = Left$(mVar, Nb - 1) & Mid$(mVar, Nb + 1)
Loop Until mVar = ""
End Sub

A+

Rechercher des sujets similaires à "read special characters text file"