Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
3 avril 2006 à 13:24
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 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
'------------------------------------------------------------------------------------------------------------------------
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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
'------------------------------------------------------------------------------------------------------------------------
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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)
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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.