OVH Cloud OVH Cloud

VBA et rechercher remplacer

2 réponses
Avatar
Romain Casey
Bonjour,
Je suis en train d'écrire une macro qui, entre autre, recherche deux
majuscules suivi d'un l minuscule pour le remplacer par les mêmes deux
majuscules suivi par un I majuscule. Le code que j'utilise est
ci-dessous. Le problème c'est que quand j'utilise ce code, Word me
repagine automatiquement tout mon document (entre 60 et 80 pages), c'est
long et totalement inutile. Je n'arrive pas désactiver ce comportement.
J'ai bien essayé de placer des Options.Pagination = False, ou
ActiveDocument.Pagination = False dans mon code mais ça ne change rien.
Quelqu’un aurait-il une idée ?

Merci beaucoup.


Romain


Dim MaStringE As String
Dim MaStringS As String
For i = 1 To 1000 'On boucle pour être certain de tout prendre...
DoEvents
MaStringE = ""
MaStringS = ""

With Selection.Find
.Text = "[A-Z][A-Z]l"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
MaStringE = Selection
MaStringS = CStr(Mid(MaStringE, 1, 2) & "I")
If Mid(MaStringE, 3, 3) = "l" Then
'La sélection est correct
With Selection.Find
.Text = MaStringE
.Replacement.Text = MaStringS
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ElseIf Mid(MaStringE, 3, 3) = "I" Then
'là, elle ne l'est plus, la première requête ne trouve rien
'et la sélection est le dernier "remplacer" en date...
Exit For
End If
Next i

2 réponses

Avatar
Circé
Bonjour,

Je sais pas si ta macro est indispensable mais bon, on ne dira rien !!!
;-))) (joke des AMIS°

Si tu lances ta macro avec un affichage normal (et non pas un affichage
page), tu ne devrais pas avoir de pagination en arrière-plan.
Tu peux inclure cet affichage dans la macro :
ActiveWindow.View.Type = wdNormalView

Circé
http://faqword.free.fr


Romain Casey wrote:
|| Bonjour,
|| Je suis en train d'écrire une macro qui, entre autre, recherche deux
|| majuscules suivi d'un l minuscule pour le remplacer par les mêmes
|| deux majuscules suivi par un I majuscule. Le code que j'utilise est
|| ci-dessous. Le problème c'est que quand j'utilise ce code, Word me
|| repagine automatiquement tout mon document (entre 60 et 80 pages),
|| c'est long et totalement inutile. Je n'arrive pas désactiver ce
|| comportement. J'ai bien essayé de placer des Options.Pagination || False, ou ActiveDocument.Pagination = False dans mon code mais ça ne
|| change rien. Quelqu’un aurait-il une idée ?
||
|| Merci beaucoup.
||
||
|| Romain
||
||
|| Dim MaStringE As String
|| Dim MaStringS As String
|| For i = 1 To 1000 'On boucle pour être certain de tout
|| prendre... DoEvents
|| MaStringE = ""
|| MaStringS = ""
||
|| With Selection.Find
|| .Text = "[A-Z][A-Z]l"
|| .Forward = True
|| .Wrap = wdFindContinue
|| .Format = False
|| .MatchCase = True
|| .MatchWholeWord = False
|| .MatchWildcards = True
|| .MatchSoundsLike = False
|| .MatchAllWordForms = False
|| End With
|| Selection.Find.Execute
|| MaStringE = Selection
|| MaStringS = CStr(Mid(MaStringE, 1, 2) & "I")
|| If Mid(MaStringE, 3, 3) = "l" Then
|| 'La sélection est correct
|| With Selection.Find
|| .Text = MaStringE
|| .Replacement.Text = MaStringS
|| .Forward = True
|| .Wrap = wdFindContinue
|| .Format = False
|| .MatchCase = True
|| .MatchWholeWord = False
|| .MatchWildcards = False
|| .MatchSoundsLike = False
|| .MatchAllWordForms = False
|| End With
|| Selection.Find.Execute Replace:=wdReplaceAll
|| ElseIf Mid(MaStringE, 3, 3) = "I" Then
|| 'là, elle ne l'est plus, la première requête ne trouve rien
|| 'et la sélection est le dernier "remplacer" en date...
|| Exit For
|| End If
|| Next i
Avatar
Romain Casey
Je sais pas si ta macro est indispensable mais bon, on ne dira rien !!!
;-))) (joke des AMIS°


Si cette remarque tiens à une structure un peu lourde de la macro, toute
proposition est la bienvenue. Personnellement, je trouve ça horrible
mais je n'ai pas su faire mieux...


Si tu lances ta macro avec un affichage normal (et non pas un affichage
page), tu ne devrais pas avoir de pagination en arrière-plan.
Tu peux inclure cet affichage dans la macro :
ActiveWindow.View.Type = wdNormalView


OK. Je vais essayer. Merci pour l'info.


Romain