FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les macros VBA→piloter d'autres applications depuis Excel→Piloter Word- Comment vérifier si un document Word est déjà ouvert ?
- Comment écrire et lire dans un champ Word ?
- Comment passer un paramètre d'Excel dans une Variable Word ?
- Comment extraire tous les titres de paragraphes d'un document Word ?
- Comment transférer le contenu d'une Requète ADO vers une table d'un document Word ?
- Comment effectuer une recherche dans un document Word ?
- Comment importer les donnés d'un tableau Word vers une feuille de calcul ?
La procédure vérifie que le fichier Word 'monFichier.doc' est ouvert.
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 SubSub 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
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".
'------------------------
'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
'------------------------'------------------------
'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
'------------------------
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.
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 SubLa procédure se connecte à une base Access, effectue une requête dans une table et affiche le résultat dans un nouveau document Word.
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 SubCette 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.
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 SubLe code ci-dessous ouvre le document Word puis boucle sur toutes les cellules du premier Tableau dans le document Word.
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 SubUne autre possibilité qui utilise la méthode Copy.
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


