Extraction du Code VBA des Documents Word 2007 : Un Guide Complet
Lorsque vous travaillez avec des documents Word 2007, il se peut que vous vous retrouviez dans une situation où vous devez extraire du code VBA (Visual Basic for Applications) d’un fichier .docm
de manière programmée. Un scénario courant pourrait impliquer le désir de réutiliser ou de modifier ce code dans d’autres documents ou applications. Voici un guide complet pour vous aider dans ce processus.
Le Problème : Extraction du Code VBA
Vous êtes peut-être à l’aise pour insérer et supprimer du code dans un document Word, mais extraire le véritable code VBA dans un format utilisable peut être délicat. La bonne nouvelle est qu’il est en effet possible d’accomplir cette tâche, et ce guide vous expliquera les étapes nécessaires.
Solution Étape par Étape
1. Configuration de Votre Environnement
Avant de pouvoir extraire le code VBA, vous devez vous assurer que votre environnement est correctement configuré :
-
Ajouter une Référence : Assurez-vous d’ajouter une référence à Microsoft Visual Basic for Applications Extensibility 5.3. Cela est essentiel pour interagir avec des composants VBA dans vos documents Word.
-
Activer l’Accès au Modèle d’Objet VBA : Accédez au Centre de gestion de la confidentialité dans les options Word et activez l’accès au modèle d’objet VBA. Cela est crucial pour que votre application interagisse avec le projet VBA de Word.
2. Extraction du Code
Maintenant, plongeons dans le code qui vous permet d’extraire le code VBA. Voici une implémentation en C# pour extraire toutes les macros d’un fichier .docm
.
using Microsoft.Office.Interop.Word;
using Microsoft.Vbe.Interop;
using System.Collections.Generic;
public List<string> GetMacrosFromDoc()
{
Document doc = GetWordDoc(@"C:\Temp\test.docm");
List<string> macros = new List<string>();
VBProject prj;
CodeModule code;
string composedFile;
prj = doc.VBProject;
foreach (VBComponent comp in prj.VBComponents)
{
code = comp.CodeModule;
// Ajouter le nom du module de code
composedFile = comp.Name + Environment.NewLine;
// Boucler à travers les lignes du module de code
for (int i = 0; i < code.CountOfLines; i++)
{
composedFile += code.get_Lines(i + 1, 1) + Environment.NewLine;
}
// Stocker la macro dans la liste
macros.Add(composedFile);
}
CloseDoc(doc);
return macros;
}
3. Comprendre le Code
-
Initialisation de la Liste : Le code initialise une liste pour contenir les macros extraites.
-
Accès au Document : La méthode
GetWordDoc
est utilisée pour accéder à un document Word spécifique. -
Boucle à Travers les Composants : Le code parcourt chaque
VBComponent
dans leVBProject
du document, collectant les lignes de code. -
Stockage du Code : Il concatène le nom de chaque composant et ses lignes, et les stocke dans une liste pour une utilisation ultérieure.
4. Affichage du Code Extrait
Vous voudrez peut-être afficher le code extrait ou le stocker pour une utilisation future. Vous pouvez utiliser des boîtes de message ou l’écrire dans un nouveau document, en fonction de la manière dont vous prévoyez d’utiliser le code extrait.
Sub GetCode()
Dim prj As VBProject
Dim comp As VBComponent
Dim code As CodeModule
Dim composedFile As String
Dim i As Integer
Set prj = ThisDocument.VBProject
For Each comp In prj.VBComponents
Set code = comp.CodeModule
composedFile = comp.Name & vbNewLine
For i = 1 To code.CountOfLines
composedFile = composedFile & code.Lines(i, 1) & vbNewLine
Next
MsgBox composedFile
Next
End Sub
Cette implémentation en VBA reflète essentiellement la logique C# mais s’exécute directement dans un document Word.
Conclusion
L’extraction de code VBA des documents Word 2007 peut sembler décourageante au début, mais avec les bonnes étapes, c’est tout à fait gérable. En suivant les étapes décrites ci-dessus, vous pouvez accéder efficacement et réutiliser des macros VBA selon vos besoins. N’oubliez jamais de vous assurer que votre environnement de développement est correctement configuré, et n’hésitez pas à explorer davantage les capacités à la fois du Modèle d’Objet Word et de VBA lui-même.
Si vous avez d’autres questions ou avez besoin de plus d’aide, n’hésitez pas à nous contacter !