Présentation
Code généré suite d'une demande d'une utilisatrice du forum.
Objectif : Couper le texte environ tous les 125 mots, en ajoutant une fin de paragraphe à la fin de la phrase correspondante.
J’ai ainsi découvert que Word comptait les mots de manières étranges !
Avec ce texte « L’amour des en-têtes ! » on a :
- 4 mots via l’interface ! ( L’amour / des / en-têtes / ! )
- 5 mots en VBA ! ( L’amour / des / en / – / têtes / ! )
Le code
Sub InsereFinParagraphe()
Dim lgCptMots As Long
Dim rng As Range ' Flag pour mémorisation de l'état
Dim boSuivi As Boolean
Const nbMotsAvantFinParagraphe As Long = 125 ' Définir le nombre mini de mots entre chaque fin de paragraphe
' Désactiver le suivi des modifications pour améliorer les performances
Application.ScreenUpdating = False
boSuivi = ActiveDocument.TrackRevisions ' Mémorisation de l'état
ActiveDocument.TrackRevisions = False
Set rng = ActiveDocument.Words(1)
Do While rng.End < ActiveDocument.Content.End
rng.MoveEnd wdWord, 1 'On se décale d'un "pseudo" mot
' Test si c'est un vrai mot (pas - ou ? ou ! ou RC...)
If Len(Trim(rng.Words.Last)) > 1 Or rng.Words.Last = "à" Or rng.Words.Last = "a" Or rng.Words.Last = "ô" Then
' Trim pour les cas comme ". " et "?"...
lgCptMots = lgCptMots + 1
End If
If lgCptMots >= nbMotsAvantFinParagraphe Then
rng.MoveEnd wdSentence, 1
rng.InsertParagraphAfter
lgCptMots = 0
End If
Loop
' Rétablissement de l'état du suivi des modifications et rafraîchir l'affichage
ActiveDocument.TrackRevisions = boSuivi
Application.ScreenUpdating = True
End Sub
Merci pour votre attention bienveillante