macro remplace dans classeurs

shadows31

XLDnaute Nouveau
bjr a tous
Je dois fréquement traduire des tarifs et documents excel de l'espagnol au francais. J'utlise donc la fonction remplace avec chaque fois un mot pour iun autre. Existe t'il une macro qui effectuerais cela a partir d'une liste de mots et sa traduction, dans tout le classeur, en respectant les majuscules et les mots entiers? j'ai essaye avec :
Sub RemplacerPar()
Dim intWS As Integer
Dim strAncien As String
Dim strNouveau As String

strAncien = "Ancien texte"
strNouveau = "Nouveau texte"

For intWS = 1 To ThisWorkbook.Worksheets.Count
Worksheets(intWS).Activate
Cells.Replace What:=strAncien, Replacement:=strNouveau, LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next intWS
End Sub
mais je ne peut remplacer qu'un mot a la fois!!!
je vous remercie par avance de vos réponses
a+
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re : macro remplace dans classeurs

Bonjour shadows31, le forum

j'ai modifié ta macro pour utiliser un tableau, j'ai enlevé l'activation de feuille qui ne sert à rien sinon ralentir.
tu remplis le tableau strancien avec les mots à remplacer et le tableau strnouveau avec les chaines correspondantes

Cordialement, A+

Sub RemplacerPar()
Application.ScreenUpdating = False
Dim intWS As Integer
Dim intTab As Integer
Dim strAncien As Variant
Dim strNouveau As Variant
strAncien = Array("Ancien texte", "Ancien texte2")
strNouveau = Array("Nouveau texte", "Nouveau texte2")
For intWS = 1 To ThisWorkbook.Worksheets.Count
For intTab = LBound(strAncien) To UBound(strAncien)
Worksheets(intWS).Cells.Replace What:=strAncien(intTab), Replacement:=strNouveau(intTab), LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next intTab
Next intWS
Application.ScreenUpdating = True
End Sub
 

shadows31

XLDnaute Nouveau
Re : macro remplace dans classeurs

merci de ta réponse et de tes explications mais sous quelle forme je dois faire ce tableau ?
Peut tu m'envoyer un exemple qui me serait tres utile, pour mettre ca en forme?
bonne journée et encore merci car si ca marches je vais economiser des heures de boulot, on as autre chose a faire aussi!!
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re : macro remplace dans classeurs

bonjour

le tableau est déja dans la macro, faut juste le remplir, la macro est utilisable telle quelle
ceci est un tableau à deux valeurs que tu peux augmenter à n valeurs
strAncien = Array("Ancien texte", "Ancien texte2")
tu y mets les chaines à remplacer
strAncien = Array("chaine1", "chaine2","chaine3", "chaine4")
et etc
dans
strNouveau = Array("Nouveau texte", "Nouveau texte2","Nouveau texte3", "Nouveau texte4")
tu mets les chaines correspondantes à placer et dans l'ordre de correspondance
en tournant la macro remplacera la chaine 1 de strancien par la chaine 1 de strnouveau, la chaine 2 de strancien par la chaine 2 de strnouveau, etc

en cerise sur le gateau, si tu remplaces ThisWorkbook par activeworkbook, la macro n'aura pas besoin d'être dans le classeur à modifier, mais il suffira qu'elle soit dans un classeur ouvert pour agir sur le classeur actif.

Cordialement, A+
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re : macro remplace dans classeurs

d'ailleurs voici la macro modifiée avec un tableau à 6 valeurs, cela va aussi vite

Code:
Sub RemplacerPar()
Application.ScreenUpdating = False
Dim intWS As Integer
Dim intTab As Integer
Dim strAncien As Variant
Dim strNouveau As Variant
strAncien = Array("Ancien texte", "Ancien texte2", "Ancien texte3", "Ancien texte4", "Ancien texte5", "Ancien texte6")
strNouveau = Array("Nouveau texte", "Nouveau texte2", "Nouveau texte3", "Nouveau texte4", "Nouveau texte5", "Nouveau texte6")
For intWS = 1 To ActiveWorkbook.Worksheets.Count
For intTab = LBound(strAncien) To UBound(strAncien)
ActiveWorkbook.Worksheets(intWS).Cells.Replace What:=strAncien(intTab), Replacement:=strNouveau(intTab), LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next intTab
Next intWS
Application.ScreenUpdating = True
End Sub
 

shadows31

XLDnaute Nouveau
Re : macro remplace dans classeurs

super ca marche bien juste je pense il me faudra passer par word pour remplir les mùots a remplacer, a part que je trouve une macro ou une formule qui me fasses ca a partir d'excell genre " ancien texte 2" = a1, nouveau texte 2 = a2
je vais voir ca sinon je remplis comme tu m'as dis.
merci de ton coup de main
a bientot
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re : macro remplace dans classeurs

Bonjour

voila un code qui fait cela, fait toutes tes demandes d'un coup, c'est plus simple. Ce code agit sur le classeur actif mais jamais sur le classeur contenant la macro ce qui évitera d'effacer ton dico
le dico:
en colonne A les valeurs à remplacer, en colonne B les valeurs correspondantes.
Je te mets le fichier en pièce jointe

Cordialement, A+

Code:
Sub RemplacerPar()
Application.ScreenUpdating = False
Dim IntWS As Integer
Dim IntTab As Integer
Dim Str_Tab As Variant
Dim Current_Ws As Worksheet
If ThisWorkbook.Name = ActiveWorkbook.Name Then Exit Sub
Str_Tab = ThisWorkbook.Sheets("Dico").Range("A1:B" & _
ThisWorkbook.Sheets("Dico").Range("A65536").End(xlUp).Row).Value
For Each Current_Ws In ActiveWorkbook.Worksheets
For IntTab = LBound(Str_Tab) To UBound(Str_Tab)
Current_Ws.Cells.Replace What:=Str_Tab(IntTab, 1), Replacement:=Str_Tab(IntTab, 2), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next IntTab
Next Current_Ws
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Classeur_Dico.xls
    24.5 KB · Affichages: 41
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 817
Membres
104 673
dernier inscrit
lautard