FAQ Word
FAQ WordConsultez toutes les FAQ
Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 15 juin 2021
Pour ajouter un paragraphe dans un document, vous avez plusieurs solutions.
Première solution, on ajoute un paragraphe à la collection des paragraphes. Avec cette solution, le paragraphe est ajouté en fin de document.
ActiveDocument.Paragraphs.Add
Si vous préférez travailler avec l'objet sélection, le nouveau paragraphe est ajouté par rapport au point d'insertion.
Selection.InsertParagraph
Selection.InsertParagraphAfter
Selection.InsertParagraphBefore
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
L'exemple ci-dessous montre comment boucler sur les paragraphes d'un document Word et les supprimer s'ils débutent par le mot "Test"
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Dim
Cible As
Paragraph
Set
WordApp =
New
Word.Application
WordApp.Visible
=
True
Set
WordDoc =
WordApp.Documents.Open
(
ThisWorkbook.Path
&
amp; "\Doc1.doc"
)
WordDoc.Bookmarks
(
"\StartOfDoc"
).Select
For
Each
Cible In
WordDoc.Paragraphs
Cible.Range.Select
If
Trim
(
Cible.Range.Words
(
1
)) =
"Test"
Then
Cible.Range.Delete
Next
Cible
Un autre exemple qui supprime les paragraphes de façon conditionnelle :
'boucle sur les 3 premiers paragraphes du document Word :
'si la cellule A1<>1 alors suppression du paragraphe 1
'si la cellule A2<>1 alors suppression du paragraphe 2
'si la cellule A3<>1 alors suppression du paragraphe 3
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Dim
i As
Integer
Set
WordApp =
CreateObject
(
"Word.Application"
)
WordApp.Visible
=
True
Set
WordDoc =
WordApp.Documents.Open
(
"C:\monDocument.doc"
)
For
i =
3
To
1
Step
-
1
If
Cells
(
i, 1
) <>
1
Then
_
WordDoc.Paragraphs.Item
(
i).Range.Delete
Next
i
Il s'agit là d'une erreur classique. Vous confondez le paragraphe et l'objet Range le désignant. Prenons un exemple :
Dim
objDoc As
Document, objRange As
Range
Set
objDoc =
Application.Documents.Open
(
"c:\jmarc\tuto.doc"
)
Set
objRange =
objDoc.Paragraphs
(
8
).Range
objRange.Text
=
"Ceci est un nouveau paragraphe"
Ma phrase va s'insérer comme la première phrase du paragraphe suivant, car la marque de paragraphe est inclue dans l'objet Range. La syntaxe correcte est :
Dim
objDoc As
Document, objRange As
Range
Set
objDoc =
Application.Documents.Open
(
"c:\jmarc\tuto.doc"
)
Set
objRange =
objDoc.Paragraphs
(
8
).Range
objRange.Text
=
"Ceci est un nouveau paragraphe"
objRange.InsertParagraphAfter
L'utilisation directe de la collection Words sur le paragraphe peut être trompeuse.
Dim
objDoc As
Document, objRange As
Range
Set
objDoc =
Application.Documents.Open
(
"c:\jmarc\tuto.doc"
)
Set
objRange =
objDoc.Paragraphs
(
8
).Range
objRange.Words
(
objRange.Words.Count
).Select
Ce code va sélectionner le retour chariot du paragraphe qui stricto sensu est le dernier mot du paragraphe. Accessoirement, l'utilisation de count-1 ne serait pas meilleure puisque selon que la phrase est un point ou non, celui-ci serait sélectionné. Il faut donc faire une vérification arrière
Dim
objDoc As
Document, objRange As
Range
Set
objDoc =
Application.Documents.Open
(
"c:\jmarc\tuto.doc"
)
Set
objRange =
objDoc.Paragraphs
(
8
).Range.Sentences
(
objDoc.Paragraphs
(
8
).Range.Sentences.Count
)
Set
objRange =
objRange.Words.Last
Do
Set
objRange =
objRange.Previous
(
wdWord, 1
)
Loop
While
StrComp
(
objRange.Text
, vbCrLf
, vbBinaryCompare) =
0
Or
StrComp
(
objRange.Text
, "."
, vbBinaryCompare) =
0
objRange.Select
Le principe est de parcourir tous les paragraphes.
Mesurer la longueur du premier mot.
Si elle est égale à 1, c'est que la ligne est vide, on la sélectionne, et on la supprime.
Public
Sub
sautdeligne
(
)
Dim
para As
Paragraph
Dim
i As
Integer
Dim
y As
Integer
i =
0
For
Each
para In
ActiveDocument.Paragraphs
i =
i +
1
para.Range.Select
Debug.Print
Len
(
Selection.Words
(
1
)) &
amp; " "
&
amp; Selection.Words
(
1
) &
amp; " Para "
&
amp; i
y =
Len
(
Selection.Words
(
1
))
If
y =
1
Then
Selection.Delete
Next
para
End
Sub