OVH Cloud OVH Cloud

imposer un nombre de mots x par pages

8 réponses
Avatar
jl.roux3
Bonjour ,

je souhaiterai savoir si l'on peut ecrire une macro permettant de limiter le
nombre de mots par page et si oui comment l'écrire ?

Merci d'avance

8 réponses

Avatar
geo
-----Message d'origine-----
Bonjour ,

je souhaiterai savoir si l'on peut ecrire une macro
permettant de limiter le

nombre de mots par page et si oui comment l'écrire ?


Oui, on peut, mais je ne vois ça qu'a posteriori, pas en
cours de frappe. Par exemple :
Sub MotsParPage()
Dim m
Dim i As Integer
Const Limite As Integer = 100
i = 1
For Each m In ActiveDocument.Words
i = i + 1
If i >= Limite Then
m.Select
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.InsertBreak Type:=wdPageBreak
i = 1
End If
Next
End Sub

Mais il faut enlever tous les sauts de page lors des
modifications, et word ne sait pas faire la différence
entre ceux que tu veux garder en plus de ceux-là.

On peut aussi imaginer d'autres solutions mais ça dépend
exactement de ce que tu veux faire.

A+

Avatar
jl.roux3
Merci pour la solution ...
Ne pourrait-on pas envisager une solution plus simple qui compte les mots
par page et des que la limite est atteinte alors une boite de dialogue
apparaisse pour avertir que la limite des mots est atteinte (mais la aussi
je suppose que cette solution ne peux se faire qu' a posteriori )

P.S.:
en utilisant la macro donnée j'ai remarqué que celle ci me faisait des sauts
de pages meme pour un nombre de mots qui ne dépassait pas la limite ...
peut-être un problème pour compter les mots ou alors ActiveDocument.Words
compte des mots qui ne sont pas des mots ????

"geo" a écrit dans le message de
news:05c301c3a39d$98b94ee0$

-----Message d'origine-----
Bonjour ,

je souhaiterai savoir si l'on peut ecrire une macro
permettant de limiter le

nombre de mots par page et si oui comment l'écrire ?


Oui, on peut, mais je ne vois ça qu'a posteriori, pas en
cours de frappe. Par exemple :
Sub MotsParPage()
Dim m
Dim i As Integer
Const Limite As Integer = 100
i = 1
For Each m In ActiveDocument.Words
i = i + 1
If i >= Limite Then
m.Select
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.InsertBreak Type:=wdPageBreak
i = 1
End If
Next
End Sub

Mais il faut enlever tous les sauts de page lors des
modifications, et word ne sait pas faire la différence
entre ceux que tu veux garder en plus de ceux-là.

On peut aussi imaginer d'autres solutions mais ça dépend
exactement de ce que tu veux faire.

A+

Avatar
geo
Re

-----Message d'origine-----
Merci pour la solution ...
Ne pourrait-on pas envisager une solution plus simple qui
compte les mots

par page et des que la limite est atteinte alors une
boite de dialogue

apparaisse pour avertir que la limite des mots est
atteinte (mais la aussi

je suppose que cette solution ne peux se faire qu' a
posteriori )


A ma connaissance : oui, sinon il faudrait déclencher une
macro de comptage au fur et à mesure de chaque changement
dans le document, le PC ne suivrait pas de toutes manières.

Ca dépend aussi si les pages sont délimitées par des sauts
de page ou des changements de page "naturels" qui
dépendent donc de l'imprimante, des marges, des polices
etc etc.
De toutes manières c'est déclenché à la main.
On peut par exmple faire un tableau avec le nombre de mots
par page.


P.S.:
en utilisant la macro donnée j'ai remarqué que celle ci
me faisait des sauts

de pages meme pour un nombre de mots qui ne dépassait pas
la limite ...

peut-être un problème pour compter les mots ou alors
ActiveDocument.Words

compte des mots qui ne sont pas des mots ????


Il faut voir dans VBA si la définition de words est assez
précise,
sinon on peut vérifier.
en y repensant la conception n'est aps bonne car en
ajoutant des sauts de page on doit perturber le for each.
Copie à revoir.

Avatar
geo
Voici la macro rectifiée :
Il suffit de mettre la limite à 1 pour voir tout ce que
word compte pour un mot, pas triste.

Sub MotsParPage()
Dim d As Integer
Dim i As Integer
Const Limite As Integer = 1000
i = 1
Selection.HomeKey unit:=wdStory
Do
d = Selection.MoveRight(wdWord, 1, 0)
If d = 0 Then Exit Do
' Vérifier ici les valeurs à ne pas compter comme mot
' et dans ce cas aller directement à loop
i = i + 1
If i >= Limite Then
Selection.InsertBreak Type:=wdPageBreak
i = 1
End If
Loop
End Sub
Avatar
Anacoluthe
Bonjour !

"jl.roux3" nous a écrit ...
je souhaiterai savoir si l'on peut ecrire une macro permettant de
limiter le nombre de mots par page et si oui comment l'écrire ?


Signalons juste en passant pour ceux qui sont payés au nombre de mots:
Affichage / Barres d'outils / Statistiques

Mais bon, Geo va nous faire une macro tournant en arrière-plan
qui affiche en permanence le compte des mots de la page en cours
et bloque le clavier dès que le maximum est atteint ;-)

