rechercher un mot dans toutes les feuilles du classeur et le remplacer par un autre

Taylante

XLDnaute Nouveau
Bonjour,

J'ai rechercher sur le net une macro qui me permette de rechercher un nom et pouvoir le remplacer par un autre. Mais je ne trouve pas exactement ce que je veux. La formule qui se rapproche est celle indiquer ci-dessous.

Sub efface_mot()
'rechercher un mot dans toutes les feuilles du classeur et le remplacer par un autre
Dim feuil As Worksheet
Dim Mot As Variant
Dim Replace As Variant
Mot = InputBox("Quel mot recherchez-vous ?", Title:="Recherche un mot")
Replace = InputBox("Par quel mot voulez vous remplacer ?", Title:="Remplacer le mot trouver")
If Mot = "" Then Exit Sub
For Each feuil In ThisWorkbook.Worksheets
feuil.Cells.Replace What:=Mot, Replacement:=Replace
Next
End Sub

Seulement je veux pourvoir changer le mot par rapport au nom de la personne.
Si deux Personnes habitent sur Paris et qu'une seule personne est concerné pour un changement de localisation, je ne voudrais pas que le mot Paris change sur toutes les feuilles.

Exemple : Mr DURAND et DUPOND habitent à Paris mais seulement DURAND déménage sur Rennes. Le changement doit se faire sur toutes les feuilles.

Merci pour votre aide
 

Pièces jointes

  • Classeur1.xlsm
    16.3 KB · Affichages: 47

eriiic

XLDnaute Barbatruc
Bonjour,

Pourquoi ? Ce n'est pas bien Rennes ?
Une proposition en supposant qu'un seul changement par feuille est possible :
Dans le module Feuil1 :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim sh As Worksheet, nb As Long
Dim adr1 As String, c As Range
If Target.Count <> 3 Or Target.Rows.Count <> 1 Then Exit Sub
If MsgBox("Déménagement de " & Target(1) & " " & Target(2) & " vers " & Target(3), vbOKCancel) = vbCancel Then Exit Sub
Cancel = True
For Each sh In Worksheets
Set c = sh.Cells.Find(Target(1), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
adr1 = c.Address
Do
If c.Offset(, 1) = Target(2) Then
c.Offset(, 2) = Target(3)
nb = nb + 1
Exit Do
Else
Set c = Cells.FindNext(c)
End If
Loop While c.Address <> adr1 'And Not c Is Nothing
End If
Next sh
MsgBox nb & " remplacements effectués"
End Sub
(la mise en forme ne fonctionne pas, désolé)
Changer la ville en Feuil1!C2, sélectionner A2:C2 et faire un clic-droit

Bon, impossible de joindre le fichier également. J'ai l'impression que le site n'aime plus Chrome ou les bloqueurs de pub !?!
eric
 

cp4

XLDnaute Barbatruc
Finalement, je n'ai pas bien compris ton problème. Les données de tes 3 feuilles sont identiques.
Ensuite, tu veux faire une recherche sur toutes les feuilles et ne vouloir effectuer les modifications que sur une seule feuille. Alors pourquoi faire une boucle sur toutes feuilles?

Si ça concerne une seule feuille comme ceci
VB:
Sub efface_mot()
    Dim feuil As Worksheet, Mot As Variant, Replace As Variant
    Mot = InputBox("Quel mot recherchez-vous ?", Title:="Recherche un mot")
    Replace = InputBox("Par quel mot voulez vous remplacer ?", Title:="Remplacer le mot trouver")
    If Mot = "" Then Exit Sub
ActiveSheet.Cells.Replace What:=Mot, Replacement:=Replace
End Sub
 
Dernière édition:

Taylante

XLDnaute Nouveau
Bonjour Eric
Désoler de ne pas avoir répondu car actuellement je suis en mission sur Bourges. Je n'ai pu essayer ta formule car mon dossier est à la maison. Des mon retour je te confirme si ça fonctionne. Encore merci d'avoir répondu à ma question. A bientôt
Taylante
 

Taylante

XLDnaute Nouveau
Bonjour,

Eric, je viens de tester ta formule et elle marche parfaitement. cependant la mis en place de cette formule n'est pas simple pour mon dossier.
J'ai donc changer de projet et je me suis orienté vers un Userform. Après quelques visionnage sur son fonctionnement, j'ai réussit à faire ce que je voulais.

Merci à tous pour avoir répondu à ma demande de formule.
 

Discussions similaires

Statistiques des forums

Discussions
315 091
Messages
2 116 110
Membres
112 662
dernier inscrit
lou75