Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

C++

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > MS Office > Word > Gestion des macros
        Comment désactiver une macro à l'ouverture Word ?
        Comment créer temporairement une macro et l'exécuter ?
        Comment lancer une macro dans Word ?
        Comment importer une macro dans un document Word ?
        Comment détruire un module contenant une macro VB ?



Comment désactiver une macro à l'ouverture Word ?
Créé le 10/12/2007[haut]
auteurs : blondelle, pottiez

Cette procédure permet de désactiver une Macro VB qui s'exécute automatiquement à l'ouverture de Word.
Elle équivaut au maintien de la touche MAJ enfoncée à l'ouverture de Word.

    Variant vFileName, vLink, vReadOnly, vFormat, vReadPass, vWDocuments, vWDocument;
    Variant vMSWord;
    
    vMSWord = Variant::CreateObject("Word.Application");

// ce code doit impérativement se trouver ici
    vMSWord.OlePropertyGet("WordBasic").OleProcedure("DisableAutoMacros");
// ici on a désactive la macro qui s'exécute à l'ouverture

    vMSWord.OlePropertySet("Visible", true); // ("Visible", false)
    vFileName = "c:\\book1.doc";
    vLink = Unassigned;
    vReadOnly = false; // lecture seule
    vFormat = Unassigned;
    vReadPass = "MotDePasse"; // mot de passe du document
    vWDocuments = vMSWord.OlePropertyGet("Documents");
    // ici on charge un document sur la feuille
    vWDocument = vWDocuments.OleFunction("Open", vFileName, vLink, vReadOnly, vFormat, vReadPass);

Comment créer temporairement une macro et l'exécuter ?
Créé le 10/12/2007[haut]
auteurs : blondelle, pottiez
Le Variant vMSWord représente une instance de Word, vWordDoc un document Word.
Il s'agit de manipuler un module VBE et de créer à la volée une macro, puis de la supprimer après exécution.

Attention, le code suivant peut ne pas fonctionner selon votre configuration sécurité de Word (cf. Options de sécurité, sécurité des macros).

Variant VBComp;
// on crée un module pour du code VB
VBComp =  vWordDoc.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Add", 1);
 
// on renomme le module sans espace dans le nom
VBComp.OlePropertySet("Name", "MyModule");
 
// on écrit la macro dans le module créé
VBComp.OlePropertyGet("CodeModule").OleProcedure("InsertLines", 1, "Sub laMacro()");
VBComp.OlePropertyGet("CodeModule").OleProcedure("InsertLines", 2, "ActiveDocument.Content.Text = \"Coucou\" ");
VBComp.OlePropertyGet("CodeModule").OleProcedure("InsertLines", 3, "End Sub");
// on l'exécute
vMSWord.OleProcedure("Run", "laMacro");
 
// on efface le module
vWordDoc.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Remove", VBComp);
// ici il n'y a plus aucune trace de notre macro
Cette façon de faire est plutôt adaptée à l'exécution de petites macros, voire de macros dont le code doit être rendu dynamique (c'est à dire changeant selon certains paramètres saisis dans votre application C++).


Comment lancer une macro dans Word ?
Créé le 10/12/2007[haut]
auteurs : blondelle, pottiez, firejocker
Le Variant vMSWord représente une instance de l'application Word, et on suppose qu'un document est ouvert.

Cette procédure permet de lancer une macro connaissant son nom ici "laMacro".

vMSWord.OleProcedure("Run", "laMacro");
Ici on suppose qu'une macro nommée "laMacro" existe.


Comment importer une macro dans un document Word ?
Créé le 10/12/2007[haut]
auteurs : blondelle, pottiez
Le code VB est créé par exemple sous Word et est recopié dans un fichier texte que l'on va utiliser pour importer la macro.
macro_essai.txt

Sub laMacro()
ActiveDocument.Content.Text = "Coucou"
End Sub
On lance Word, puis on ouvre le document, et on exécute sur le Variant VBComp la procédure d'importation comme suit :

Variant Appli, WordDoc, WordDocs, VBComp, vFileName;
 
Appli = Variant::GetActiveObject("Word.Application");
vFileName = "C:\\book1.doc";
WordDocs = Appli.OlePropertyGet("Documents");
WordDoc = WordDocs.OleFunction("Open", vFileName);
 
VBComp =  WordDoc.OlePropertyGet("VBProject").OlePropertyGet("VBComponents");
// on insère un code VB à partir d'un fichier
VBComp.OleProcedure("Import", "C:\\macro_essai.txt");
Attention, le code suivant peut ne pas fonctionner selon votre configuration sécurité de Word (cf. Options de sécurité, sécurité des macros).


Comment détruire un module contenant une macro VB ?
Créé le 10/12/2007[haut]
auteurs : blondelle, pottiez

Cette procédure permet de détruire une ou plusieurs macros VB contenues dans un module.


    // on supprime la macro
    VBComp.OleFunction("Remove", VBComp.OleFunction("Item", "Module1"));


Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web