Word - remplacer une partie de la sélection

Fermé
Chasta - 16 sept. 2019 à 15:20
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 20 sept. 2019 à 14:37
Bonjour,

Je cherche à créer une macro qui met en italique certains éléments dans mon texte. Il s'agit des lettres indiquant une partie d'un texte de loi. C'est-à-dire:

Art. 89, al. 3, lit. a --> le petit "a" doit être mis en italique.

En ce qui concerne l'exemple ci-dessus, j'ai déjà trouvé une solution avec .selection.find:

.Text = "lit. ([a-z][!a-z])"
.Replacement.Text = "lit.^s\1"
.Replacement.Font.Italic = True
.MatchWildcards = True
.Execute Replace:=wdReplaceAll

Suivi du code suivant pour que seule la lettre soit en italique:

.Text = "lit.^s"
.Replacement.Text = "lit.^s"
.Replacement.Font.Italic = False
.Execute Replace:=wdReplaceAll

Mais je coince lorsque qu'il y a plusieurs lettres à mettre en italique:

Art. 89, al. 3, lit. a, b
Art. 89, al. 3, lit. a et b
Art. 89, al. 3, lit. a, b, c
Art. 89, al. 3, lit. a, b et c


Il faudrait que les lettres (a, b, c...) soient en italique, mais que les virgules et les "et" qui les séparent ne le soient pas. J'arrive à tout mettre en italique en utilisant le code précédent et en l'adaptant, mais je n'arrive pas ensuite à enlever l'italique des virgules et des "et". Aussi, comme on ne sait pas combien de lettres sont notées après le "lit.", y a-t-il moyen d'utiliser un code avec des jokers (wildcards) ou faut-il faire des codes différents pour 2, 3... x lettres?

Un grand merci à tous ceux qui pourront m'apporter leurs lumières.
A voir également:

1 réponse

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
17 sept. 2019 à 18:15
Bonjour,

Comment peut-on détecter que le listing des lettres est terminé ?
Les références sont-elles systématiquement entre parenthèses par exemple ?
Au lieu de faire une recherche on peut scanner tous les caractères du document comme ici : https://forum.hardware.fr/hfr/Programmation/VB-VBA-VBS/vb-word-parenthese-sujet_98030_1.htm

A+
0
Merci pour ta réponse et pour ton idée de scanner les caractères du textes.

La référence est dans le corps du texte. Selon moi, il y a donc deux cas de figure :
1- la référence conclut la phrase. On aura donc référence + un signe de ponctuation ou une espace (p. ex.: [...] est l'art. 5, al. 6, lit. c.")
2- la référence ne conclut pas la phrase. On aura donc une lettre + une espace + une suite de lettres (seule exception: "à", p. ex. : "[...] l'art. 3, al 2, lit. a, b, ..., k à [...]".

J'espère que ça t'aide.
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
20 sept. 2019 à 14:37
Bonjour,

C'est surtout toi que ça doit aider...
Mon idée serait de gérer la mise en italique après la chaîne de caractères ", lit.". Pour cesser cette gestion il faudrait détecter la fin de l'énumération.
Dans le premier cas c'est un signe de ponctuation différent de ",".
Dans le deuxième cas... ? Une chaîne de caractères de plus de deux caractères différente de "et" ?

A+
0