Macro supprimer accents excel

Fermé
TOT127
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
- 11 juin 2016 à 23:55
thev
Messages postés
1770
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
11 novembre 2021
- 13 juin 2016 à 14:10
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

A voir également:

2 réponses

thev
Messages postés
1770
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
11 novembre 2021
663
Modifié par thev le 13/06/2016 à 14:26
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
thev
Messages postés
1770
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
11 novembre 2021
663
13 juin 2016 à 00:30
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
TOT127
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
95
13 juin 2016 à 10:52
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