FAQ ExcelConsultez toutes les FAQ

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

 
OuvrirSommaireLes macros VBApiloter d'autres applications depuis ExcelPiloter Word

La procédure vérifie que le fichier Word 'monFichier.doc' est ouvert.

Vba
Sélectionnez

Sub ControleSiDocumentWordOuvert()
    Dim Appli As Word.Application
    Dim WordDoc As Word.Document
 
    'nécéssite d'activer la reference Microsoft word xx.x 0bject Library
    On Error Resume Next
    Set Appli = GetObject(, "Word.Application")
    Set WordDoc = Appli.Documents("C:\Documents and Settings\dossier\monFichier.doc")
    On Error GoTo 0
 
    If WordDoc Is Nothing Then
        MsgBox "Le document est fermé"
        Else
        MsgBox "Le document est ouvert"
        'WordDoc.Close 'fermeture application Word
    End If
End Sub
Créé le 2 octobre 2007  par SilkyRoad
Vba
Sélectionnez

Sub Donnees_ChampWord()
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
 
    'ouvre session word
    Set WordApp = New Word.Application
    'ouvre du document Word
    Set WordDoc = WordApp.Documents.Open("C:\monFichier.doc")
    'word est masqué pendant l'opération
    WordApp.Visible = False
 
 
    'Fields(1) : premier champ du document Word
    'Insertion du contenu de la cellule A1 dans le champ.
    WordDoc.Fields(1).Result.Text = Range("A1")
 
    'Si le champ est dans un entête, utilisez:
    'WordDoc.Sections(1).Headers(wdHeaderFooterPrimary).Range.Fields(1).Result.Text
 
    'Récupère le contenu du champ
    MsgBox WordDoc.Fields(1).Result.Text
 
    'Ferme le document word en sauvegardant les modifications
    WordDoc.Close True
    'ferme la session Word
    WordApp.Quit
End Sub
Créé le 5 décembre 2007  par SilkyRoad

Cet exemple ouvre un document depuis Excel et déclenche la macro "NomMacro" contenue dans ce fichier Word.
La procédure Word "NomMacro" doit impérativement être placée dans le module objet ThisDocument pour que la variable Excel "monParametreVB" soit passée à l'argument "maVariableWord".

Vba
Sélectionnez

'------------------------
'Procédure Excel:
'nécessite d'activer la référence "Microsoft Word xx.x Object Library"
'
Private Sub CommandButton1_Click()
    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim monParametreVB As String
 
    Set wordApp = New Word.Application
    wordApp.Visible = True
    'ouverture du document Word
    Set wordDoc = wordApp.Documents.Open("C:\monDocument.doc")
 
    monParametreVB = "azerty"
    'déclenchement de la macro Word
    'Remarque : la macro Word doit etre placée au niveau de ThisDocument
    wordDoc.NomMacro monParametreVB
End Sub
'------------------------
Vba
Sélectionnez

'------------------------
'L'exemple de procédure Word à placer au niveau du module objet "ThisDocument".
 
Option Explicit
 
Sub NomMacro(maVariableWord As String)
    ThisDocument.Range.Text = maVariableWord
End Sub
'------------------------
Créé le 5 décembre 2007  par Ouskelnor, SilkyRoad

Cet exemple permet de récupérer l'arborescence des paragraphes d'un document Word.
Chaque paragraphe est supposé débuter par une numérotation.

Vous devez préalablement activer la référence "Microsoft Word xx.x Object Library":
Dans l'éditeur de macros,
Menu Outils
Références
Cochez la ligne "Microsoft Word xx.x Object Library"
Cliquez sur le bouton OK pour valider.

Vba
Sélectionnez

Sub boucleParagraphesWord()
    'necessite d'activer la reference
        '"Microsoft Word xx.x Object Library"
    Dim appWrd As Word.Application
    Dim docWord As Word.Document
    Dim Paragraphe As Paragraph
    Dim i As Integer
 
    Set appWrd = CreateObject("Word.Application")
    appWrd.Visible = True
    Set docWord = appWrd.Documents.Open("C:\monDocument.doc")
 
    For Each Paragraphe In docWord.Paragraphs
        If Paragraphe.Range.ListFormat.ListValue <> 0 Then
            i = i + 1
            Cells(i, Paragraphe.Range.ListFormat.ListLevelNumber) = _
                Paragraphe.Range.ListFormat.ListString
            Cells(i, Paragraphe.Range.ListFormat.ListLevelNumber + 1) = _
                Paragraphe.Range.Sentences(1).Text
        End If
    Next
 
End Sub
Créé le 20 septembre 2008  par SilkyRoad

La procédure se connecte à une base Access, effectue une requête dans une table et affiche le résultat dans un nouveau document Word.

Vba
Sélectionnez

