Pb macro recherche et remplace

morpheus579

XLDnaute Nouveau
Bonjour

Je suis confronté a un petit probleme :

La fonction recherche fonction correctement
Par contre la fonction rechercher remplace tous les caracteres de la feuille ; comment lui dire qu'il lui faut une valeur comme 362541-001 avec un message box a la place de 3 par exememple
En plus lorsque je suis sur la fenetre remplace , et que je selectionne annuler ceci me supprime la valeur de la cellule.

Merci de votre retour

Code utilise ci-dessous

Sub Remplace()
'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
 

Lone-wolf

XLDnaute Barbatruc
Bonjour morpheus

Version Formulaire

Double clique en Feuil1 pour afficher le formulaire. Une fois écrit le mot dans la 1ère textbox, tappe sur Enter (mais pas trop fort! :D), écrit le mot, clique sur ok. Si erreur de frappe ou mot inexistant, un message s'affichera.


Exemple en PJ
 

Pièces jointes

  • Rech-Remp Form-V2.xlsm
    23.4 KB · Affichages: 45
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Bonjour morpheus
C'est impossible avec un InputBox.
Il faut passer par un formulaire.

Pourtant, chez moi cela fonctionne avec InputBox ;)
VB:
Sub Macro1()
Dim vMot, vReplace
vMot = InputBox("Quel mot recherchez-vous ?", Title:="Recherche un mot")
vReplace = InputBox("Par quel mot voulez vous remplacer ?", Title:="Remplacer le mot trouver")
Cells.Replace What:=CStr(vMot), Replacement:=CStr(vReplace), LookAt:=xlPart, SearchOrder:=xlByRows
End Sub

La même mais avec édulcorant ;)
VB:
Sub Macro_version_Light()
Dim vMot, vReplace
vMot = InputBox("Quel mot recherchez-vous ?", "Recherche un mot")
vReplace = InputBox("Par quel mot voulez vous remplacer ?", "Remplacer le mot trouver")
Cells.Replace CStr(vMot), CStr(vReplace), 2, 1
End Sub
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re

@Staple1600

Tests Macro 1 et light, négatifs.

Edit: Par contre comme ceci, tests OK.

VB:
Sub Macro_version_Light()
Dim Sh As Worksheet, vMot, vReplace
vMot = InputBox("Quel mot recherchez-vous ?", "Recherche un mot")
vReplace = InputBox("Par quel mot voulez vous remplacer ?", "Remplacer le mot trouvé")
For Each Sh In ThisWorkbook.Worksheets
Sh.Cells.Replace CStr(vMot), CStr(vReplace), 2, 1
Next Sh
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@Lone-wolf
Ok Skynet est mort
Donc I'am back :)

Alors concernant ma macro.

Il y a un pré-requis pour expliquer pourquoi elle fonctionne chez moi.

Pour avoir le code rapidement au départ, j'ai fait CTRL+H et j'ai choisi Dans:Classeur.
(et j'ai laissé tourner l'enregistreur de macros)
Ensuite j'ai modifié le code VBA obtenu puis j'ai testé.
Et le changement se faisait bien sur toutes les feuilles.
Donc j'en ai déduis que cela fonctionne bien.

Or je cherche Excel, et je teste ma macro (sans faire un CTRL+H manuel au préalable) effectivement la macro ne fonctionne que sur la feuille active.

Subséquement, je propose à la place cette option
VB:
Sub Lycoos_Tribute()
Application.CommandBars.FindControl(ID:=1849).Execute
End Sub

Par contre, j'ai chez moi un petit bug avec celle-ci (et vous ?)
VB:
Sub Bug()
Application.Dialogs(xlDialogFormulaReplace).Show
End Sub

EDITION: J'ai bien vu ton EDIT de 23h23
Mais justement, je voulais éviter la boucle.

NB:Personnellement dans un cas similaire (remplacer une valeur dans un classeur), je préfère passer par un CTRL+H manuel qui affiche la boite de dialogue Remplacer
(et qui donc permets d'avoir facilement accès aux différents paramètres de Recherche)
avec l'option:
Dans:Classeur (pas de boucle)
(quand on fait le remplacement manuellement
Étrangement cela ne fonctionne pas en VBA sans faire de boucle ???)
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re

Mais qu'est-ce que tu as contre les boucles? o_O Tu n'aime pas les filles ?? :D

@Staple1600

je préfère passer par un CTRL+H manuel qui affiche la boite de dialogue Remplacer

OK. Mais dans ce cas, imputbox et mon formulaire sont inutiles (c'est ta pensée). Tout comme envoyer un mail avec Outlook par exemple. Staple dit: tu ouvre Outlook et tu envois l'email.

Donc, à quoi sert faire du VBA??? :cool::rolleyes:
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@Lone-wolf
Je dis simplement que la boite de dialogue Remplacer offre nativement plus de fonctionnalités pour faire une recherche
(et ne nécessite pas d'avoir recours à VBA ou de créér un userform)
01remp.jpg

Et je ne fais par là que confirmer ce que disait le demadeur en début de post ;)
La fonction recherche fonction correctement

[aparté]
Plus le temps passe plus, je suis d'accord avec ces régles
9. Don't Assume Code is Needed. Often a Worksheet Function is FAR better and More Efficient.
10. Avoid Using Custom Functions When a Built-in Worksheet Function can be Used.
Even Deeply Nested Worksheet Function are Often a Lot More Effiecient Than Custom Function Written in VBA.
Pour ce qui est des boucles, voici l'explication ;)
7. Avoid Loops. Make Good use of Much Faster Alternatives Like Find (Find Method), AutoFilter, AdvancedFilter, SpecialCells etc.

Si cela t'intéresse, faire une recherche sur le web : VBA GOLDEN RULES pour découvrir les 21 règles.
[/aparté]

[avis personnel]
Maintenant pourquoi faisons-nous du VBA?
Parce que peut-être cela nous permets de nous penser programmeurs...
(à peu de frais puisque VBA est fourni avec Excel)
Mais les logiciels ou applis les plus célèbres ne sont pas développés sous Excel.
(heureusement ;))
[/avis personnel]
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
427

Statistiques des forums

Discussions
315 096
Messages
2 116 174
Membres
112 677
dernier inscrit
Justine11