Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2011, 16h15   #1
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 76
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 76
Points : 27
Points : 27
Par défaut VBA Find ne marche pas dans les formules

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) :
Code :
1
2
3
4
5
 
Cells.Select
Selection.Replace what:="SOMME", Replacement:="SUMA", lookat:=xlPart, _
   searchorder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
   ReplaceFormat:=False
- La fonction Find + Replace que j'ai trouvé sur le net (et dont le Find ne marche pas) :

Code :
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
Ghorin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 17h44   #2
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

Postulat, j'ai dans une cellule de ma zone..

Quelque soit la langue, le VBA parle anglais...

Code :
1
2
3
4
5
6
7
Sub toto()
 
Set Found_Link = ActiveSheet.Cells.Find(What:="sum", After:=ActiveCell, _
        LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
  Found_Link.Select
End Sub
Cordialement,

Ps : si côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 17h56   #3
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

au fait : idem pour replace bien sur....

Code :
ActiveCell.Replace What:="sum", Replacement:="sommmma", LookAt:=xlPart  etc....
Cordialement,

Ps : si côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h18.


 
 
 
 
Partenaires

Hébergement Web