OVH Cloud OVH Cloud

Remplacement de caractères et vba

5 réponses
Avatar
Lasperches Denis
Bonjour,

Je me suis lancé dans la création d'une macro pour revoir la typographie des
caractères de ponctuations et des espaces.

Je recherche les espaces oridinaires suivi d'un signe de ponctuation double
(! : ; ?) et je remplace les espaces par des espaces insécables. Là ça
marche. J'ai juste rajouté quelques petites choses qui marchent.
Le trop d'espaces fonctionne aussi.
Je me heurte à un problème : quand il n'y a pas d'espace avant les signes de
ponctuations doubles, ils ne sont pas traités j'ai essayé en rajoutant pour
le ? :

With Selection.Find
.Text = "^??"
.Replacement.Text = "^? ?"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

Mais ça ne marche pas
D'autre part ma macro est un peu jouflue, et comme je n'y entends pas grand
chose si un AMIS pouvait me la mettre eu régime, merci de votre aide.

Petit Denis

Je place en suite la macro complète actuelle :
Sub Remplacement()
'
' Remplacement Macro
' Macro enregistrée le 20/01/2004 par Lasperches Denis
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = " ?"
.Replacement.Text = "^s?"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " !"
.Replacement.Text = "^s!"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " :"
.Replacement.Text = "^s:"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ;"
.Replacement.Text = "^s;"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ,"
.Replacement.Text = ","
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ."
.Replacement.Text = "."
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " )"
.Replacement.Text = ")"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "( "
.Replacement.Text = "("
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " "
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

5 réponses

Avatar
Geo
Bonjour Denis,


Bonjour,

Je me suis lancé dans la création d'une macro pour revoir la
typographie des caractères de ponctuations et des espaces.

Je recherche les espaces oridinaires suivi d'un signe de ponctuation
double (! : ; ?) et je remplace les espaces par des espaces
insécables. Là ça marche. J'ai juste rajouté quelques petites choses
qui marchent.
Le trop d'espaces fonctionne aussi.
Je me heurte à un problème : quand il n'y a pas d'espace avant les
signes de ponctuations doubles, ils ne sont pas traités


Puisque tu sais gérer l'abondance, le plus simple c'est d'en mettre
un,
même quand il y en a déjà un ou plusieurs.


j'ai essayé en rajoutant pour le ? :
[...]


D'autre part ma macro est un peu jouflue, et comme je n'y entends
pas

grand chose si un AMIS pouvait me la mettre eu régime, merci de
votre

aide.


Je n'aurais pas la prétention de corriger ta copie :-)
c'est vrai que l'aide n'est pas du tout explicite sur les valeurs
prise par défaut.
Mais bon ça te donne l'impression d'avoir écrit une grande macro,
tellement qu'elle a déclenché mon filtre anti messages long.


--

A+

Avatar
Anacoluthe
Bonjour !

Utilise les caractères génériques :

With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "(?)?"
.Replacement.Text = "1^s?"
.Wrap = wdFindContinue
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With

Outre des options False inutiles, il est possible
de simplifier la bigmacro finale en groupant plusieurs
'passes' en une seule (rechercher caractère ! ou ?
ou : ou ; etc ) mais bon, si ça marche ainsi...

Anacoluthe
« Ne perds jamais ton ignorance,
tu ne pourras pas la remplacer. »
- Erich Maria REMARQUE


'Lasperches Denis' nous a écrit ...
Bonjour,

Je me suis lancé dans la création d'une macro pour revoir la typographie des
caractères de ponctuations et des espaces.

Je recherche les espaces oridinaires suivi d'un signe de ponctuation double
(! : ; ?) et je remplace les espaces par des espaces insécables. Là ça
marche. J'ai juste rajouté quelques petites choses qui marchent.
Le trop d'espaces fonctionne aussi.
Je me heurte à un problème : quand il n'y a pas d'espace avant les signes de
ponctuations doubles, ils ne sont pas traités j'ai essayé en rajoutant pour
le ? :

With Selection.Find
.Text = "^??"
.Replacement.Text = "^? ?"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

Mais ça ne marche pas
D'autre part ma macro est un peu jouflue, et comme je n'y entends pas grand
chose si un AMIS pouvait me la mettre eu régime, merci de votre aide.

Petit Denis

Je place en suite la macro complète actuelle :
Sub Remplacement()
'
' Remplacement Macro
' Macro enregistrée le 20/01/2004 par Lasperches Denis
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = " ?"
.Replacement.Text = "^s?"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " !"
.Replacement.Text = "^s!"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " :"
.Replacement.Text = "^s:"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ;"
.Replacement.Text = "^s;"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ,"
.Replacement.Text = ","
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ."
.Replacement.Text = "."
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " )"
.Replacement.Text = ")"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "( "
.Replacement.Text = "("
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " "
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub



Avatar
Lasperches Denis
Bonsoir
Anacoluthe wrote:
Bonjour !

Utilise les caractères génériques :

With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "(?)?"
.Replacement.Text = "1^s?"
.Wrap = wdFindContinue
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With


Donc si je pige, il faut que je refasse le même type de bloc pour toutes les
marques de ponctuations doubles ?

Merci de cette rapidité

Petit Denis

Avatar
J Laroche
Lasperches Denis wrote on 2004/01/21 10:56:

Bonjour,

Je me suis lancé dans la création d'une macro pour revoir la typographie des
caractères de ponctuations et des espaces.

Je recherche les espaces oridinaires suivi d'un signe de ponctuation double
(! : ; ?) et je remplace les espaces par des espaces insécables. Là ça
marche. J'ai juste rajouté quelques petites choses qui marchent.
Le trop d'espaces fonctionne aussi.
Je me heurte à un problème : quand il n'y a pas d'espace avant les signes de
ponctuations doubles, ils ne sont pas traités j'ai essayé en rajoutant pour
le ? :

With Selection.Find
.Text = "^??"
.Replacement.Text = "^? ?"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

Mais ça ne marche pas
D'autre part ma macro est un peu jouflue, et comme je n'y entends pas grand
chose si un AMIS pouvait me la mettre eu régime, merci de votre aide.

Petit Denis

Je place en suite la macro complète actuelle :
Sub Remplacement()
'
' Remplacement Macro
' Macro enregistrée le 20/01/2004 par Lasperches Denis
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = " ?"
.Replacement.Text = "^s?"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " !"
.Replacement.Text = "^s!"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " :"
.Replacement.Text = "^s:"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ;"
.Replacement.Text = "^s;"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ,"
.Replacement.Text = ","
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ."
.Replacement.Text = "."
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " )"
.Replacement.Text = ")"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "( "
.Replacement.Text = "("
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " "
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub



Ceci fonctionne sur le Mac. La clé est probablement .MatchWildcards = True.
Je ne sais pas si les «wildcards» sont les mêmes sur Mac et PC, peut-être
peux-tu garder les tiens, sinon essaie les miens.


With Selection.Find
.Text = "([! ])?"
.Replacement.Text = "1 ?"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll


JL
Mac OS X 10.3.2, Office v.X 10.1.5

Avatar
Geo
Bonjour Denis,


Donc si je pige, il faut que je refasse le même type de bloc pour
toutes les marques de ponctuations doubles ?


C'est le nombre de lignes qui t'embête ?
Je crois qu'on peut mettre plusieurs commandes sur la même ligne
séparées par un ; je crois, mais j'ai pas vérifié
On peut aussi faire une boucle.


--

A+