Sub TransfertRequete_Word()
    'Nécessite d'activer les références
        'Microsoft Word xx.x Object Library
        'et
        'Microsoft ActiveX Data Objects 2.x Library
 
    Dim AppWord As Word.Application
    Dim DocWord As Word.Document
    Dim RgWord As Word.Range
    Dim Cn As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim TabTemp As String
    Dim Fichier As String, Entete As String
    Dim i As Integer
 
    Fichier = "C:\Documents and Settings\mimi\dossier\general\excel\dataBase.mdb"
 
    Set AppWord = CreateObject("Word.Application")
    AppWord.Visible = True
 
    'Crée un nouveau document Word
    Set DocWord = AppWord.Documents.Add
    Set RgWord = DocWord.Range
 
    Set Cn = CreateObject("ADODB.Connection")
    With Cn
        ' Définition du fournisseur OleDB pour la connexion
        .Provider = "Microsoft.JET.OLEDB.4.0"
        ' Ouverture d'une connexion vers la base
        .Open Fichier
    End With
 
    'Crée la connection ADO
    'Set Cn = CreateObject("ADODB.Connection")
    'Ouvre la connection vers la base e données
    'Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
        Fichier & ";Persist Security Info=False"
    'Exécute la requetre
    Set Rst = Cn.Execute("SELECT * FROM Table1")
 
    'GetString(adClipString, -1, vbTab)
        'adClipString : format des données
        '-1 : nombre de lignes
        'vbTab : séparateur de colonnes
        'vbCrLf : séparateur de lignes
    TabTemp = Rst.GetString(adClipString, -1, vbTab, vbCrLf)
 
    'Récupère les  entêtes
    For i = 0 To Rst.Fields.Count - 1
        If i = 0 Then
            Entete = Rst.Fields(i).Name
            Else
            Entete = Entete & vbTab & Rst.Fields(i).Name
        End If
    Next i
 
    'Regroupe l'entête et le tableau TabTemp
    TabTemp = Entete & vbCrLf & TabTemp
 
    'Insère les données dans le document Word
    RgWord.Text = TabTemp
    'Convertit les données importés en table
    'et formate le tableau
    RgWord.ConvertToTable vbTab, , , , wdTableFormatColorful2
 
    Rst.Close
    Set Rst = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub
Créé le 20 septembre 2008  par SilkyRoad

Cette macro ouvre un document Word et recherche une chaîne de caractères (référence client). Si les mots sont trouvés, la procédure extrait le mot suivant.

Vba
Sélectionnez

Dim Cible As String
Dim AppWord As word.Application
Dim DocWord As word.Document
Dim CollWord As word.Words
Dim x As Long
 
Cible = "C:\dossier\nomfichier.doc"
 
'Ouvre une instance Word
Set AppWord = New word.Application
'Indiquez False pour garder l'application masquée
AppWord.Visible = True
 
'Ouvre le document Word
Set DocWord = AppWord.Documents.Open(Cible)
Set CollWord = DocWord.Content.Words
 
'Boucle sur les mots du document
For x = 1 To CollWord.Count - 2
    If InStr(1, CollWord(x) & CollWord(x + 1), _
        "référence client") > 0 Then MsgBox CollWord(x + 2)
Next
 
'DocWord.Close True
'Set DocWord = Nothing
'AppWord.Quit
'Set AppWord = Nothing
End Sub
 
Créé le 18 novembre 2008  par SilkyRoad

Le code ci-dessous ouvre le document Word puis boucle sur toutes les cellules du premier Tableau dans le document Word.

Vba
Sélectionnez

Sub importTableWord_VersExcel()
'Nécessite d'activer la référence:
    'Microsoft Word xx.x Object Library
 
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim Tableau As Word.Table
Dim i As Integer, j As Integer
 
'Création instance Word
Set WordApp = New Word.Application
'Masque Word pendant l'opération
WordApp.Visible = False
 
'Ouvre le document Word
Set WordDoc = WordApp.Documents.Open("C:\NomDocument.doc")
 
'Représente le premier tableau dans le document
Set Tableau = WordDoc.Tables(1)
 
'Boucle sur les colonnes du tableau
For i = 1 To Tableau.Columns.Count
    'Boucle sur les cellules de claque colonne
    For j = 1 To Tableau.Columns(i).Cells.Count
        'Importe les données du tableau dans la feuille active
        ActiveSheet.Cells(j, i) = Tableau.Columns(i).Cells(j)
    Next j
Next i
 
'Ferme le document Word
WordDoc.Close False
'Ferme l'instance Word
WordApp.Quit
End Sub




Une autre possibilité qui utilise la méthode Copy.

Vba
Sélectionnez

Sub copieTableauWordVersExcel()
    'nécessite d'activer la référence
        'Microsoft Word xx.x Object Library
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim Fichier As String
 
    'le document Word est supposé fermé avant le lancement de la macro
    Fichier = "C:\NomDocument.doc"
    'creation session Word
    Set WordApp = New Word.Application
    'pour que word reste masqué pendant l'opération
    WordApp.Visible = False
    'ouverture du fichier Word
    Set WordDoc = WordApp.Documents.Open(Fichier)
 
    'copie le premier tableau Word
    WordDoc.Tables(1).Range.Copy
 
    Range("A1").Select
    'collage des données dans Excel
    ActiveSheet.Paste
 
    'ferme le document Word sans sauvegarde
    WordDoc.Close False
    'ferme l'application Word
    WordApp.Quit
End Sub
Créé le 19 février 2009  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 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.