IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ VBA

FAQ VBAConsultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021 

 
OuvrirSommaireExcelManipuler WORD

Nécessite d'activer la référence "Microsoft Word xx.x Object Library".

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

Set WordApp = CreateObject("Word.Application")     '-- ouvre une session Word
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Add    '-- crée un nouveau document
    WordDoc.SaveAs "C:\monDocument.doc"    '-- enregistre le nouveau doc
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library".

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Open("monDocument.doc", ReadOnly:=True)
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library".
Pour piloter un document Word déjà ouvert , utilisez la fonction getObject :

vba
Sélectionnez
Dim WordDoc As Word.Document

    Set WordDoc = GetObject("monDocument.doc")
    MsgBox WordDoc.Paragraphs.Count
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    Set WordApp = CreateObject("Word.Application")
    Set WordDoc = WordApp.Documents.Add
    WordApp.Visible = True

    With WordDoc.PageSetup
        .LeftMargin = CentimetersToPoints(1)
        .RightMargin = CentimetersToPoints(1)
        .TopMargin = CentimetersToPoints(1.5)
        .BottomMargin = CentimetersToPoints(2)
    End With
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")    'adapter le chemin
    With WordDoc.Sections(1)
        .Headers(wdHeaderFooterPrimary).Range.Text = "Le titre"
        .Headers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter
        .Footers(wdHeaderFooterPrimary).PageNumbers.Add
    End With
Créé le 22 octobre 2006  par 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
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

Nécessite d'activer la référence "Microsoft Word xx.x Object Library".

vba
Sélectionnez
    'Chr(13) & Chr(7)sont des caracteres qui apparaissent par defaut dans les cellules lors de la creation du tableau
    If WordDoc.Tables(1).Columns(1).Cells(1).Range.Text = Chr(13) & Chr(7) Then
        MsgBox "Cellule vide"
    Else
        MsgBox "Cellule non vide"
    End If
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    Set WordApp = CreateObject("word.application")    'Word Session
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")    'Ouverture Document Word
    WordApp.Visible = True
    
    'fusionner les Cells(2,3) à Cells(3,5) dans le premier tableau du document Word
    WordDoc.Tables(1).Cell(Row:=2, Column:=3).Merge _
            mergeTo:=wordDoc.Tables(1).Cell(Row:=3, Column:=5)
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordDoc As Word.Document
Dim WordApp As Word.Application
Dim Wb As Workbook

    Set Wb = Workbooks.Add(1)
    Set WordApp = New Word.Application
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("monDocument.doc", ReadOnly:=True)

    With WordApp
        .Selection.WholeStory
        .Selection.Copy
    End With

    Wb.ActiveSheet.Range("A1").Select
    Wb.ActiveSheet.Paste
    WordApp.Application.Quit
    Application.CutCopyMode = False
    Wb.SaveAs "C:\copieDocument.xls"
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

Les retours à la ligne dans les cellules d'un tableau Word génèrent autant de cellules supplémentaires lors du collage dans Excel. Pour y remédier, cet exemple montre comment importer le premier tableau d'un document Word "C:\monFichier.doc" (déja ouvert), en conservant le format des cellules :

vba
Sélectionnez
Dim WordDoc As Object
Dim i As Integer, j As Integer
Dim Cible As Variant

    Set WordDoc = GetObject("C:\monFichier.doc")
    
    For i = 1 To WordDoc.Tables(1).Rows.Count
        For j = 1 To WordDoc.Tables(1).Columns.Count
            Cible = WordDoc.Tables(1).Columns(j).Cells(i)

            Sheets(1).Cells(i, j) = _
            Application.WorksheetFunction.Substitute(Cible, vbCr, vbLf)
            Sheets(1).Cells(i, j) = _
            Left(Sheets(1).Cells(i, j), Len(Sheets(1).Cells(i, j)) - 1)
        Next j
    Next i
Créé le 22 octobre 2006  par SilkyRoad

Lien : Comment ouvrir un document Word existant ?

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim i As Byte, j As Byte

    Set WordApp = CreateObject("word.application")
    wWrdApp.Visible = False
    Set WordDoc = WordApp.Documents.Open("monFichier.doc")
    'dans 3 tables Word du document , importer 5 valeurs de la premiere colonne
    'importer les données de chaque table dans une feuille différente
    For i = 1 To 3
        For j = 1 To 5
            ActiveWorkbook.Sheets(i).Cells(j, 1) = WordDoc.Tables(i).Columns(1).Cells(j)
        Next j
    Next i
    WordDoc.Close
    WordApp.Quit
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    Set WordApp = CreateObject("word.application")
    WordApp.Visible = False    'Word reste masqué pendant l'opéraion
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")    'ouvre le document Word

    'copies la 3eme ligne de la 1ere table Word
    WordDoc.Tables(1).Rows(3).Range.Copy

    'collage dans Excel
    Range("A1").PasteSpecial xlPasteValues

    WordDoc.Close    'fermeture document Word
    WordApp.Quit    'fermeture session Word
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library"

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    Set WordApp = New Word.Application
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Add

    Range("A1:H10").Copy

    WordApp.Selection.Paste
    WordDoc.Tables(1).AutoFitBehavior wdAutoFitWindow

    Application.CutCopyMode = False
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    Set WordApp = CreateObject("word.application")
    WordApp.Visible = True    'mettre False pour garder Word masqué
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")    'ouvre le document Word

    'Tables(2) correspond au 2eme tableu du document Word
    'transfert la donnée de la cellule A1 dans la 3eme cellule de la 1ere colonne
    WordDoc.Tables(2).Columns(1).Cells(3).Range.Text = Range("A1")

    'transfert la donnée de la cellule A2 dans la 2eme cellule de la 3eme colonne
    WordDoc.Tables(2).Columns(3).Cells(2).Range.Text = Range("A2")

    'WordDoc.Close True 'ferme le document Word en enregistrant les modifications
    'WordApp.Quit 'ferme l'application Word
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

