FAQ Word

FAQ WordConsultez toutes les FAQ
Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 15 juin 2021
Sommaire→VBA bis→ParagraphesPour 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.AddSi 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.InsertParagraphBeforeNé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 & "\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 CibleUn 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 iIl 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.InsertParagraphAfterL'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).SelectCe 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.SelectLe 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)) & " " & Selection.Words(1) & " Para " & i
y = Len(Selection.Words(1))
If y = 1 Then Selection.Delete
Next para
End Sub


