Comment insérer un tableau Excel dans Word avec VBA
Microsoft Office Microsoft Word Microsoft Microsoft Excel Héros Mot / / April 29, 2020
Dernière mise à jour le
VBA est un outil très puissant que vous pouvez utiliser pour automatiser beaucoup de travail entre plusieurs applications Microsoft Office. Une activité courante que vous pouvez automatiser à l'aide de VBA est l'insertion d'un tableau Excel dans un document Word.
Visual Basic pour Applications (VBA) est un outil très puissant que vous pouvez utiliser pour automatiser beaucoup de travail entre plusieurs applications Microsoft Office. Une activité courante que vous pouvez automatiser à l'aide de VBA est l'insertion d'un tableau Excel dans un document Word.
Vous pouvez procéder de deux manières. La première consiste à automatiser un simple copier-coller d'une plage existante d'Excel dans un nouveau tableau dans un document Word. La seconde consiste à effectuer des calculs dans Excel, à créer un nouveau tableau dans Word et à écrire les résultats dans le tableau.
Vous pourriez essayer de enregistrer une macro pour ce faire, mais les macros vous permettront uniquement d'automatiser les tâches à l'intérieur de Word. Dans cet article, vous apprendrez à écrire du code VBA pour automatiser ces actions entre Excel et Word.
Copiez et collez une plage Excel dans Word avec VBA
Dans les deux exemples, nous allons commencer par un exemple de feuille de calcul Excel. Cet exemple est une liste de bons de commande pour une variété de produits.
Imaginons que vous souhaitiez copier et coller toute la plage de cellules de cette feuille de calcul dans un document Word. Pour ce faire, vous devrez écrire une fonction VBA qui s'exécutera lorsque vous cliquerez sur un bouton "Copier dans Word".
Sélectionner Développeur dans le menu et sélectionnez Insérer dans le groupe Contrôles du ruban. Dans la liste déroulante, sélectionnez le contrôle Button sous ActiveX Controls.
Ensuite, dessinez le bouton de commande sur le côté droit de la feuille. Vous pouvez changer la légende en «Copier dans Word» en cliquant avec le bouton droit sur le bouton et en sélectionnant Propriétés. Modifiez le texte de la légende et vous pouvez utiliser la police pour mettre à jour la taille et le style de la police.
Remarque: Si vous ne voyez pas Développeur dans votre menu Excel, puis ajoutez-le. Sélectionner Fichier, Les options, Personnaliser le rubanet sélectionnez Toutes les commandes dans le menu déroulant de gauche. Déplacer ensuite Développeur dans le volet gauche vers la droite et sélectionnez OK pour terminer.
Écrire le code VBA copier-coller
Vous êtes maintenant prêt à commencer à écrire du code VBA. Pour commencer, double-cliquez sur le nouveau Copier dans Word pour ouvrir la fenêtre de l'éditeur de code.
Vous devriez voir un sous-programme appelé Commandbutton1_Click () comme indiqué ci-dessous.
Vous voudrez copier chaque section de code ci-dessous. Avant de commencer le codage, pour contrôler Word sur votre ordinateur à l'aide de VBA, vous devez activer la bibliothèque de référence Microsoft Word.
Dans l'éditeur de code, sélectionnez Outils dans le menu et sélectionnez Références. Dans la liste des références disponibles, faites défiler vers le bas et activez Bibliothèque d'objets Microsoft Word 16.0.
Sélectionnez OK et vous êtes prêt à commencer le codage. Nous allons parcourir chaque section de code à la fois afin que vous compreniez ce que fait ce code et pourquoi.
Tout d'abord, vous devez créer les variables et les objets qui contiendront la plage et vous permettront de contrôler l'application Word.
Dim tblRange As Excel. Intervalle
Dim WordApp en tant que Word. Application
Dim WordDoc As Word. Document
Dim WordTable As Word. Table
La ligne de code suivante sélectionne une plage spécifique de cellules et l'enregistre dans un objet Plage Excel dans VBA.
Définissez tblRange = ThisWorkbook. Feuilles de calcul ("Feuille1"). Plage ("A2: G44")
Ensuite, vous souhaitez vérifier si l'application Word est déjà ouverte sur l'ordinateur. Pour ce faire, vous pouvez référencer l'application Word à l'aide d'une référence de «classe» spéciale avec la commande VBA GetObject. Si Word n'est pas déjà ouvert, la ligne suivante le lancera à l'aide de la fonction CreateObject. La ligne "On Error Resume Next" empêche toute erreur de la première fonction GetObject (si Word n'est pas déjà ouvert) d'arrêter l'exécution de la ligne suivante dans le programme.
En cas d'erreur Reprendre ensuite
Définissez WordApp = GetObject (class: = "Word. Application")
Si WordApp n'est rien, définissez WordApp = CreateObject (class: = "Word. Application")
Maintenant que l'application Word est lancée, vous voulez la rendre visible à l'utilisateur et l'activer pour l'utiliser.
WordApp. Visible = Vrai
WordApp. Activer
Ensuite, vous souhaitez créer un nouveau document dans l'application Word.
Définissez WordDoc = WordApp. Documents. Ajouter
Enfin, vous allez copier et coller la plage de cellules dans un nouveau tableau du document Word.
tblRange. Copie
WordDoc. Paragraphes (1). PasteExcelTable _
LinkedToExcel: = False, _
WordFormatting: = False, _
RTF: = Faux
Les commutateurs de la fonction ci-dessus insèrent un tableau non lié en utilisant la mise en forme Excel source (pas la mise en forme Word) et sans utiliser le format RTF.
Enfin, pour traiter les plages Excel plus larges que le document, vous devrez ajuster automatiquement le nouveau tableau afin qu'il tienne dans les marges de votre nouveau document Word.
Définissez WordTable = WordDoc. Tables (1)
WordTable. AutoFitBehavior (wdAutoFitWindow)
Et maintenant vous avez terminé! Enregistrez le fichier en tant que fichier Excel activé par macro (extension .xlsm). Fermez l'éditeur, enregistrez à nouveau le fichier Excel d'origine, puis cliquez sur votre bouton de commande pour voir votre code en action!
Écrire des résultats Excel dans un tableau Word avec VBA
Dans cette section suivante, vous allez écrire du code VBA qui effectue des calculs sur les valeurs dans Excel et les écrit dans un tableau dans Word.
Pour cet exemple, nous allons extraire 10 lignes de données, calculer et écrire les résultats dans un tableau dans un document Word. En outre, la table d'origine contiendra quatre colonnes et le code VBA extraira les dix premières lignes de données de cette plage.
Tout comme dans la dernière section, nous allons parcourir chaque section à la fois afin que vous compreniez ce que fait ce code et pourquoi.
Tout d'abord, créez les variables et les objets qui contiendront les données et vous permettront d'écrire dans l'application Word.
Dim tblRange As Excel. Intervalle
Dim WrdRange As Word. Intervalle
Dim WordApp en tant que Word. Application
Dim WordDoc As Word. Document
Dim WordTable As Word. Table
Dim intRows
Dim intColumns
Dim strDate As String
Dim strItem As String
Dim intUnits As Variant
Dim intCost As Variant
Dim intTotal As Variant
Ensuite, définissez le nombre total de colonnes et de lignes que vous souhaitez lire dans la plage Excel.
intNoOfRows = 10
intNoOfColumns = 5
Répétez le même code que la dernière section qui ouvrira Word s'il n'est pas déjà ouvert.
En cas d'erreur Reprendre ensuite
Définissez WordApp = GetObject (class: = "Word. Application")
Si WordApp n'est rien, définissez WordApp = CreateObject (class: = "Word. Application")
WordApp. Visible = Vrai
WordApp. Activer
Définissez WordDoc = WordApp. Documents. Ajouter
Les quatre lignes suivantes créent un tableau à l'intérieur de ce document Word nouvellement ouvert.
Définissez WrdRange = WordDoc. Plage (0, 0)
WordDoc. Les tables. Ajouter WrdRange, intNoOfRows, intNoOfColumns
Définissez WordTable = WordDoc. Tables (1)
WordTable. Les frontières. Enable = True
Enfin, la boucle suivante effectuera ces actions:
- Pour chaque ligne, mettez la date de commande, l'article, les unités et le coût en variables
- Calculer le coût unitaire (vente totale) et le stocker dans une variable
- Pour chaque colonne, écrivez les valeurs dans le tableau Word, y compris la vente totale calculée dans la dernière cellule
- Passez à la ligne suivante et répétez la procédure ci-dessus
Voici à quoi ressemble ce code:
Pour i = 1 à intNoOfRows
Pour j = 1 à intNoOfColumns
Si j = 1 Alors
strDate = tblRange. Cellules (i + 1, j) .Valeur
strItem = tblRange. Cellules (i + 1, j + 1).
intUnits = Val (tblRange. Cellules (i + 1, j + 2) .Valeur)
intCost = Val (tblRange. Cellules (i + 1, j + 3) .Valeur)
intTotal = intUnits * intCost
Fin si
Sélectionnez le cas j
Le cas est = 1
WordTable. Cellule (i, j). Text = strDate
Le cas est = 2
WordTable. Cellule (i, j). Text = strItem
Le cas est = 3
WordTable. Cellule (i, j). Text = intUnits
Le cas est = 4
WordTable. Cellule (i, j). Text = intCost
Le cas est = 5
WordTable. Cellule (i, j). Text = intTotal
Case Else
Fin de sélection
Prochain
Prochain
La fonction «Cellules» de la première partie tire la valeurs de cellule hors d'Excel. Cellules (x, y) signifie qu'il extrait la valeur de la cellule à la ligne x et à la colonne y.
La fonction «Cellule» de la dernière partie écrit dans les cellules du tableau Word, en utilisant les mêmes affectations de ligne et de colonne.
Une fois que vous avez enregistré et exécuté ce code VBA, vous verrez les résultats dans votre document Word nouvellement créé.
Comme vous pouvez le voir, il n'est pas trop compliqué de créer une automatisation utile entre Excel et Word. Il s'agit simplement de comprendre comment fonctionnent les différents «objets» qui peuvent créer et contrôler à la fois les applications Excel et Word sur votre ordinateur.