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

Word, Remplacement, MatchWholeWord

10 réponses
Avatar
Frédéric Steczycki [AtoutFox]
Bonjour,

Quelqu'un peut il me dire pourquoi cette macro remplace toutes les
occurences de VOTRE_NOM du document sans se limiter aux mots entiers (par
exemple VOTRE_NOMCOMPLET me donne TestCOMPLET) ? (Word 2003, 2007)
La propriété MatchWholeWord est bien positionnée à True...

Sub Macro1()
'
' Macro1 Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "VOTRE_NOM"
.Replacement.Text = "Test"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub

Merci.

--
Fred

10 réponses

Avatar
Jacques93
Bonjour Frédéric Steczycki,
Bonjour,

Quelqu'un peut il me dire pourquoi cette macro remplace toutes les
occurences de VOTRE_NOM du document sans se limiter aux mots entiers (par
exemple VOTRE_NOMCOMPLET me donne TestCOMPLET) ? (Word 2003, 2007)
La propriété MatchWholeWord est bien positionnée à True...

Sub Macro1()
'
' Macro1 Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "VOTRE_NOM"
.Replacement.Text = "Test"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub



Ce qui provoque ce comportement est la présence du caractère _
(Underscore) dans VOTRE_NOM. Tu peux d'ailleurs vérifier en faisant la
manip à la main : la case à cocher 'Mot entier' devient grisée.

Une solution de contournement (pas idéale...), est de mettre :

.Text = "VOTRE^?NOM"

c'est à dire tout caractère.


--
Cordialement,

Jacques.

Avatar
Frédéric Steczycki [AtoutFox]
Merci Jacques93, j'ai au moins une explication, je commençais à en perdre
mon lapin... :o)

Mais à quoi donc sert ce underscore dans Word?

N'y a t'il pas moyen de dire à Word de prendre ce caractère tel qu'il est et
non pas comme un caractère spécifique.
(ajout d'un ^ devant ou autre...) du même tonneau que le ^? mais pour
limiter à l'expression exacte ?

En attendant je me contenterai de cette solution, mais il faut bien avouer
que c'est de l'approximatif à la mode MS...

Fred

"Jacques93" a écrit dans le message de news:

Bonjour Frédéric Steczycki,
Bonjour,

Quelqu'un peut il me dire pourquoi cette macro remplace toutes les
occurences de VOTRE_NOM du document sans se limiter aux mots entiers (par
exemple VOTRE_NOMCOMPLET me donne TestCOMPLET) ? (Word 2003, 2007)
La propriété MatchWholeWord est bien positionnée à True...

Sub Macro1()
'
' Macro1 Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "VOTRE_NOM"
.Replacement.Text = "Test"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub



Ce qui provoque ce comportement est la présence du caractère _
(Underscore) dans VOTRE_NOM. Tu peux d'ailleurs vérifier en faisant la
manip à la main : la case à cocher 'Mot entier' devient grisée.

Une solution de contournement (pas idéale...), est de mettre :

.Text = "VOTRE^?NOM"

c'est à dire tout caractère.


--
Cordialement,

Jacques.



Avatar
Jacques93
Merci Jacques93, j'ai au moins une explication, je commençais à en perdre
mon lapin... :o)

Mais à quoi donc sert ce underscore dans Word?


En informatique, c'est surtout utilisé pour remplacer l'espace là où
c'est interdit (adresse e-mail, url, etc...). Plus de détails :

< http://fr.wikipedia.org/wiki/Tiret_bas>

