Probléme de remplacement de texte (VBA Word 2003)

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 3 avril 2006 à 13:24
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 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

4 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
4 avril 2006 à 09:26
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
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 avril 2006 à 13:42
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
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 avril 2006 à 13:52
Heeeeeeeu, petite remarque à la con : le "If InStr(..." ne sert à rien!

Faut pas s'enerver
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 avril 2006 à 16:55
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
0
Rejoignez-nous