Bonjour,
J'ai un classeur excel avec plusieurs feuilles qui contiennent des formules de calcul. Ce classeur a été écrit en France et utilise donc les mots clés de la version française de VBA ( SI(...) OU(...) ...). J'ai besoin de faire des versions internationales de ce fichier et d'avoir une version spécifique à chaque pays avec pour chacun les mots clés dans la langue du pays. Par exemple :
SOMME => SUM en anglais
SUMA en espagnol
OU => OR en anglais
O en espagnol
Je me suis donc écrit une petite macro VBA qui pour chaque onglet va rechercher les mots clés et les remplacer par la traduction de la langue souhaitée. Et pour cela, j'utilise donc la fonction Replace. Or ça ne fonctionne pas : le mot clé est bien trouvé et remplacé quand c'est dans la valeur d'une cellule mais il n'est pas trouvé/remplacé quand c'est dans la formule d'une cellule. Et pourtant j'ai généré ce code Replace à partir de l'enregistreur de macro et quand je fais le rechercher/remplacer manuellement il modifie bien mes formules. Comme je ne réussissait pas avec le Replace, j'ai alors trouvé sur le net un autre code qui utilise un Find et qui fait ensuite le Replace sur chaque occurence trouvée, mais ça ne marche pas non plus : il ne trouve mon mot clé que dans les valeurs, pas dans les formules, et pourtant la fonction a bien le paramètre pour faire la recherche dans les formules.
- Exemple de formule :
=SI(F2="AAA";OU(G2=1;H2=1);"bbb")
- Ma fonction replace (qui ne marche pas) :
- La fonction Find + Replace que j'ai trouvé sur le net (et dont le Find ne marche pas) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Cells.Select Selection.Replace what:="SOMME", Replacement:="SUMA", lookat:=xlPart, _ searchorder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Cells.Select Set Found_Link = Cells.Find(What:="SOMME", After:=ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) While UCase(TypeName(Found_Link)) <> UCase("Nothing") Found_Link.Activate Found_Link.Formula = Replace(Found_Link.Formula, "SOMME", "SUMA") Set Found_Link = Cells.FindNext(After:=ActiveCell) Wend
Voilà, je ne comprends donc pas le comportement de la fonction de rechercher/remplacer qui marche très bien quand je la lance manuellement (depuis le menu) mais qui ne marche pas quand je la lance depuis son équivalent vba.
Si quelqu'un a une idée, je suis preneur ...
Merci d'avance
Partager