VBA et formatage

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Circé
Le #18448781
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...


Petit Denis
Le #18449611
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
heureux-oli
Le #18449601
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é"
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...






Circé
Le #18451011
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
Geo
Le #18450991
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+
heureux-oli
Le #18451301
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é" %
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




Geo
Le #18451291
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+
heureux-oli
Le #18451471
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"
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+




Circé
Le #18451461
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 ...


Geo
Le #18453241
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+
Publicité
Poster une réponse
Anonyme