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 le VBProject 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 !