FAQ C++ BuilderConsultez toutes les FAQ

Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe C++ Builder de Developpez.

Commentez cette FAQ : Commentez


SommaireMS OfficeExcelGestion des macro Excel (3)
précédent sommaire suivant
 

Soit un fichier contenant du code VBE :

Code VBE : Sélectionner tout
1
2
3
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 exécution.

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

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
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

Mis à jour le 10 décembre 2007 blondelle

Le Variant vMSExcel représente une instance d'Excel, vXLWorkbook repré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 exécution.

Le code suivant peut ne pas fonctionner selon votre configuration sécurité d'Excel (cf. Options de sécurité, sécurité des macros).
Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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'exécution de petites macros, voire de macros dont le code doit être rendu dynamique (cf. changeant selon certains paramètres saisis dans votre application C++).

Mis à jour le 10 décembre 2007 blondelle

Considérons l'instance d'Excel représentée par le VariantvMSExcel.

Code c++ : Sélectionner tout
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")

Mis à jour le 27 octobre 2004 Ricky81

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2020 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.