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 :

Encodage des caractères dans les codes-source VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut Encodage des caractères dans les codes-source VBA
    Bonjour !

    Je développe en VBA sur Mac et teste ensuite mon appli sur une dizaine de versions d'Excel, sur Mac et sur PC. Jusqu'à ce jour, ma version la plus récente testée sur PC était sous Excel 2009 et tout était OK. Ayant entamé des tests sur Excel 2010 (sur PC), je suis tombé sur ce pb d'accents. Ramené au minimum, voici comment il se décrit...

    Soit un fichier VIDE avec une simple macro d'une ligne en feuil1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub mess_display()
    MsgBox "ééééééé"
    End Sub
    Ca marche sur Mac, mais si je passe sur PC, et que je lance l'Editeur VBA dans Excel 2010, j'ai à la place du string une séquence-charabia, formée de plusieurs "Z" avec une sorte de cupule au dessus. Pareil évidemment si j'exécute la macro : j'en déduis que ni l'éditeur ni l'interprèteur VB ne comprennent le codage de mes lettres accentuées.

    En revanche si je saisis le string "ééééééé" dans une cellule de la feuil1, cette cellule s'affiche correctement sur Mac comme sur PC. Donc, cela semble être un pb spécifique à VBA, ne relevant pas du paramétrage linguistique du système....

    Je suis vraiment preneur de toute idée !
    Merci à vous,

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    suite à la conversation sur l'autre post je remets mon message ici:

    après une recherche il apparaît que visual basic sous macintosh ne supporte pas Unicode (UTF-8, UTF-16) donc votre projet étant créé sous mac les chaînes de caractères sont encodés dans
    un autre format dans le fichier vbaproj.bin

    en discussion privé j'ai commencé à aborder avec vous l'utilisation de strconv. Je pense qu'il faut creuser cette piste. Cette fonction renvoie un tableau de caractères en faisant une conversion vers ou depuis unicode. Je pense qu'en réalisant la conversion des messages vers unicode uniquement sous pc vos msgbox devrait refonctionner mais à la condition de concevoir les projets sous mac (enfin c'est une supposition)

    Pouvez vous essayer ceci en le copiant collant sur un projet VBA réalisé sous mac, et en l'exécutant sur windows et mac?

    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
     
    Sub mess_display()
     
    MsgBox Conversion("éééé")
    End Sub
    Function Conversion(texte As String) As String
    #If Win32 Or Win64 Then
        Dim message() As Byte
        message = texte
        For i = 0 To UBound(message) Step 2
            Conversion = Conversion & Left(StrConv(ChrB(message(i)), vbUnicode), 1)
        Next i
    #ElseIf Mac Then
        Conversion = texte
    #End If
     
    End Function

  3. #3
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    Merci pour cet exemple détaillé.

    J'avais essayé le strConv, mais sans le dernier paramètre, non dispo dans les versions les plus anciennes (...c'est un paramètre de langue). Je vais refaire des essais sous 2007 et 2011, pour voir, avec votre proposition. Je vous dirai ce qu'il en est.

    Merci encore !

  4. #4
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    Re-bonjour,

    L'exécution est OK sur Mac.

    Sur PC :

    1) le code-source appelant devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub mess_display()
    MsgBox Conversion("ZZZZ")   '<= avec des "cupules" sur les Z
    End Sub
    2) quand j'exécute, il s'affiche non pas "éééé" mais "}}}}" ! J'ai aussi essayé sur PC en passant à strConv les codes linguistiques du français (1036 ou &H40C) en 3ème paramètre ("LCID"), mais j'ai le même résultat

    Cela vous parle-t-il ???
    Merci !

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    lol. Concrètement cela veut dire que l'on ne peut plus écrire d'accent au seind e code vba pour qu'il soit portable de windows à mac).

    Excel Mac enregistre la chaîne éééé dans son encodage à lui (donc en binaire sous la forme d'un ou 2 octets dans le fichier vbaproj.bin) et Excel Windows lis ce binaire dans son encodage à lui.....

    bon une autre solution serait transformer tous les messages en variable de tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sub test()
    msgbox "test"
    end sub
    devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sub test()
    msgbox tableau_message(TEST)
    end sub
    où tableau message est défini comme suit hors de toute sub:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public tableau_message()
    et pour TEST:

    pour une nouvelle constante incrémenter le nombre:

    et ensuite à l'aide d'une procédure au début du code de remplir la variable tableau en parcourant un fichier de type délimité encodé en UTF-8 et extérieur au classeur, qui pourrait se présenter comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    TEST, "Test"
    PROBLEME, "Problème"
    laissez une ligne vide au début du fichier pour des raisons d'indice

    Une fois le tableau rempli on aura donc:
    tableau_message(0) - >
    tableau_message(1) - > "test"
    tableau_message(2) - > "problème"

    l'indice de tableau_message reflète le numéro de ligne dans le fichier contenant nos messages.

    Or comme la constante TEST vaut 1 on a
    tableau_message(TEST) - > "Test"

    et pour PROBLEME
    tableau_message(PROBLEME) - > "Problème"

    sur le forum on doit pouvoir trouver une boucle pour parcourir un tel fichier et stocker ça dans une variable tableau. Si j'en ai un peu de temps je vais essayer de le faire, histoire de voir si la solution que je propose est bonne.

    Désolé pour cette solution barbare, mais elle présente un avantage, elle permet un début d'internationalisation de la macro.

    au fait à tout hasard, avez vous essayé le format xslb pour ce problème?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    j'ai trouvé une solution plus simple avec une feuille de calcul contenant tous les messages dans des cellules que l'on appelle par code. si j(ai suivi vos explications ça devrait fonctionner
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Taille des caractères dans les menus
    Par ChPr dans le forum Ubuntu
    Réponses: 0
    Dernier message: 29/01/2008, 11h34
  2. Changer des caractères dans les noms de fichiers
    Par ForgetTheNorm dans le forum Linux
    Réponses: 2
    Dernier message: 07/01/2008, 15h26
  3. [MySQL] Encodage des caractères dans un fichier texte
    Par louveteau02 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/04/2007, 11h41
  4. [Mail] Encodage des caractères pour les mails
    Par Cr@zyDeep dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2007, 21h11

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