N'y a t'il pas moyen de dire à Word de prendre ce caractère tel qu'il est et
non pas comme un caractère spécifique.
(ajout d'un ^ devant ou autre...) du même tonneau que le ^? mais pour
limiter à l'expression exacte ?



Bien que ce ne soit pas un caractère de ponctuation, il est géré comme
tel, et donc comme séparateur de mot, apparemment.

D'autres intervenants auront peut être une solution plus élégante.

--
Cordialement,

Jacques.

Avatar
Circé
Bonjour,

Jacques93 a exposé le 23/10/2007 :


Bien que ce ne soit pas un caractère de ponctuation, il est géré comme tel,
et donc comme séparateur de mot, apparemment.

D'autres intervenants auront peut être une solution plus élégante.


Ben oui, c'est une question de logique...
Frédéric a mis dans sa macro la propriété "MatchWholeWord = True" et il
ne comprend pas que VOTRE_NOM ne soit pas considéré comme un mot seul.

Comme tu as dit, Jacques, l'underscore est effectivement un séparateur,
donc Word reconnaît qu'il y a plusieurs mots. Dans Word, à partir du
moment où il y a un espace, un tiret, un underscore, une ponctuation,
etc. ce n'est plus un seul mot, donc le "MatchWholeWord = True" ne sert
à rien.

Pour faire un tel RR, il faut indiquer qu'on utilise les caractères
génériques à l'aide de la propriété suivante :
MatchWildcards = True
et indiquer le début et la fin du mot :
"<VOTRE_NOM>"

La fonction RR est très puissante quand on sait bien l'utiliser... J'en
ai fait un petit topo ici :
http://faqword.free.fr/articles.php?lng=fr&pg22

Et, si possible, arrêter d'incriminer un logiciel parce qu'on n'en
connaît pas toutes les ficelles... ;)

Circé
http://faqword.free.fr

Avatar
Jacques93
Bonjour Circé,
Bonjour,

Jacques93 a exposé le 23/10/2007 :


Bien que ce ne soit pas un caractère de ponctuation, il est géré comme
tel, et donc comme séparateur de mot, apparemment.

D'autres intervenants auront peut être une solution plus élégante.


Ben oui, c'est une question de logique...


Nous n'avons pas la même logique ;-)
Je ne suis pas un littéraire, et ayant fait pas mal de programmation,
l'utilisation de l'underscore est justement faite pour former un seul
"mot" ( Nom de variable, de fonction, etc ...). Mais effectivement,
langage de programmation et français, ce n'est pas pareil ...

Frédéric a mis dans sa macro la propriété "MatchWholeWord = True" et il
ne comprend pas que VOTRE_NOM ne soit pas considéré comme un mot seul.

Comme tu as dit, Jacques, l'underscore est effectivement un séparateur,
donc Word reconnaît qu'il y a plusieurs mots. Dans Word, à partir du
moment où il y a un espace, un tiret, un underscore, une ponctuation,
etc. ce n'est plus un seul mot, donc le "MatchWholeWord = True" ne sert
à rien.

Pour faire un tel RR, il faut indiquer qu'on utilise les caractères
génériques à l'aide de la propriété suivante :
MatchWildcards = True
et indiquer le début et la fin du mot :
"<VOTRE_NOM>"


Arf! J'ai essayé, mais quand j'ai vu que la case à cocher 'mot entier'
se grisait dès la frappe de < , je n'ai pas été plus loin :-( .

La fonction RR est très puissante quand on sait bien l'utiliser... J'en
ai fait un petit topo ici :
http://faqword.free.fr/articles.php?lng=fr&pg22


Donc, si j'ai bien compris, la macro de Frédéric devient :

Sub Macro1()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
*.Text = "<VOTRE_NOM>"*
.Replacement.Text = "Test"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
*.MatchWholeWord = False*
*.MatchWildcards = True*
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub


Et, si possible, arrêter d'incriminer un logiciel parce qu'on n'en
connaît pas toutes les ficelles... ;)



Je n'ai pas l'impression d'avoir incriminé. Mais je suis parti sur un
autre raisonnement comme indiqué plus haut. D'ailleurs si l'on fait ce
type de remplacement dans l'éditeur VBA ou autre environnement de
développement le caractère underscore n'est pas un séparateur de mot ;-)


--
Cordialement,

Jacques.


Avatar
Circé
Bonsoir Jacques,

Il se trouve que Jacques93 a formulé :


Donc, si j'ai bien compris, la macro de Frédéric devient :

Sub Macro1()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
*.Text = "<VOTRE_NOM>"*
.Replacement.Text = "Test"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
*.MatchWholeWord = False*
*.MatchWildcards = True*
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub


