Macro supprimer accents excel [Fermé]

Signaler
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
-
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
-
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

Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
604
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
604
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

 
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
89
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...)