Macro supprimer accents excel

TOT127 Messages postés 1045 Statut Membre -  
thev Messages postés 2006 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'essaye d'utiliser cette macro pour supprimer les accents d'une énnorme feuille excel (accents en deux langues, donc plus nombreux qu'en français):

Function SupprimerAccents(ByVal sChaine As String) As String
Dim sTmp As String, i As Long, p As Long
Const sCarAccent As String = "ÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ"
Const sCarSansAccent As String = "AAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy"
sTmp = sChaine
For i = 1 To Len(sTmp)
p = InStr(sCarAccent, Mid(sTmp, i, 1))
If p > 0 Then Mid$(sTmp, i, 1) = Mid$(sCarSansAccent, p, 1)
Next i
SupprimerAccents = sTmp
End Function


Je ne sais pas ce que je fais de travers, mais ça ne fonctionne pas. Je suis sur excel 2011 et peu compétant en macro. Je vais dans VBA, tape le code et dis d'exécuter, mais rien n'y fait. Je vais devoir me former sérieusement...

dans l'urgence là, auriez vous une idée ?

Merci

2 réponses

  1. thev Messages postés 2006 Date d'inscription   Statut Membre Dernière intervention   721
     
    Bonjour,

    En vous relisant, je pense que vous devez comprendre la différence entre une fonction et une macro.

    Une macro est une procédure "Sub" qui s'exécute sur demande via un bouton ou via un événement intervenant sur le classeur.

    La fonction est une procédure "Function" qui est
    - soit entrée comme formule dans une cellule de la feuille d'un classeur et qui est exécutée à chaque recalcul de la feuille,
    - soit utilisée dans une macro.

    Si vous voulez une macro, il faut alors rajouter une procédure "Sub", qui vous permettra de supprimer tous les accents de la feuille active.

    Sub supp_accents_feuille()

    Dim cellule As Range
    For Each cellule In ActiveSheet.UsedRange.Cells
    cellule.Value = SupprimerAccents(cellule.Value)
    Next

    End Sub
    Function SupprimerAccents(ByVal sChaine As String) As String

    Dim sTmp As String, i As Long
    Dim traduction_accents()
    Dim accents() As String

    traduction_accents = Array("Á/A", "Â/A", "Ã/A", "Ä/A", "Å/A", "Ç/C", "È/E", "É/E", "Ê/E", "Ë/E", "Ì/I", "Í/I", "Î/I", "Ï/I", _
    "Ñ/N", "Ò/O", "Ó/O", "Ô/O", "Õ/O", "Ö/O", "Ù/U", "Ú/U", "Û/U", "Ü/U", "Ý/Y", "à/a", "á/a", "â/a", _
    "ã/a", "ä/a", "å/a", "ç/c", "è/e", "é/e", "ê/e", "ë/e", "ì/i", "í/i", "î/i", "ï/i", "ñ/n", "ò/o", _
    "ó/o", "ô/o", "õ/o", "ö/o", "ù/u", "ú/u", "û/u", "ü/u", "ý/y", "ÿ/y")

    sTmp = sChaine
    For i = 0 To UBound(traduction_accents)
    accents = Split(traduction_accents(i), "/")
    sTmp = Replace(sTmp, accents(0), accents(1))
    Next i
    SupprimerAccents = sTmp

    End Function
    1
  2. thev Messages postés 2006 Date d'inscription   Statut Membre Dernière intervention   721
     
    Ceci sera mieux


    Function SupprimerAccents(ByVal sChaine As String) As String

    Dim sTmp As String, i As Long
    Dim traduction_accents()
    Dim accents() As String

    traduction_accents = Array("Á/A", "Â/A", "Ã/A", "Ä/A", "Å/A", "Ç/C", "È/E", "É/E", "Ê/E", "Ë/E", "Ì/I", "Í/I", "Î/I", "Ï/I", _
    "Ñ/N", "Ò/O", "Ó/O", "Ô/O", "Õ/O", "Ö/O", "Ù/U", "Ú/U", "Û/U", "Ü/U", "Ý/Y", "à/a", "á/a", "â/a", _
    "ã/a", "ä/a", "å/a", "ç/c", "è/e", "é/e", "ê/e", "ë/e", "ì/i", "í/i", "î/i", "ï/i", "ñ/n", "ò/o", _
    "ó/o", "ô/o", "õ/o", "ö/o", "ù/u", "ú/u", "û/u", "ü/u", "ý/y", "ÿ/y")

    sTmp = sChaine
    For i = 0 To UBound(traduction_accents)
    accents = Split(traduction_accents(i), "/")
    sTmp = Replace(sTmp, accents(0), accents(1))
    Next i
    SupprimerAccents = sTmp

    End Function

     
    -1
    1. TOT127 Messages postés 1045 Statut Membre 96
       
      merci, je vais essayer. Il me dit juste: end sub attendu. Pourquoi ça? (mon livre sur VBA arrive demain, j'aurai moins de questions dès lors...)
      0