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

VBA et formatage

15 réponses
Avatar
Petit Denis
Bonjour

Voilà l'idée :
remplacer les espaces simples entre un nombre (décimal ou entier) et une
unité (pour éviter les retours à la lignes intempestifs).
Fort de ce que j'ai fait avec un simple rechercher-remplacer, j'ai mis le
tout en macro (un clic sur un petit bouton c'est plus vite fait que resaisir
la ligne de commande).

Donc le code est le suivant :
===
Sub spaceunits()
'
'remplace les espaces simples entre nombre et unités par l'espace insécable
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9]) "
.Replacement.Text = "\1^s"
.Forward = True
.MatchWildcards = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
===

Ça fonctionne bien sauf que...
Si j'ai un chiffre en indice juste après un caractère (lettre en général),
l'espace insécable se met également en indice.
Je voudrais donc que l'espace insécable reste à la bonne taille et à la
bonne "hauteur".

Si ça vous inspire, merci...

--
Petit Denis

10 réponses

1 2
Avatar
Circé
Hello Petit Denis

Tu poses une colle !!!

Je me suis dit qu'il suffirait peut être de relancer une macro en
spécifiant de remplacer les espaces insécables en indice par des
espaces insécables normaux. Mais le chiffre qui précède perd aussi sa
qualité d'indice ! :(

Continuons les recherches... Peut être que Geo aura une idée lumineuse
! ;))

Circé
http://faqword.fr

Il se trouve que Petit Denis a formulé :
Bonjour

Voilà l'idée :
remplacer les espaces simples entre un nombre (décimal ou entier) et une
unité (pour éviter les retours à la lignes intempestifs).
Fort de ce que j'ai fait avec un simple rechercher-remplacer, j'ai mis le
tout en macro (un clic sur un petit bouton c'est plus vite fait que resaisir
la ligne de commande).

Donc le code est le suivant :
== > Sub spaceunits()
'
'remplace les espaces simples entre nombre et unités par l'espace insécable
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9]) "
.Replacement.Text = "1^s"
.Forward = True
.MatchWildcards = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
== >
Ça fonctionne bien sauf que...
Si j'ai un chiffre en indice juste après un caractère (lettre en général),
l'espace insécable se met également en indice.
Je voudrais donc que l'espace insécable reste à la bonne taille et à la bonne
"hauteur".

Si ça vous inspire, merci...


Avatar
Petit Denis
Re... bonsoir
Circé wrote:
Hello Petit Denis

Tu poses une colle !!!


Aïe !
Je me suis dit qu'il suffirait peut être de relancer une macro en
spécifiant de remplacer les espaces insécables en indice par des
espaces insécables normaux. Mais le chiffre qui précède perd aussi sa
qualité d'indice ! :(

Continuons les recherches... Peut être que Geo aura une idée lumineuse
! ;))



Éventuellement, il faudrait exclure les espaces après un chiffre en indice,
mais c'est peut être tout autant une colle.
Mes chiffres en indice ne sont jamais avant une unité et donc on peut y
laisser un(e) espace simple.

Invoquons Saint Geo !!!

--
Petit Denis
Avatar
heureux-oli
Salut,

juste une idée en passant :


*****************************
Sub EspaceInsec()
Dim stChar

Debug.Print ActiveDocument.Range.Characters.Count
For Each stChar In ActiveDocument.Range.Characters
If stChar.Font.Superscript And Asc(stChar) = 32 Then
Debug.Print "OK"; stChar.Font.Superscript; Asc(stChar)
stChar.Font.Superscript = 0
End If
Next stChar
End Sub
********************************************
--
Heureux-oli
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------

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

Hello Petit Denis

Tu poses une colle !!!

Je me suis dit qu'il suffirait peut être de relancer une macro en
spécifiant de remplacer les espaces insécables en indice par des espaces
insécables normaux. Mais le chiffre qui précède perd aussi sa qualité
d'indice ! :(

Continuons les recherches... Peut être que Geo aura une idée lumineuse !
;))

Circé
http://faqword.fr

Il se trouve que Petit Denis a formulé :
Bonjour

Voilà l'idée :
remplacer les espaces simples entre un nombre (décimal ou entier) et une
unité (pour éviter les retours à la lignes intempestifs).
Fort de ce que j'ai fait avec un simple rechercher-remplacer, j'ai mis le
tout en macro (un clic sur un petit bouton c'est plus vite fait que
resaisir la ligne de commande).

Donc le code est le suivant :
== >> Sub spaceunits()
'
'remplace les espaces simples entre nombre et unités par l'espace
insécable
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9]) "
.Replacement.Text = "1^s"
.Forward = True
.MatchWildcards = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
== >>
Ça fonctionne bien sauf que...
Si j'ai un chiffre en indice juste après un caractère (lettre en
général), l'espace insécable se met également en indice.
Je voudrais donc que l'espace insécable reste à la bonne taille et à la
bonne "hauteur".

Si ça vous inspire, merci...






