Caractères spéciaux et encodage

RE à tous

Comme je l'ai signalé le Csv est codé en UTF8 : j'ai donc modifié le PowerQuery de Jean-Eric, ajouté ' et É, et la conversion de Company pendant que Jean-Eric faisait la même chose à part l'UTF8

25csv-utf8-utf16.xlsx (37.94 Ko)

On voit notamment la différence sur la colonne Seq Name

Pour ce qui est de la liste des 171 caractères latins diacritiques que j'avais recensés à une certaine époque (attention il n'y a pas les signes apostrophes et guillemets).

Je ne peux pas le mettre dans le corps du message car le forum me répond

Erreur : le champ "Message" contient des caractères non valides.

C'est peut-être un peu riche, mais avec une routine dichotomique on trouve vite la solution.

Pour le reste, je renvoie aux spécialistes de PowerQuery ...

Sans remettre en cause les solutions d'avenir PowerQuery qui me sont encore un peu étrangères, et pour contribuer à enrichir, voire répondre aux personnes qui ne pourraient charger PowerQ (interdiction employeur par ex.), voici une solution plus conventionnelle qui m'a permis de décrasser mes neurones engourdis.

Comme dit précédemment, il est impératif de traiter le problème en amont pour avoir un fichier propre et sans douté d'éviter des interventions qui pourraient le dénaturer. Quand c'est le bazar en amont (je suis poli), c'est le bazar en aval.

Il faut donc juste considérer cette proposition comme une illustration de

  1. expressions régulières
  2. dichotomie
Sub lire()
    Dim dico As Object, txt As String
    Set dico = CreateObject("Scripting.Dictionary")

    Set obj = CreateObject("vbscript.regexp")
    obj.Pattern = "u[0-9a-fA-F]{4}"
    obj.Global = True

    Fichier = Application.GetOpenFilename("Fichiers texte, *.csv;*.txt")
    If Fichier = False Then Exit Sub

    On Error Resume Next
    dia = [Tdia].Value
    Sheets("csv").Select
    Cells.Clear
    li = 1
    N = FreeFile
    Open Fichier For Input As #N
    Do While Not EOF(1)
        Line Input #N, Contenu

        Set res = obj.Execute(Contenu)
        For i = 0 To res.Count - 1
            txt = UCase(res(i))
            Contenu = Replace(Contenu, res(i), dia(dichotomie(txt, dia), 2))
        Next

        tbl = Split(Contenu, ",")
        Cells(li, 1).Resize(1, UBound(tbl)) = tbl
        li = li + 1

    Loop
    Close #N

End Sub

Function dichotomie(valeurcherchee As Variant, tableau) As Double
' donne la ligne de la valeur recherchée (0 si pas trouvé)
Dim deb As Double, fin As Double, milieu As Double
Dim valeurcourante As Variant

    dichotomie = 0
    deb = LBound(tableau)
    fin = UBound(tableau)
    If valeurcherchee = tableau(deb, 1) Then dichotomie = deb: Exit Function
    If valeurcherchee = tableau(fin, 1) Then dichotomie = fin: Exit Function

    While deb <> fin - 1
        milieu = Int((deb + fin) / 2)
        valeurcourante = tableau(milieu, 1)
        If valeurcourante = valeurcherchee Then
            dichotomie = milieu
            Exit Function
        Else
            If valeurcourante > valeurcherchee Then
                fin = milieu
            Else
                deb = milieu
            End If
        End If
    Wend

End Function   

Bonjour,

J'ai continué malgré le fait que Alban10 travaille sous Mac (Power Query non disponible).

@Steelson,

L'objet Dictionary n'est pas disponible sous Mac (!?).

Bon pour résumer, le csv importé en UTF-8 (65001), une table de conversion élargie et une fonction personnalisée.

En cas d'ajout de symboles, consulter le lien fourni dans le fichier joint.

Cdlt.

@Steelson,

L'objet Dictionary n'est pas disponible sous Mac (!?).

ok

En fait je n'utilise pas dictionary, les deux premières lignes peuvent être enlevées, c'est le reliquat du programme précédent

J'utilise par contre les expressions régulières ... qui n'existent pas non plus sur mac.

Ma solution serait alors de balayer chaque ligne et de tester chaque groupe de 5 caratères commençant par u, mais ce n'est plus très rigolo ! et j'ai le sentiment qu'on a perdu alban10

@Jean-Eric ... je n'ai pas vu comment tu faisais ta

fonction personnalisée

?

Rechercher des sujets similaires à "caracteres speciaux encodage"