| | auteur : SilkyRoad |
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 |
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 |
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
|
|
| | auteur : bidou | 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
|
|
| | auteur : bidou | 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
|
|
| | auteur : Lebeau Olivier | 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)) & " " & Selection.Words(1) & " Para " & i
y = Len(Selection.Words(1))
If y = 1 Then Selection.Delete
Next para
End Sub
|
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2008
Developpez LLC. Tout 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'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|