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

VBA Word Discussion :

caractères spéciaux mal enregistrés en texte


Sujet :

VBA Word

  1. #1
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    418
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 418
    Points : 829
    Points
    829
    Par défaut caractères spéciaux mal enregistrés en texte
    Bonjour,

    J'essaie de faire un petit programme pour récupérer le contenu de tableaux en fichier textes.
    Le programme n'est pas en VBA, il est en python mais, pour ce problème, je ne pense pas que cela joue un rôle.

    Le coeur du programme consiste simplement à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for tab in word.ActiveDocument.Tables:
        out_file.write("%s\n" % (tab.Range.Text))
    Malheureusement, dans un des tableaux, j'ai un caractère spécial (le égal barré - différent) et il est mal écrit dans le fichier.

    Apparemment, ce caractère est déjà mal interprété au niveau du Range.Text

    J'ai bien cherché du côté de la propriété "TextEncoding" du document mais je n'ai pas trouvé d'encodage qui convienne.

    Quelqu'un peut-il me donner une piste ?

    Merci

  2. #2
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    418
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 418
    Points : 829
    Points
    829
    Par défaut
    Citation Envoyé par fatbob Voir le message
    Bonjour,
    J'ai bien cherché du côté de la propriété "TextEncoding" du document mais je n'ai pas trouvé d'encodage qui convienne.
    En fait, j'ai déjà un problème avec cette propriété puisque je n'arrive pas à définir correctement sa valeur en python.

    Malgré tout, le problème reste posé car mes tentatives pour simplement enregistrer le fichier original en texte ne m'ont pas permis de récupérer mon caractère spécial malgré l'utilisation de différents encodages.

    Toute indication sera bienvenue car je sèche dur.

    Merci

  3. #3
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Le ≠ me pose aussi un problème, si je demande sa conversion avec la fonction Asc, j'obtiens 63, mais dans le sens inverse, j'ai un ?

    Par contre, avec la fonction AscW, j'obtiens 8800 qui correspond bien à la valeur unicode de ton caractère.
    Et la fonction ChrW permet de le faire d'ans l'autre sens.

    C'est un caractère unicode et il faudrait poser la question sur le forum python pour savoir comment traiter les caratères unicodes.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  4. #4
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    418
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 418
    Points : 829
    Points
    829
    Par défaut
    Merci pour cette info.
    Question : si je veux enregistrer au format texte un fichier contenant ce caractère, comment puis-je m'y prendre ?

    Quelque soit la façon dont j'essaie, je n'y arrive pas. J'ai déjà tenté :
    - Directement dans word en faisant un "enregistrer sous" en texte avec les quelques encodages qui m'ont paru pertinents,
    - A travers une macro VBA (qui prend le texte des cellules et le réécrit)
    - Et, évidemment, en python.
    En fait, je commence à me demander si ce caractère existe dans un format purement texte...

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Non, pas possible, ce caractère n'existe pas en format texte.

    Pour le format texte, on reste limité aux 255 caractères de la table ASCII.

    Test simple, tu crées un document ne contenant que ce seul caractère et tentes de faire une sauvegarde en txt.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  6. #6
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    418
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 418
    Points : 829
    Points
    829
    Par défaut
    Pourtant, dans "enregistrer sous", lorsqu'on sélectionne le format texte (.txt), word propose toute une série d'encodages dont utf-8...
    Où le signe "différent" n'apparait pourtant pas...

    Dans mon éditeur (vim), je peux normalement éditer de l'utf-8 (par exemple, je peux faire : œ qui n'apparait pas non plus dans la table ascii)

    En tout cas, merci pour ton aide

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    oe est 156 dans la table ASCII.
    Mais avec Alt, on obtiens £
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  8. #8
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    418
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 418
    Points : 829
    Points
    829
    Par défaut
    Je sais que je titille un peu sur un sujet pas hyper important mais ça me turlupine :
    Si je prends un ≠ et que je le colle dans un éditeur de texte, ça fonctionne :
    Le fichier texte :
    test.txt
    et son apparence dans gedit (dans vim, c'est pareil - propriété fileencoding = utf8)
    Nom : Capture-test-gedit-1.png
Affichages : 103
Taille : 26,5 Ko
    Il me semble donc que ce doit être lié à un problème d'encodage avec word...
    Je vais essayer de regarder si des conversions avec ascW et chrW permettent d'améliorer la situation.

    De toute façon, j'ai trouvé une solution de contournement (pas très élégante) : je fais un remplacer par != dans word avant d'enregistrer en texte et je retransforme ensuite avec python...

    Merci pour ton aide...
    Si tu as une idée de solution plus élégante, je suis preneur mais celle-ci convient dans l'immédiat.

  9. #9
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut fatbob,

    Je viens de passer les 2 derniers jours la-dessus sur un projet dans ma société. Word a des notions assez bizarres d'encoding. J'ai besoin de stocker une partie du document en mode text et en XML ==> pas d'autre solution (à cause de Word) que remplacer les caractères qui posent problème par des équivalents via une fonction rechercher/remplacer. J'ai mis tous mes caractères dans une liste que je parcours et j'effectue les remplacements (globaux) avant de sauvegarder dans une boucle.

    Si tu veux le code, je peux le mettre à dispo. Dis-moi.

    @+

  10. #10
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    418
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 418
    Points : 829
    Points
    829
    Par défaut
    Merci pour cette aide...
    Même si, pour mon problème, j'ai réussi à trouver une solution, je serai curieux de voir ton code... Cela me permettra d'améliorer le mien

    A+

  11. #11
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut FatBob,

    Voici le code
    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
        Dim aLstCaracteresAProbleme(0 To 3, 0 To 1) As String
        aLstCaracteresAProbleme(0, 0) = "^~": aLstCaracteresAProbleme(0, 1) = "-"
        aLstCaracteresAProbleme(1, 0) = "œ": aLstCaracteresAProbleme(1, 1) = "oe"
        aLstCaracteresAProbleme(2, 0) = "'": aLstCaracteresAProbleme(2, 1) = "'"
        aLstCaracteresAProbleme(3, 0) = Chr(1): aLstCaracteresAProbleme(3, 1) = ""
     
            '// Remplacement des caractères à problème
            Selection.Find.ClearFormatting
            Selection.Find.Replacement.ClearFormatting
            For aI = LBound(aLstCaracteresAProbleme, 1) To UBound(aLstCaracteresAProbleme, 1)
                With Selection.Find
                    .Text = aLstCaracteresAProbleme(aI, 0)
                    .Replacement.Text = aLstCaracteresAProbleme(aI, 1)
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = False
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute Replace:=wdReplaceAll
            Next
    Si tu as besoin de plus d'explications, n'hésite pas.

    @+

  12. #12
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    418
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 418
    Points : 829
    Points
    829
    Par défaut
    Ca m'a l'air très bien.
    Merci.

  13. #13
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut FatBob,

    N'oublie pas non plus ceux-là.

    Chr(171) ==> Chr(34)
    Chr(187) ==> Chr(34)

    @+

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/04/2012, 16h58
  2. [VB.NET 2.0] Fichier texte et caractères spéciaux
    Par exclusif dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 22h02
  3. Réponses: 3
    Dernier message: 01/12/2005, 21h38
  4. Réponses: 5
    Dernier message: 23/10/2005, 18h27

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