FAQ WordConsultez toutes les FAQ

Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireVBA bisParagraphes

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.

Directement
Sélectionnez

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.

Par l'objet selection
Sélectionnez

 
Selection.InsertParagraph
Selection.InsertParagraphAfter
Selection.InsertParagraphBefore
Créé le 1er juin 2009  par Lebeau Olivier

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"

vba
Sélectionnez

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 Cible

Un autre exemple qui supprime les paragraphes de façon conditionnelle :

vba
Sélectionnez

'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
Créé le 22 octobre 2006  par SilkyRoad

Il s'agit là d'une erreur classique. Vous confondez le paragraphe et l'objet Range le désignant. Prenons un exemple :

 
Sélectionnez
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 :

 
Sélectionnez
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
Créé le 5 février 2004  par bidou

L'utilisation directe de la collection Words sur le paragraphe peut être trompeuse.

 
Sélectionnez
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

 
Sélectionnez
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
Créé le 4 février 2004  par bidou

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.

 
Sélectionnez

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
Créé le 15 mai 2007  par Lebeau Olivier
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.