| 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.
|