Oui, sauf que la ligne ".MatchWholeWord" = False est inutile

La ligne "MatchAllWordForms = False" est inutile aussi d'ailleurs, car
cette propriété ne fonctionne pas pour le français.


Et, si possible, arrêter d'incriminer un logiciel parce qu'on n'en connaît
pas toutes les ficelles... ;)



Je n'ai pas l'impression d'avoir incriminé. Mais je suis parti sur un autre
raisonnement comme indiqué plus haut.


Je ne disais pas ça pour toi, Jacques, mais pour Frédéric qui dit "mais
il faut bien avouer que c'est de l'approximatif à la mode MS..."
Il n'y a rien d'approximatif là dedans...


D'ailleurs si l'on fait ce type de
remplacement dans l'éditeur VBA ou autre environnement de développement le
caractère underscore n'est pas un séparateur de mot ;-)


Tout à fait... Seulement Word, c'est le mot !! ;)))

Bonne soirée,

Circé
MVP du mot
http://faqword.free.fr


Avatar
Jacques93
Bonsoir Circé,
Bonsoir Jacques,

Il se trouve que Jacques93 a formulé :


Donc, si j'ai bien compris, la macro de Frédéric devient :

Sub Macro1()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
*.Text = "<VOTRE_NOM>"*
.Replacement.Text = "Test"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
*.MatchWholeWord = False*
*.MatchWildcards = True*
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub


Oui, sauf que la ligne ".MatchWholeWord" = False est inutile

La ligne "MatchAllWordForms = False" est inutile aussi d'ailleurs, car
cette propriété ne fonctionne pas pour le français.


J'ai été fainéant, c'est l'enregistreur de macro qui l'a mis :-P

Et, si possible, arrêter d'incriminer un logiciel parce qu'on n'en
connaît pas toutes les ficelles... ;)



Je n'ai pas l'impression d'avoir incriminé. Mais je suis parti sur un
autre raisonnement comme indiqué plus haut.


Je ne disais pas ça pour toi, Jacques, mais pour Frédéric qui dit "mais
il faut bien avouer que c'est de l'approximatif à la mode MS..."
Il n'y a rien d'approximatif là dedans...


D'ailleurs si l'on fait ce type de remplacement dans l'éditeur VBA ou
autre environnement de développement le caractère underscore n'est pas
un séparateur de mot ;-)


Tout à fait... Seulement Word, c'est le mot !! ;)))

Bonne soirée,


Merci, à toi aussi :-)

Circé
MVP du mot


C'est officiel? en français dans le texte :-D

http://faqword.free.fr





--
Cordialement,

Jacques.



Avatar
Frédéric Steczycki [AtoutFox]
Bonjour,

Merci pour l'explication (et pour la mise au point <s>).
Etant moi aussi dans l'informatique, l'underscore (tiret bas), les chiffres
et les lettres mis bout à bout représente une expression littérale à part
entière, un "mot". Mais il est vrai que ce n'est pas du "français".
Depuis quand utilise t'on, en français ou dans n'importe quel autre langue,
le tiret bas comme séparateur ou ponctuation?
Concernant l'approximatif, où, dans l'aide de word ou sur le site de MS
trouve t'on l'explication que tu nous as fournie?
Et où trouve t'on le moyen de remplacer, dans un document, une expression
littérale par une autre en faisant abstraction de ce genre de "subtilité
super extra puissante" qu'offre Word?

Je suis un gars relativement primaire :
- Notepad : remplacer remplace ce qu'on lui demande de remplacer.
- Word : peut être mais faut savoir le demander gentillement.

:o)

Fred

"Circé" a écrit dans le message de news:

Bonsoir Jacques,

Il se trouve que Jacques93 a formulé :


Donc, si j'ai bien compris, la macro de Frédéric devient :

Sub Macro1()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
*.Text = "<VOTRE_NOM>"*
.Replacement.Text = "Test"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
*.MatchWholeWord = False*
*.MatchWildcards = True*
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub


Oui, sauf que la ligne ".MatchWholeWord" = False est inutile