Anacoluthe
« Je compte mes mots »
- Emile ZOLA

Avatar
Geo
Bonsoir Anacoluthe,


Bonjour !

"jl.roux3" nous a écrit ...
je souhaiterai savoir si l'on peut ecrire une macro permettant de
limiter le nombre de mots par page et si oui comment l'écrire ?


Signalons juste en passant pour ceux qui sont payés au nombre de
mots:

Affichage / Barres d'outils / Statistiques

Mais bon, Geo va nous faire une macro tournant en arrière-plan
qui affiche en permanence le compte des mots de la page en cours
et bloque le clavier dès que le maximum est atteint ;-)


C'est ça qu'il faudrait faire :-)
Mais même si on savait, pas sûr que le micro arrive jusqu'à 100 mots
sans surchauffer.
C'est pour ça que j'avais eu l'idée d'ajouter un saut de pages à 100
mots comme ça on était certains du contenu.
Reste la solution de souligner à l'encre rouge les mots en trop dans
les pages.
Et s'il n'y en a pas assez, que faire ? Ah les affres de la page
blanche !
Encore faut-il s'entendre sur ce qu'est un mot, et word a une
définition bien personnelle et bien cachée, je ne l'ai pas trouvée.
Ceci dit on avait déjà travaillé sur le sujet il me semble.

A+


Avatar
Anacoluthe
Bonjour la compagnie !

"Geo" nous a écrit ...
Mais bon, Geo va nous faire une macro tournant en arrière-plan
qui affiche en permanence le compte des mots de la page en cours
et bloque le clavier dès que le maximum est atteint ;-)


C'est ça qu'il faudrait faire :-)
Mais même si on savait, pas sûr que le micro arrive jusqu'à 100 mots
sans surchauffer.


Pour donner un peu de grain à moudre à l'ami Geo : ;-)

La technique la plus simple pour faire une surveillance
en vba est je pense OnTime.

Dans l'exemple suivant, volontairement minimal,
Word va te sortir toutes les minutes un message d'alerte
très énervant si le document contient plus de 100 mots :

Sub SurveilleMoi()
Application.OnTime when:=Now + TimeValue("00:01:00"), _
Name:="CompteLesMots", _
Tolerance:
End Sub

Sub CompteLesMots()
If ActiveDocument.Content.Words.Count > 100 Then
MsgBox Prompt:="Plus de 100 mots", _
Buttons:=vbCritical, Title:="Alerte !"
End If
SurveilleMoi ' et on boucle !
End Sub

A+

Anacoluthe
« Je compte mes mots »
- Emile ZOLA


Avatar
geo
Bonjour

Pas mal l'idée, même si limité à une page.

On pourrait colorier les n premiers mots en bleu, les n+1
à 2n en vert etc...

Amusant à faire.

A+