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 :

Eviter les majuscules accentuées? [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut Eviter les majuscules accentuées?
    Bonjour,

    Pour préparer une importation, j'ai une procédure vba qui lit des cellulles excel et en récupere une partie selon des criteres

    Mon résultat doit etre en majuscule, j'avais donc utilisé un UCase()

    Mais on me signale qu'on ne peut en fait pas avoir de majsucule accentuée dans le résultat final, sinon ca plante

    Donc il faut que je trouve une solution pour virer les accents de mon résultat final
    Je ne peux en aucun cas virer les accents des fichiers de départ, ca doit forcement etre géré au niveau de mon proces VBA

    Au pire, je peux y aller a la barbare et faire quelques substitue de lettre accentués par l'équivalent sans accent (mais avec le risque qu'a un moment, quelqu'un accentue quelque chose d'inhabituel et de non prévu par mes substitue)

    Est-ce que j'ai un moyen un peu plus subtile de virer ces accents?

    Merci beaucoup

  2. #2
    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
    Seuls les caractères A-Z, 0-9 semblent autorisés.
    Tu peux faire une vérification et transformer tout autre caractère en "?"

    A+
    PPz

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    Si je comprends bien, ta question est :
    comment transposer en majuscules et sans accents une chaîne de caractères pouvant être en minuscules et avec accents, sans pour autant modifier ma chaîne originelle.

    Bon.
    Voici la fonction que je te propose (-entre autres possibilités) :
    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
    Private Function traduiremajsansacc(ByVal c As String) As String
       Dim eclate() As Byte, i As Integer
       eclate = StrConv(UCase(c), vbFromUnicode)
       For i = 0 To UBound(eclate)
         Select Case eclate(i)
           Case 192 To 197
             eclate(i) = 65
           Case 200 To 203
             eclate(i) = 69
           Case 204 To 207
             eclate(i) = 73
            Case 210 To 214
             eclate(i) = 79
            Case 217 To 220
             eclate(i) = 85
            Case 221
             eclate(i) = 89
          End Select
         traduiremajsansacc = traduiremajsansacc & Chr(eclate(i))
       Next
    End Function
    et voici un exemple d'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton3_Click()
      Dim machaine As String, matrad As String
      machaine = "et voilà, sans ambiguïté, une chaîne de caractères minuscules où des accents sont présents"
      MsgBox "j'avais la chaîne " & machaine & vbCrLf & "dont j'ai tiré la chaiîne " & traduiremajsansacc(machaine)
    End Sub
    machaine est intouchée et traduiremajsansacc(machaine) retourne le tout en majuscules et sans accents.
    Si tu veux y ajouter la suppression de cédilles éventuelles, voire du tilde (ñ), tu dis..

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    PPz78, je ne peux hélas pas convertir en "?"

    Si j'ai par exemple une chaine "contrôleur de température"
    actuellement, ca devient "CONTRÔLEUR DE TEMPÉRATURE"
    et il me faudrait "CONTROLEUR DE TEMPERATURE "

    Je ne peux pas mettre "CONTR?LEUR DE TEMP?RATURE", ça serait tres moche comme nom d'article, on ne peut pas exactement envoyer ca au client

    Babaothe, c'est effectivement quelque chose comme ca que je cherchais a faire. Merci, je vais l'adapter pour l'ajouter dans ma macro

    Pour le moment, je n'ai pas de cédille ou de tilde (j'ai ca actuellement "Á, Â, È , É, Ê" mais je ne leur fait pas confiance, ils finiront bien pas trouver le moyen d'en mettre quelque part donc je vais voir pour les intégrer (par exemple, mes descriptifs sont actuellement supposé etre en anglais, et donc le probleme n'est pas supposé se poser. Mais il se trouve qu'il y en a une poignées, cachée parmis 12 000 copains, les coquins, qui sont apparement en francais et avec des accents )

    C'était juste qu'avant de me mettre au travail avec les numéros de lettres, je vérifiait qu'il n'y avait pas déja quelque part dans excell un convertisseur qui savait déja faire ca

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    Citation Envoyé par EmmanuelleC Voir le message

    C'était juste qu'avant de me mettre au travail avec les numéros de lettres, je vérifiait qu'il n'y avait pas déja quelque part dans excell un convertisseur qui savait déja faire ca
    Un tel convertisseur n'existe nativement ni avec EXCEL, ni avec VBA, ni avec une fonction de l'API de Windows.
    Il te faut donc le faire

    Voici ma fonction complétée pour les cédilles et les ñ
    J'en ai profité pour mettre les Cases du Select Case dans l'ordre le plus adroit pour agiliser (lis le commentaire ajouté après le Select Case).
    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
    Private Function traduiremajsansacc(ByVal c As String) As String
       Dim eclate() As Byte, i As Integer
       eclate = StrConv(UCase(c), vbFromUnicode)
       For i = 0 To UBound(eclate)
         Select Case eclate(i)
         'on va traiter (pour accélérer) dans l'ordre de plus grende probabilité d'occurrence
         ' pour les accents : d'abord si pas d'accent, puis les E, puis les A, puis les I, puis les U
         ' on met le case de la cédille avant celui du I accentué
         ' les o accentués, y accentué et ñ, moins fréquents, seront les derniers.
           Case Is < 192
             'on ne fait rien
           Case 200 To 203
             eclate(i) = 69
           Case 192 To 197
             eclate(i) = 65
           Case 199
             eclate(i) = 67
           Case 204 To 207
             eclate(i) = 73
           Case 217 To 220
             eclate(i) = 85
           Case 210 To 214
             eclate(i) = 79
           Case 209
             eclate(i) = 78
           Case 221
             eclate(i) = 89
          End Select
         traduiremajsansacc = traduiremajsansacc & Chr(eclate(i))
       Next
    End Function
    PS : Je ne vois pas comment un utilisateur pourrait utiliser son clavier pour obtenir d'autres lettres accentuées que celles traitées (il n'y en a pas d'autres en ASCII)
    Bonne chance.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    merci

    Méfions nous toujours de nos utilisateurs, ils sont plein d'imagination

    Les fichiers sources sont peu fiables, c'est des fichiers fournis a la base par les fournisseurs, ensuite adapté par différents services chez nous (chacun avec sa popotte interne, ses besoins propres et ses habitudes)
    Ca donne forcement des résultats farfellus.
    Entre autre, je ne pense pas avoir dans mes tests déja essayé un fournisseur nordique (je crois qu'on en a pas pour le moment) mais je n'oserais pas jurer que je n'aurai pas a un moment des caracteres tres origniaux

    Et je dois récuperer ca et en faire un truc ordonné

    Je vais déja gerer les plus communs maintenant et je pense que je vais ajouter à ma procédure une étape de plus qui vérifie l'éventuelle présence de nouveau caracteres non acceptés

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Citation Envoyé par EmmanuelleC Voir le message

    Est-ce que j'ai un moyen un peu plus subtile de virer ces accents?
    Bonjour,

    On peut utiliser un convertisseur qui est natif sous Word et dans son VBA

    Très simple à faire, mais long à expliquer, on fait rapide sur les procédures employées dispo dans l’aide Excel ou Word.

    Il s’agit du raccourci clavier Shift+F3 qui en bascule à 3 positions permet de changer la casse du texte sélectionné.
    Subtilité, il faut que dans Outils, Options, Edition la case Majuscules accentuées en Français soit désélectionnée.

    Ensuite, tu fais ta sauce avec ton import, par exemple si c’est déjà sous Excel sans pouvoir le manipuler avant, tu le sauvegardes en txt, tu l’ouvre sous Word, tu fais la manip et tu le rouvres sous Excel ensuite…

    Le fait d’appliquer la bascule plusieurs fois va faire les changements nécessaire pour arriver à tes fins.

    Si besoin pour automatiser la chose (ça ne vaut pas le coup pour de rares traitements), le convertisseur voulu en VBA Word est celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.Range.Case = wdNextCase
    A appliquer du genre 4 ou 5 fois selon ton texte d’origine et le résultat final désiré…

    cordialement,

    Didier

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

Discussions similaires

  1. [W-00] Accentuer les majuscules.
    Par chouchou_82 dans le forum Word
    Réponses: 4
    Dernier message: 18/02/2009, 22h05
  2. [RegEx] Accepter les majuscules accentuées
    Par Trebor_ dans le forum Langage
    Réponses: 4
    Dernier message: 05/03/2008, 12h17
  3. Réponses: 4
    Dernier message: 13/08/2004, 18h39
  4. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

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