IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Convertir onglet Excel en UTF-8


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Par défaut Convertir onglet Excel en UTF-8
    Bonjour,

    J'ai une macro qui génère un fichier à partir d'un fichier source.
    Cependant, le fichier crée interprète mal les caractères spéciaux (cf PJ).
    Je crois que c'est parce que ma feuille n'est pas encodé en UTF-8.
    Pouvez-vous me dire comment convertir un sheet en UTF-8 svp ?
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Voici une macro que tu peux utiliser pour convertir les chaînes UTF-8 en chaînes ASCII (je peux me tromper, mais je ne pense pas que tu puisses afficher une feuille Excel en UTF-8). La manip consiste donc à convertir le fichier d'origine en ASCII :
    En tête d'un module standard, mets le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Const CP_UTF8 = 65001
     
    Private Declare Function MultiByteToWideChar Lib "kernel32" ( _
       ByVal CodePage As Long, ByVal dwFlags As Long, _
       ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, _
       ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
    Colle ensuite les fonctions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Public Function sUTF8ToUni(bySrc() As Byte) As String
    ' Converts a UTF-8 byte array to a Unicode string
    Dim lBytes As Long, lNC As Long, lRet As Long
     
       lBytes = UBound(bySrc) - LBound(bySrc) + 1
       lNC = lBytes
       sUTF8ToUni = String$(lNC, Chr(0))
       lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(bySrc(LBound(bySrc))), lBytes, StrPtr(sUTF8ToUni), lNC)
       sUTF8ToUni = Left$(sUTF8ToUni, lRet)
    End Function
     
    Private Function ConvertUTF8File(sUTF8File As String) As String
    Dim iFile As Integer, bData() As Byte, sData As String, lSize As Long
     
       ' Get the incoming data size
       lSize = FileLen(sUTF8File)
       If lSize > 0 Then
           ReDim bData(0 To lSize - 1)
     
           ' Read the existing UTF-8 file
           iFile = FreeFile()
           Open sUTF8File For Binary As #iFile
           Get #iFile, , bData
           Close #iFile
     
           ' Convert all the data to Unicode (all VB Strings are Unicode)
           sData = sUTF8ToUni(bData)
       Else
           sData = ""
       End If
       ConvertUTF8File = sData
    End Function
    La macro à exécuter pour copier les lignes du fichier est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub LitUTF8()
       ' charge le fichier UTF-8 dans une variable string Unicode
        sFileBody = ConvertUTF8File("d:\donnees\daniel\mpfe\testutf8.txt")
       ' Enlève le marqueur Unicode de tête (i.e. the &HFEFF sequence)
       sFileBody = Mid$(sFileBody, 2)
       Tabl = Split(sFileBody, vbCrLf)
        For Each Item In Tabl
            MsgBox Item
        Next Item
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Par défaut
    Bonjour,

    Merci, cela fonctionne mais ...
    La macro ouvre une msgbox avec le contenu converti alors que j'ai besoin qu'elle m'ouvre dans Excel le fichier converti.

    J'ai tenté de modifier le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     For Each Item In Tabl
         Workbooks.Open Item
    Next Item
    Sans succès

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Non, "item" représente une ligne du fichier texte. La macro boucle et récupère dans "item" les lignes du fichier texte. Tu en fais ensuite ce que tu désires.

  5. #5
    Membre confirmé
    Profil pro
    Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)
    Inscrit en
    Avril 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Tout juste diplômé Master 2 Miage (SI / Aide à la prise de décision)

    Informations forums :
    Inscription : Avril 2011
    Messages : 137
    Par défaut
    Humm,
    En fait, je ne comprends pas l'élément Item.
    Comment manipuler cet élément ?
    Comment incorporer ces lignes dans une feuille Excel ?

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub LitUTF8()
       ' charge le fichier UTF-8 dans une variable string Unicode
        sFileBody = ConvertUTF8File("d:\donnees\daniel\mpfe\testutf8.txt")
       ' Enlève le marqueur Unicode de tête (i.e. the &HFEFF sequence)
       sFileBody = Mid$(sFileBody, 2)
       Tabl = Split(sFileBody, vbCrLf)
        Sheets.Add
        For Each Item In Tabl
            ctr = ctr + 1
            Cells(ctr, 1) = Item
        Next Item
    End Sub

Discussions similaires

  1. Différence entre 2 onglet excel
    Par avyrex dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/12/2006, 14h00
  2. Problème d'ouverture d'onglet Excel
    Par tedparker dans le forum Documents
    Réponses: 2
    Dernier message: 29/08/2006, 10h41
  3. Existence d'un onglet Excel
    Par jux dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/06/2006, 21h47
  4. Convertir des tables en UTF-8
    Par yazerty dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/12/2005, 15h08
  5. Import de l'onglet Excel souhaité
    Par ston dans le forum Access
    Réponses: 3
    Dernier message: 21/09/2005, 23h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo