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 :

Suppression des caractères accentués


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut Suppression des caractères accentués
    Bonsoir,

    Dans une chaine de caractères je souhaite transformer les caractères accentués, par exemple transformer :
    é en e
    ê en e
    ù en u
    ç en c

    ...
    Avez vous quelques idées à me proposer
    Merci
    PPz

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Ce forum dispose d'une moteur de recherche.
    Je viens de l'utiliser et --->>
    https://www.developpez.net/forums/d1...es-caracteres/

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ceci dit :
    je n'utiliserais personnellement :
    - ni la fonction montrée de l'Api de Windows (elle peut être problématique dans certains cas)
    - ni le code proposé par kiki29 (sujet à lenteur)

    Je propose ce code, plus long (en lignes de code) mais sans aucun doute plus performant en matière de vitesse d'exécution ******.

    une fonction :
    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
    Private Function ote_accents(ch As String) As String
       Dim titi() As Byte
       titi = StrConv(ch, vbFromUnicode)
       For i = 0 To UBound(titi)
         Select Case titi(i)
            Case Is < 192
            Case 232 To 235: titi(i) = 101 'e
            Case 224 To 229: titi(i) = 97 ' a
            Case 249 To 252: titi(i) = 117 ' u
            Case 236 To 239: titi(i) = 105 ' i
            Case 242 To 246: titi(i) = 111  ' o
            Case 253, 255: titi(i) = 121 'y
            Case 241: titi(i) = 110  'n
            Case 200 To 203: titi(i) = 69 'E
            Case 192 To 197: titi(i) = 65 ' A
            Case 217 To 220: titi(i) = 85 ' U
            Case 204 To 207: titi(i) = 73 ' I
            Case 210 To 214: titi(i) = 79 ' O
            Case 221: titi(i) = 89 'Y
            Case 209: titi(i) = 78  ' N
        End Select
      Next
      ote_accents = StrConv(titi, vbUnicode)
    End Function
    Appelable (exemple) ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim toto As String
      toto = "bbbbbÁÂÃÄÅÇÈÉÊËszezÌÍÎÏffÑÒÓÔÕÖÙÚÛÜÝàeeeáâãäåçèféêëìíîïñòeeóôõöùúrrrûüýrrÿ"
      MsgBox ote_accents(toto)
    L'ordre que j'ai choisi pour les clauses dans le bloc select case n'est pas fortuit. Ne pas le modifier.

    EDIT : ****** -->> je viens de tester mon code --->> à peine 7 centièmes de secondes pour traiter un million de chaînes de 74 caractères pourtant "truffées" d'accents, y compris les plus rarement susceptibles d'être présents (j'ai carrément testé avec la chaîne toto de mon code !). La durée aurait été beaucoup plus courte avec des chaînes moins "étranges".

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bravo pour ce code unparia !

    Utilisation ingénieuse de StrConv et du select Case dans un ordre précis.
    Je récupère pour mettre dans mes tablettes !

    Je remonterais juste le traitement des E et A majuscules avant celui des y et n minuscules (je pense qu'il est plus courant de rencontrer, dans la langue française, des É ou Á que des ñ ou ý).
    Mais ça ne doit pas changer significativement la performance du code.

    Encore merci et bravo pour cette contribution.

  5. #5
    Invité
    Invité(e)
    Par défaut
    bonjour,
    pourquoi veux replacer les accent? pour un envoi de mail?

    si oui, envoie ton mail au format HTML &eacute;=é!


    https://www.developpez.net/forums/d1...o/#post8187229
    Dernière modification par Invité ; 02/03/2018 à 11h19.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour antonysansh
    Je ne mérite pas vraiment un bravo, que j'adresserais plus volontiers à celui qui a développé la fonction StrConv, que j'utilise assez souvent de manières diverses.
    Mon seul "mérite" est donc humblement d'avoir pensé à l'utiliser.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Bonjour,

    Merci unparia pour ce code très efficace.
    Peux tu me dire pourquoi il faut passer par des caractères unicode ?

    Juste un petit détail, je vais ajouter la transformation de ç en c (c'est le 231).

    Je cherche à manipuler les caractères d'un texte dans le cadre de jeux et de la résolution d'énigmes.
    Par exemple prendre le 1er caractère d'une phrase, le 2nd de la phrase suivante, .... le 25 eme de la phrase 25 bien sur les espaces, points, virgules, -, _ , ... ne comptent pas. Puis faire un anagramme avec les lettres ainsi trouvées.

    Dans un premier temps je me suis contenté de retenir les lettres entre 65 à 90 et de 97 à 122 en ASCII mais les lettres avec accent étaient effacées d'où l'idée de transformer les lettres avec accent en lettres sans accents.

    Il me reste encore une difficulté avec les lettres œ Œ æ Æ qui comptent pour deux. Pour l'instant je me suis contenté d'un message invitant à faire la correction à la main car la résolution des énigmes est en temps limité.

    A+
    PPz

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Peux tu me dire pourquoi il faut passer par des caractères unicode ?
    Ouvre ton aide interne VBA sur la fonction StrConv.

    Juste un petit détail, je vais ajouter la transformation de ç en c (c'est le 231).
    Ben ... suffit d'analyser mon code et --->>
    ajoute cette clause après le "o" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case 231:   titi(i) = 99 'c
    et celle-ci après le "O"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case 199: titi(i) = 67  ' C

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Il me reste encore une difficulté avec les lettres œ Œ æ Æ qui comptent pour deux
    Il ne te viendrait même pas à l'idée de commencer, avant même mon traitement, par remplacer "Œ" et "Æ" par "OE" & "AE" ? (utilisation toute bête de la fonction Replace) !

    Prière de libérer maintenant cette discussion (un clic sur le tag RESOLU)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. suppression des caractères accentués en ASP
    Par pythagore34 dans le forum ASP
    Réponses: 2
    Dernier message: 24/12/2009, 12h03
  2. Problème d'affichage des caractères accentués
    Par ostaquet dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 06h58
  3. [FLASH MX2004] Pb sur des caractères accentués.
    Par sandrineLL dans le forum Flash
    Réponses: 3
    Dernier message: 05/08/2004, 14h18
  4. Chaînes avec des caractères accentués dans Interbase
    Par Invité dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 22h39
  5. insérer des caractères accentués INFORMIX/JDBC
    Par donde dans le forum Informix
    Réponses: 2
    Dernier message: 19/11/2002, 20h02

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