Il y a des moments où nous devons copier des données d’un document Word vers un fichier Excel. Nous pouvons le faire très facilement avec une macro dans toutes les versions de bureau. La macro ouvrira un fichier Excel existant / nouveau, copiera le contenu, puis enregistrera et fermera le fichier. Voyons comment cela se fait.

Option Explicit __ Sub OpenAndReadWordDoc ()

Dim tString As String Dim p As Long, r As Long Dim wrdApp As Object, wrdDoc As Object Dim wb As Workbook Dim trange As Variant _Set wb = Workbooks.Add With wb.Worksheets (1) .Range («A1»)

Value = « Contenu du document Word: » .Font.Bold = True .Font.Size = 14 .Offset (1,0) .Select End With_ r = 3 _Set wrdApp = CreateObject (« Word.Application »)

wrdApp.Visible = True Set wrdDoc = wrdApp.Documents.Open (« B: \ Test \ MyNewWordDoc.docx ») _ _Avec wrdDoc Pour p = 1 à .Paragraphs.Count Set trange = .Range (Start: =. Paragraphs (p ) .Range.Start, _ End: =. Paragraphes (p) .Range.End)

tString = trange.Text tString = Left (tString, Len (tString) -1) _ If Instr (1, tString, ”1”)> 0 Then wb.Worksheets (1) .Range (“A” & r) .Value = tString r = r + 1 End If Next p .Close End With wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True End Sub Pour copier le code ci-dessus dans votre fichier, appuyez sur Alt + F11 sur le clavier Activé sur le côté gauche, vous verrez des objets Microsoft Excel Cliquez avec le bouton droit et sélectionnez Insérer Puis cliquez sur Module * Copiez le code dans la fenêtre de code sur la droite Voyons maintenant comment ce code fonctionne – Nous déclarons d’abord les variables dont nous avons besoin –tstring comme un string pour contenir du texte (nous verrons quel texte plus tard). 2 variables «p» et «r» comme compteurs. Ce sont du type «long». Ensuite, nous avons les 2 variables d’objet wrdApp et wrdDoc. wrdApp est l’objet d’application de mot et wrdDoc est l’objet de document Word. Wb est notre variable de classeur pour le nouveau classeur qui est créé dans le code. Si vous ouvrez un classeur existant, vous pouvez lui attribuer cette variable à la place. La dernière variable est le type de variable trange variant qui aura le contenu qui doit être transféré du mot doc vers le fichier Excel.

Set wb = Workbooks.Add Ceci affecte le nouveau classeur à la variable wb. Si vous ne souhaitez pas ajouter de nouveau classeur mais ouvrir un classeur existant, vous pouvez modifier cette ligne comme suit – * Set wb – Workbooks.Open («B: \ Test \ File1.xlsx») _Avec wb.Worksheets ( 1) .Plage («A1»)

Value = “Contenu du document Word:” .Font.Bold = True .Font.Size = 14 .Offset (1,0) .Select End With_ Le With wb.Worksheets (1) .range (“A1”) est un rapide façon de le référencer. Vous n’avez donc pas à le répéter pour chacune des lignes de code entre les instructions With et End with.

Ces lignes de code placent le texte «Contenu du document Word:» avec une police en gras et une taille de police 14 dans la cellule A1 de la feuille de calcul 1 ^ st ^ dans le nouveau classeur. Et puis .Offset (1,0) .Select sélectionne la ligne suivante.

r = 3 La variable «r» reçoit la valeur 3 car il s’agit de la ligne de départ du fichier Excel pour les données à copier à partir du document Word.

Set wrdApp = CreateObject (« Word.Application ») _ Si Word est déjà en cours d’exécution dans votre système, _CreateObject * créera une nouvelle instance de Word. Donc, cette ligne affecte la variable d’objet wrdApp à l’application Word que vous pouvez utiliser plus tard dans le code.

wrdApp.Visible = True L’instance nouvellement créée de Word ne sera pas visible lors de sa création. Pour le rendre visible, vous devez définir wrdApp.Visible = True afin qu’il soit visible.

_Set wrdDoc = wrdApp.Documents.Open (« B: \ Test \ MyNewWordDoc.docx ») _ Nous avons créé la nouvelle instance de l’application Word, mais nous n’avons pas encore ouvert de document Word source. Donc, cette commande ouvrira le document Word. L’objet wrdDoc a été attribué à ce document afin que nous puissions l’utiliser plus tard dans le code.

With wrdDoc… .End With C’est notre boucle “With” qui fonctionnera entièrement avec l’objet wrdDoc. Une fois que vous ouvrez cette boucle, vous n’avez pas à répéter le texte «wrdDoc» dans cette boucle. Vous pouvez commencer directement par le point («.»)

avant tout objet relatif à wrdDoc. Cette boucle se termine par l’instruction End With. Une fois que l’instruction End With a été entrée, vous ne pouvez pas faire référence aux objets après wrdDoc avec juste le «.».

For p = 1 à .Paragraphs.Count Il s’agit de la boucle «For» qui va boucler du 1 ^ st ^ aux derniers paragraphes du document Word. Le fichier de mots qui contient les données comporte 100 lignes d’informations, chacune stockée dans un paragraphe distinct. La boucle incrémentera de 1 à 100 et copiera les paragraphes. Si certaines conditions sont définies, le copier-coller sera basé sur ces conditions.

_Set trange = .Range (Start: =. Paragraphs (p) .Range.Start, End: =. Paragraphs (p) .Range.End) _ Ceci affecte le début et la fin de chaque paragraphe à la plage à mesure que la boucle s’incrémente.

_tString = trange.text tString = Left (tString, len (tString) -1) _ Le texte de trange est d’abord transmis à TString. Ensuite, chaque paragraphe a un caractère de paragraphe à la fin de la phrase. Ceci est supprimé à l’aide de la fonction Gauche. Du côté gauche, tous les caractères sauf le dernier sont stockés dans la variable tString.

Si Instr (1, tString, « 1 »)> 0 Then wb.Worksheets (1) .Range (« A » & r) .Value = tString r = r + 1 End If Cette fonction IF vérifie si le texte de la tString contient le nombre 1. S’il est vrai, il copie le contenu du tString dans la ligne disponible suivante du classeur. «R» avait d’abord une valeur de 3. En utilisant r = r + 1, nous l’incrémentons de 1, de sorte que l’entrée suivante puisse être placée sous l’entrée précédente.

Next p .Close La ligne de code Next p est incrémentée au paragraphe suivant.

.Close ferme le document une fois que tous les paragraphes ont été travaillés. C’est la sortie que nous obtenons dans le fichier Excel –

img1

Vous verrez que seuls les paragraphes qui contiennent le numéro 1 n’importe où dans le numéro sont inclus dans la sortie.

wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True wrdApp.Quit fermera le mot Application. Set wrdDoc = Nothing et Set wrdApp = Nothing libéreront la mémoire occupée par ces 2 variables d’objet et les définiront sur Nothing. wb.Saved = True enregistrera le classeur.

Avec le code ci-dessus, nous pouvons contrôler les données à copier du fichier Word au fichier Excel.

image 48