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 > Excel > Gestion des macro Excel
        Comment installer, exécuter, puis désinstaller une macro définies dans un fichier ?
        Comment créer temporairement une macro pour l'exécuter ?
        Comment exécuter une macro contenue dans un classeur ?



Comment installer, exécuter, puis désinstaller une macro définies dans un fichier ?
Créé le 10/12/2007[haut]
auteur : blondelle
Soit un fichier contenant du code VBE :
Fichier testrows.txt

Sub essai()
Rows("10:11").Select
End sub
Les Variant vMSExcel et vXLWorkbook représentent respectivement une instance de l'application Excel et un classeur.
Il s'agit de manipuler un module VBE et de créer à la volée une macro à partir d'un fichier, puis de la supprimer après execution.

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

Variant VBComp; 
// installation du Module
VBComp = vXLWorkbook.OlePropertyGet("VBProject").OlePropertyGet("VBComponents");
VBComp.OleProcedure("Import", "c:\\testrows.txt");
// execution de la macro
vMSExcel.OleProcedure("Run", "essai");
// destruction de la macro
VBComp.OleFunction("Remove", VBComp.OleFunction("Item", "Module1"));
// à partir d'ici il n'y a plus de macro n'y Module

Comment créer temporairement une macro pour l'exécuter ?
Créé le 10/12/2007[haut]
auteur : blondelle
Le Variant vMSExcel représente une instance d'Excel, vXLWorkbook repésente un classeur.
Il s'agit de manipuler un module VBE et de créer à la volée une macro, puis de la supprimer après execution.

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

Variant VBComp;
// on cree un module pour du code VB
VBComp =  vXLWorkbook.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Add", 1);

// on renomme le module sans espaces dans le nom
VBComp.OlePropertySet("Name", "MyModule");

// on ecrit la macro dans le module cree
VBComp.OlePropertyGet("CodeModule").OleProcedure("InsertLines", 1, "Sub laMacro()");
VBComp.OlePropertyGet("CodeModule").OleProcedure("InsertLines", 2, "        Rows(\"10:11\").Select");
VBComp.OlePropertyGet("CodeModule").OleProcedure("InsertLines", 3, "End Sub");
// on l'execute
vMSExcel.OleProcedure("Run", "laMacro");

vXLWorkbook.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Remove", VBComp);
// ici il n'y a plus aucune trace de la macro
Cette façon de faire est plutôt adaptée à l'execution de petites macros, voire de macros dont le code doit être rendu dynamique (cf. changeant selon certains paramètres saisis dans votre application C++).


Comment exécuter une macro contenue dans un classeur ?
Créé le 27/10/2004[haut]
auteur : Ricky81
Considérons l'instance d'Excel représentée par le Variant vMSExcel.

vMSExcel.OleProcedure("Run", "monClasseur.xls!MaMacro");
Le code ci-dessus va donc lancer la macro "MaMacro" définie dans le classeur ouvert nommé "monClasseur".

Remarques :

  • Les éventuels paramètres de la macro sont à ajouter comme paramètres à la suite du nom de la macro dans l'appel précédent
  • Il vous est bien sûr possible d'appeler une macro définie dans une module en adaptant votre code ("monClasseur.xls!monmodule.MaMacro")

lien : faq Comment utiliser les fonctions intégrées d'Excel ?
lien : faq Comment créer une nouvelle instance d'Excel ?
lien : faq Comment récupérer l'instance active d'Excel ?


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