FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- 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
Sub
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
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
Sub
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.
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
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.
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
Le 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
Sub
Une 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