L'exemple ci-dessous permet d'exporter les valeurs des cellules A1 à A3 vers des signets d'un document Word nommé "monfichier.doc"
Les signets positionnés aux endroits de votre choix doivent être nommés "Signet1 , Signet2 et Signet3

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim i As Byte

    Set WordApp = CreateObject("word.application")    'ouvre une session Word
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")    'ouvre le document Word
    WordApp.Visible = False    'Word est masqué pendant l'opération

    For i = 1 To 3
        'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
        WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(i, 1)
    Next i

    WordApp.Visible = True    'affiche le document Word
    'WordDoc.PrintOut 'Pour imprimer le doc obtenu

    'WordDoc.Close True 'ferme le document word en sauvegardant les données
    'WordApp.Quit 'ferme la session Word
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

Dans l'exemple ci-dessous le signet à renseigner doit être nommé "SignetDate"

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.document

    Set WordApp = New Word.Application
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")

    WordDoc.Bookmarks("SignetDate").Range.Text = Format(Now, "dd/mm/yyyy")
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim Fichier As String

    On Error Resume Next

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")    'ouvrir le document Word

    WordDoc.InlineShapes.AddPicture Filename:= _
                                   "C:\Image1.JPG"    'adapter le chemin de l'image à insérer
    On Error GoTo 0

    With WordDoc.InlineShapes(1)    'adapter l'index si d'autres images existantes dans le document
        .Height = 190.75    'changement dimension image insérée : hauteur
        .Width = 254#    'largeur
        .ConvertToShape
    End With

    With WordDoc.Shapes(1)
        .Top = 200    'position verticale de l'image dans le document
        .Left = 150    'position horizontale de l'image dans le document
        .ZOrder msoBringInFrontOfText    'image au premier plan devant le texte
        '.ZOrder msoSendBehindText 'option pour image en arriere plan derriere le texte
    End With

    'WordDoc.Close 'fermer le document Word
    'WordApp.Quit 'fermer l'application Word
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez
Dim WordApp As Word.Application

    Selection.Copy

    Set WordApp = CreateObject("Word.Application")
    On Error Resume Next
    WordApp.Documents.Add
    WordApp.Visible = True

    WordApp.Selection.PasteSpecial DataType:=wdPasteBitmap
    Application.CutCopyMode = False
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

L'exemple ci-dessous insère une nouvelle colonne en 3eme position dans le 2e tableau d'un document Word.
La premiere cellule de cette nouvelle colonne est coloriée en bleu et un texte y est inséré.

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    'le document Word est supposé fermé avant le lancement de la macro
    Set WordApp = CreateObject("Word.Application")    'creation session Word
    WordApp.Visible = False    'pour que word reste masqué pendant l'opération
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")    'ouverture du fichier Word

    'insertion d'une colonne en 3eme position dans le 2eme tableau du document Word
    'colorie en bleu la 1ere cellule dans la colonne insérée
    With WordDoc.Tables(2)
        .Columns.Add BeforeColumn:=WordDoc.Tables(2).Columns(3)
        .Columns(3).Cells(1).Shading.BackgroundPatternColorIndex = wdBlue    'fond de cellule en bleu
        .Columns(3).Cells(1).Range.Text = "le forum dvp.com"    'texte dans la cellule
        .AutoFitBehavior wdAutoFitWindow    ' adapte la dimension du tableau à la feuille
    End With

    WordDoc.Close True    'ferme le document Word en sauvegardant les modifications
    WordApp.Quit    'ferme l'application Word
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

L'exemple ci-dessous insère une image dans la 3e cellule de la 2e colonne du 1er tableau d'un document Word.

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    Set WordApp = CreateObject("word.application")    'ouvrir une session Word
    Set WordDoc = WordApp.Documents.Open("monDocument.doc")    'ouvrir un document
    'insérer une image dans la 3eme Cellule de la 2eme colonne (dans le
    '1er tableau d'un document Word )
    WordDoc.Tables(1).Columns(2).Cells(3).Range.InlineShapes.AddPicture _
            Filename:="C:\image1.wmf", linkToFile:=False, saveWithDocument:=True

    With WordDoc.InlineShapes(WordDoc.InlineShapes.Count)
        .Height = 150    'redimensionne hauteur image
        .Width = 150    'redimensionne largeur image
    End With
    WordApp.Visible = True    'affichier le document Word
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Le document Word doit être ouvert :

vba
Sélectionnez
Dim WordApp As Word.Application
Dim WordDoc As Word.Document

    On Error Resume Next
    Set WordApp = GetObject(, "Word.Application")
    Set WordDoc = WordApp.Documents("monDocument.doc")

    If WordDoc Is Nothing Then
        MsgBox "Le document est fermé"
    Else
        MsgBox WordDoc.MailMerge.DataSource.DataFields("Nom_Champ").Value
    End If
Créé le 22 octobre 2006  par SilkyRoad

Lien : Comment ouvrir un document Word existant ?

Nécessite d'activer la référence "Microsoft Word xx.x Object Library".

vba
Sélectionnez
Dim WordApp As Word.Application

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    
    WordApp.Documents.Open ("C:\monDocument.dot")
    WordApp.Run "laMacro"
Créé le 22 octobre 2006  par SilkyRoad

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 © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.