Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème avec l'instruction find/replace

4 réponses
Avatar
Christophe
Bonjour à tous,
je rencontre un problème en VBA lorsque je veux sélectionner (voire
remplacer) du texte dans la sélection en cours. Si la sélection ne
contient qu'un caractère, la recherche continue dans la suite du
document même avec l'option Wrap. Exemple ci dessous :
je veux transformer toutes les lettres de la selection en italique.
Si la selection contient au moins 2 caractère, ça fonctionne, sinon,
s'il y a d'autres caractères après la sélection, leurs lettres sont
également transformées en italique ! J'utilise word XP et j'ai constaté
le même problème avec word97.
Avez-vous une idée ? Merci.

With selection.Find
.Text = "^$"
.Replacement.ClearFormatting
.Replacement.Text = ""
.Replacement.Font.Italic = True
.Format = True
.Wrap = wdFindStop
.Execute Replace:=wdReplaceAll, Forward:=True
End With

4 réponses

Avatar
AB
Bonjour,
Je ne comprends pas bien où est le problème.
Cette macro met en italique le texte sélectionné, et rien d'autre...
Je ne vois pas ce que tu veux dire avec les 2 caractères.
AB

Christophe wrote:
|| Bonjour à tous,
|| je rencontre un problème en VBA lorsque je veux sélectionner (voire
|| remplacer) du texte dans la sélection en cours. Si la sélection ne
|| contient qu'un caractère, la recherche continue dans la suite du
|| document même avec l'option Wrap. Exemple ci dessous :
|| je veux transformer toutes les lettres de la selection en italique.
|| Si la selection contient au moins 2 caractère, ça fonctionne, sinon,
|| s'il y a d'autres caractères après la sélection, leurs lettres sont
|| également transformées en italique ! J'utilise word XP et j'ai
|| constaté le même problème avec word97.
|| Avez-vous une idée ? Merci.
||
|| With selection.Find
|| .Text = "^$"
|| .Replacement.ClearFormatting
|| .Replacement.Text = ""
|| .Replacement.Font.Italic = True
|| .Format = True
|| .Wrap = wdFindStop
|| .Execute Replace:=wdReplaceAll, Forward:=True
|| End With
Avatar
Christophe

Bonjour,
Je ne comprends pas bien où est le problème.
Cette macro met en italique le texte sélectionné, et rien d'autre...
Je ne vois pas ce que tu veux dire avec les 2 caractères.
bonjour,

je suis ennuyé lorsque ma selection ne contient qu'un caractère car dans
ce cas, l'instruction find ne se limite pas à la sélection pour
effectuer sa recherche/remplacer mais va aussi explorer le reste du
document alors que je veux limiter cette instruction à la seule
sélection en cours.
Est-ce un bug ? Cela fonctionne très bien dès lors qu'il y a au moins 2
caractères dans la sélection. Comme tu le dis, cette macro se contente
alors de metttre en italique les lettres de la sélection.

Avatar
AB
OK, compris, testé, et effectivement, tu as raison.
Je ne sais pas expliquer, mais je crois savoir comment contourner le
problème.
Essaie ça :
Sub Italique()
If Selection.Characters.Count = 1 Then Exit Sub
With Selection.Find
.Text = "^$"
.Replacement.ClearFormatting
.Replacement.Text = ""
.Replacement.Font.Italic = True
.Format = True
.Wrap = wdFindStop
.Execute Replace:=wdReplaceAll, Forward:=True
End With
End Sub

AB

Christophe wrote:
||
||| Bonjour,
||| Je ne comprends pas bien où est le problème.
||| Cette macro met en italique le texte sélectionné, et rien d'autre...
||| Je ne vois pas ce que tu veux dire avec les 2 caractères.
|| bonjour,
|| je suis ennuyé lorsque ma selection ne contient qu'un caractère car
|| dans ce cas, l'instruction find ne se limite pas à la sélection pour
|| effectuer sa recherche/remplacer mais va aussi explorer le reste du
|| document alors que je veux limiter cette instruction à la seule
|| sélection en cours.
|| Est-ce un bug ? Cela fonctionne très bien dès lors qu'il y a au
|| moins 2 caractères dans la sélection. Comme tu le dis, cette macro
|| se contente alors de metttre en italique les lettres de la sélection.
Avatar
Christophe
OK, compris, testé, et effectivement, tu as raison.
Je ne sais pas expliquer, mais je crois savoir comment contourner le
problème.
Essaie ça :
Sub Italique()
If Selection.Characters.Count = 1 Then Exit Sub
With Selection.Find
.Text = "^$"
.Replacement.ClearFormatting
.Replacement.Text = ""
.Replacement.Font.Italic = True
.Format = True
.Wrap = wdFindStop
.Execute Replace:=wdReplaceAll, Forward:=True
End With
End Sub
oui, ça fonctionne. En fait c'est la seule alternative que j'avais

trouvé pour contourner ce "bug" si c'en est un. Etrange... D'autant que
différentes version de word ont ce comportement.
Merci AB en tout cas,
à bientôt