Avatar
Circé
Re...

Petit Denis a couché sur son écran :
)

Éventuellement, il faudrait exclure les espaces après un chiffre en indice,
mais c'est peut être tout autant une colle.



Ben non !!! Ça résout absolument le problème !!! Il suffit de demander
de ne pas faire de modif sur les chiffres qui sont en indice... Une
ligne à ajouter, ce qui donnerait ceci :

Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9]) "
*.Font.Subscript = False*
etc.

Mes chiffres en indice ne sont jamais avant une unité et donc on peut y
laisser un(e) espace simple.

Invoquons Saint Geo !!!



Ça y est !! Il peut aller redormir !!! Vérifie, ça doit marcher...

J'ai pas testé la solution d'Olivier, mais de toutes façons, faudrait
remplacer Superscript par Subscript ;)

Circé
http://faqword.fr
Avatar
Geo
Bonjour

Ça y est !! Il peut aller redormir



Bon ça va, surtout que j'ai du bois à rentrer demain !
Faut dire que vouloir mettre un espace à la bonne hauteur sur une
ligne, Il y a de quoi se poser des questions.
A moins que Petit Denis imprime en blanc sur du papier en couleur.
Encore que ...

--
A+
Avatar
heureux-oli
Salut,

En fait, dans le code, j'avais utiliser SubScript et dans le document en
exposant (moquette trop vieille).
Et je viens de réaliser pourquoi j'avais une discordance entre les deux.

Effectivement pour l'indice j'ai pas utilisé le bon attribut.

Merci Circé.

--
Heureux-oli
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------

"Circé" a écrit dans le message de news:
%
Re...

Petit Denis a couché sur son écran :
)

Éventuellement, il faudrait exclure les espaces après un chiffre en
indice, mais c'est peut être tout autant une colle.



Ben non !!! Ça résout absolument le problème !!! Il suffit de demander de
ne pas faire de modif sur les chiffres qui sont en indice... Une ligne à
ajouter, ce qui donnerait ceci :

Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9]) "
*.Font.Subscript = False*
etc.

Mes chiffres en indice ne sont jamais avant une unité et donc on peut y
laisser un(e) espace simple.

Invoquons Saint Geo !!!



Ça y est !! Il peut aller redormir !!! Vérifie, ça doit marcher...

J'ai pas testé la solution d'Olivier, mais de toutes façons, faudrait
remplacer Superscript par Subscript ;)

Circé
http://faqword.fr




Avatar
Geo
Bonjour

Salut,

juste une idée en passant :


*****************************
Sub EspaceInsec()
Dim stChar

Debug.Print ActiveDocument.Range.Characters.Count
For Each stChar In ActiveDocument.Range.Characters
If stChar.Font.Superscript And Asc(stChar) = 32 Then
Debug.Print "OK"; stChar.Font.Superscript; Asc(stChar)
stChar.Font.Superscript = 0
End If
Next stChar
End Sub
********************************************



Pourquoi 32 ?
j'aurais plutôt mis 160 ou 176 ?

--
A+
Avatar
heureux-oli
Salut Geo

C'est ce que j'avais mis au départ, mais ce n'était pas concluant.
Pour trouver le bon code, j'ai utilisé un paragraphe et contrôlé tous les
caractères, de cette manière, j'étais certain d'avoir le bon.
Et j'ai eu 32.

Presque comme au LOTTO.


--
Heureux-oli
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------

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

Bonjour

Salut,

juste une idée en passant :


*****************************
Sub EspaceInsec()
Dim stChar

Debug.Print ActiveDocument.Range.Characters.Count
For Each stChar In ActiveDocument.Range.Characters
If stChar.Font.Superscript And Asc(stChar) = 32 Then
Debug.Print "OK"; stChar.Font.Superscript; Asc(stChar)
stChar.Font.Superscript = 0
End If
Next stChar
End Sub
********************************************



Pourquoi 32 ?
j'aurais plutôt mis 160 ou 176 ?

--
A+




Avatar
Circé
Hello Geo,

Geo a formulé la demande :
Bonjour

Ça y est !! Il peut aller redormir



Bon ça va, surtout que j'ai du bois à rentrer demain !



Eh oui, le froid revient ! :D)

Faut dire que vouloir mettre un espace à la bonne hauteur sur une ligne, Il y
a de quoi se poser des questions.
A moins que Petit Denis imprime en blanc sur du papier en couleur.



Ah oui !!! Avec la fonctionnalité de la triple buse ?... ;)))

Le problème est surtout qu'un caractère en indice est plus petit, donc,
ça rétrécit son espace !

Circé

Encore que ...


Avatar
Geo
Bonjour

C'est ce que j'avais mis au départ, mais ce n'était pas concluant.
Pour trouver le bon code, j'ai utilisé un paragraphe et contrôlé tous les caractères,
de cette manière, j'étais certain d'avoir le bon.
Et j'ai eu 32.



C'est curieux, mais si ça marche ...

--
A+
1 2