La ligne "MatchAllWordForms = False" est inutile aussi d'ailleurs, car
cette propriété ne fonctionne pas pour le français.


Et, si possible, arrêter d'incriminer un logiciel parce qu'on n'en
connaît pas toutes les ficelles... ;)



Je n'ai pas l'impression d'avoir incriminé. Mais je suis parti sur un
autre raisonnement comme indiqué plus haut.


Je ne disais pas ça pour toi, Jacques, mais pour Frédéric qui dit "mais il
faut bien avouer que c'est de l'approximatif à la mode MS..."
Il n'y a rien d'approximatif là dedans...


D'ailleurs si l'on fait ce type de remplacement dans l'éditeur VBA ou
autre environnement de développement le caractère underscore n'est pas un
séparateur de mot ;-)


Tout à fait... Seulement Word, c'est le mot !! ;)))

Bonne soirée,

Circé
MVP du mot
http://faqword.free.fr






Avatar
Geo

Je suis un gars relativement primaire :
- Notepad : remplacer remplace ce qu'on lui demande de remplacer.
- Word : peut être mais faut savoir le demander gentiment.


T'as oublié de citer FoxPro qui n'est pas si primaire que ça. :-)

--
A+

Avatar
Circé
Bonjour Frédéric

Frédéric Steczycki [AtoutFox] a exprimé avec précision :
Bonjour,

Merci pour l'explication (et pour la mise au point <s>).
Etant moi aussi dans l'informatique, l'underscore (tiret bas), les chiffres
et les lettres mis bout à bout représente une expression littérale à part
entière, un "mot". Mais il est vrai que ce n'est pas du "français".
Depuis quand utilise t'on, en français ou dans n'importe quel autre langue,
le tiret bas comme séparateur ou ponctuation?


Etant utilisé comme séparateur, pour éviter l'espace, Word le traite de
cette manière... C'est une option...

Concernant l'approximatif, où, dans l'aide de word ou sur le site de MS
trouve t'on l'explication que tu nous as fournie?


Bah !! En dehors de ma longue expérience en la matière, je ne sais pas
si on trouve ça dans l'aide ou sur le site de MS... Faudrait chercher,
mais je dois dire que j'ai vraiment la flemme ! :D

Et où trouve t'on le moyen de remplacer, dans un document, une expression
littérale par une autre en faisant abstraction de ce genre de "subtilité
super extra puissante" qu'offre Word?


L'utilisation des caractères génériques permettent énormément de choses
comme indiqué dans mon tuto.

Circé
http://faqword.free.fr

Je suis un gars relativement primaire :
- Notepad : remplacer remplace ce qu'on lui demande de remplacer.
- Word : peut être mais faut savoir le demander gentillement.

:o)

Fred

"Circé" a écrit dans le message de news:

Bonsoir Jacques,

Il se trouve que Jacques93 a formulé :


Donc, si j'ai bien compris, la macro de Frédéric devient :

Sub Macro1()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
*.Text = "<VOTRE_NOM>"*
.Replacement.Text = "Test"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
*.MatchWholeWord = False*
*.MatchWildcards = True*
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub


Oui, sauf que la ligne ".MatchWholeWord" = False est inutile

La ligne "MatchAllWordForms = False" est inutile aussi d'ailleurs, car
cette propriété ne fonctionne pas pour le français.


Et, si possible, arrêter d'incriminer un logiciel parce qu'on n'en
connaît pas toutes les ficelles... ;)



Je n'ai pas l'impression d'avoir incriminé. Mais je suis parti sur un
autre raisonnement comme indiqué plus haut.


Je ne disais pas ça pour toi, Jacques, mais pour Frédéric qui dit "mais il
faut bien avouer que c'est de l'approximatif à la mode MS..."
Il n'y a rien d'approximatif là dedans...


D'ailleurs si l'on fait ce type de remplacement dans l'éditeur VBA ou
autre environnement de développement le caractère underscore n'est pas un
séparateur de mot ;-)


Tout à fait... Seulement Word, c'est le mot !! ;)))

Bonne soirée,

Circé
MVP du mot
http://faqword.free.fr