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 :

Problème avec les accents [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Par défaut Problème avec les accents
    Bonjour à tous

    Je reviens vers vous aujourd'hui car j'ai un problème avec les accents ><
    J'ai un fichier excel contenant un listing ou la moitié des informations sont rentrées à la main et souvent n'importe comment ... Malheureusement pour moi je dois affecter une valeur en fonction du contenu de la ligne (en fait un budget en fonction du type de dépense). On peut régler facilement le problème de la correspondance Majuscule/minuscule (ucase) mais reste le problème de la présence d'accent (ou non), pour faire simple il suffirai de tous les retirer. J'ai trouvé la macro qui traîne sur internet, la fonction qui permet a chaque fois que l'on rentre une lettre avec accent elle est automatiquement remplacée par la même lettre sans accent. Je ne m'y connais pas en fonction vba :/ et quand je copie le code de cette fonction elle ne marche même pas chez moi j'ai bien essayer de bidouiller la fonction sans succès :/

    Je cherche donc une macro me permettant de remplacer les lettres avec accent avec les mêmes lettres sans accent, a chaque lancement du programme et sur certaines feuilles (les 2 premières en fait).

    Merci d'avance de votre aide

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ci joint une fonction (à adapter) qui permet de parcourir les lettres d'un mot et de remplacer celles accentuées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function ReplAccen(ByVal Str As String) As String
    Const AvecAcc As String = "àâéèêuüùîïô"
    Const SansAcc As String = "aaeeeuuuiio"
    Dim i As Integer, n As Integer
     
    If Len(Str) > 0 Then
        For i = 1 To Len(Str)
            n = InStr(AvecAcc, Mid(Str, i, 1))
            If n > 0 Then Mid(Str, i, 1) = Mid(SansAcc, n, 1)
        Next i
    End If
    ReplAccen = UCase(Str)
    End Function
    Pour remplacer les données de A1:A1000 de Feuil1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Remp()
    Dim i As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        For i = 1 To 1000
            .Cells(i, 1).Value = ReplAccen(.Cells(i, 1).Value)
        Next i
    End With
    End Sub

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Par défaut
    Merci a vous 2.
    BlueMonkey ta solution est bonne je n'en doute pas mais je souhaitais le faire a chaque démarrage car j'ai déjà plusieurs centaines de ligne ce qui me contraindrait a faire toutes les cellules 1 par 1 :/ de plus certaines informations sont extraites par requête sql ou par une autre macro d'un autre fichier.
    Une petite question a part Mercatog : a quoi sert le "." que tu mets avant le "Cells" ? j'en mets quelques fois quand je suis sur de moi mais dans ce cas je ne comprends pas (je ne suis pas (encore) un pro du vba désolé :/).

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Compare les 2 codes suivants, ils sont identiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Remp1()
    Dim i As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        For i = 1 To 1000
            .Cells(i, 1).Value = ReplAccen(.Cells(i, 1).Value)
        Next i
    End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Remp2()
    Dim i As Long
     
    Application.ScreenUpdating = False
    For i = 1 To 1000
        Worksheets("Feuil1").Cells(i, 1).Value = ReplAccen(Worksheets("Feuil1").Cells(i, 1).Value)
    Next i
    End Sub

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Par défaut
    Très bien merci pour ton explication
    Je test le programme dès que possible, samedi soir oblige, une ptite soirée est prévue ! merci et bonne soirée a vous

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Par défaut
    Tout fonctionne très bien merci encore !

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Pour éviter d'avoir à parcourir toute la feuille à chaque démarrage, une solution est de le faire à chaque changement valeur.
    Le code n'est pas beau,
    Mais pour un peu plus d'efficacité, les remplacements sont imbriqués.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim s As String
        Target.Cells(1, 1).Value = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Target.Cells(1, 1).Value, _
            "ô", "o"), "ö", "o"), "ä", "a"), "à", "a"), "ê", "e"), "ë", "e"), "è", "e"), "é", "e"), "ç", "c")
     
    End Sub
    [Edit : poster sans avoir vu le post de Mercatog. Ca fait une autre idée ]
    [Edit 2 : une p'tite amélioration à la fin de la fonction Remp() du post #2 , Application.ScreenUpdating = True

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

Discussions similaires

  1. XMLHTTP, problèmes avec les accents
    Par Berliozz dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 11h32
  2. AJAX : Problème avec les accents...
    Par @drien dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2006, 14h33
  3. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 18h44
  4. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 10h11
  5. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 14h56

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