Probléme de remplacement de texte (VBA Word 2003) [Résolu]

Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 3 avril 2006 à 13:24 - Dernière réponse : Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention
- 4 avril 2006 à 09:26
Donc un petit probléme (que des petits probléme et de grande solution!)

Lorsque j'execute la fonction RemplacerText (ci dessous) le remplacement se fait dans tout le document et non pas seulement dans l'objet range passée à ma fonction!
Command faire pour remplacer uniquement le texte dans le range passée à ma fonction?

'------------------------------------------------------------------------------------------------------------------------
Sub RemplacerText(ByVal RangeAModif As Range, ByVal TextRecherche As String, ByVal TextRemplace As String)
Dim EtatAlert As Long: EtatAlert = Application.DisplayAlerts
Application.DisplayAlerts = wdAlertsNone
With RangeAModif.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = TextRecherche
.Replacement.Text = TextRemplace
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Application.DisplayAlerts = EtatAlert
End Sub
'------------------------------------------------------------------------------------------------------------------------

Merci bien

Faut pas s'enerver
Afficher la suite 

4 réponses

Meilleure réponse
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 4 avril 2006 à 09:26
3
Merci
Parfois j'ai l'imprésion d'être tout seul!
Bon je met la reponce à ma question même si j'ai unpeut l'imprésion que tout le monde s'en cogne!

Alors pour ne faire le remplacement que dans l'ogjet range (ou selection) il faut simplement metter la valeur .Wrap à wdFindStop et non pas wdFindContinue ou wdFindAsk (si on interdi à Word les message de question Ask = Continue). La fonction est donc

'------------------------------------------------------------------------------------------------------------------------
Sub RemplacerText(ByVal RangeAModif As Range, ByVal TextRecherche As String, ByVal TextRemplace As String)
Dim EtatAlert As Long: EtatAlert = Application.DisplayAlerts
Application.DisplayAlerts = wdAlertsNone
With RangeAModif.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = TextRecherche
.Replacement.Text = TextRemplace
.Forward = True
.Wrap = wdFindStop

.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Application.DisplayAlerts = EtatAlert
End Sub
'------------------------------------------------------------------------------------------------------------------------

Faut pas s'enerver

Merci Polack77 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 3 avril 2006 à 13:42
0
Merci
Une solution pourait être de ne faire q'un remplacement à la fois dans une boucle qui tourne temps que le texte est trouver. Mais cela rempli la pile "Annuler" et j'ais déja rencontrer des problémes avec, donc je la vide et du coup c plus long à l'execution
(boucle + vide annuler).

Cela donerais ça :

'------------------------------------------------------------------------------------------------------------------------
Sub RemplacerText(ByVal RangeAModif As Range, ByVal TextRecherche As String, ByVal TextRemplace As String)
Dim EtatAlert As Long: EtatAlert = Application.DisplayAlerts
Application.DisplayAlerts = wdAlertsNone
If InStr(1, RangeAModif.Text, TextRecherche) Then
Do While InStr(1, RangeAModif.Text, TextRecherche)
With RangeAModif.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = TextRecherche
.Replacement.Text = TextRemplace
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceOne
End With
RangeAModif.Document.UndoClear
Loop
End If
Application.DisplayAlerts = EtatAlert
End Sub
'------------------------------------------------------------------------------------------------------------------------

Si qu'elqun à mieu merci de me le faire savoir!
Bon c vrais que ca marche quand même!
(Si personne n'a mieu je valide ma réponce, mais pas aven demain pour ne pas décourager les personnes qui lirais ce message)

Faut pas s'enerver
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 3 avril 2006 à 13:52
0
Merci
Heeeeeeeu, petite remarque à la con : le "If InStr(..." ne sert à rien!

Faut pas s'enerver
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 3 avril 2006 à 16:55
0
Merci
Ca marche pas!!!!!!!!!!!!!!!!!!!!!!!

Le code que j'ai mis plus haut (celui avec la boucle) ne marche pas vraiment!
Il semble que l'action replace modifi l'objet range qui ne selectione plus la même plage de donées.
Il me faut un code qui remplace le text uniquement dans l'objet range et d'un seul coup.

Merci

Faut pas s'enerver

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.