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 OfficeWordGestion des macros (5)
précédent sommaire suivant
 

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.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);

Mis à jour le 10 décembre 2007 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).

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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++).

Mis à jour le 10 décembre 2007 blondelle pottiez

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".

Code c++ : Sélectionner tout
vMSWord.OleProcedure("Run", "laMacro");
Ici on suppose qu'une macro nommée "laMacro" existe.

Mis à jour le 10 décembre 2007 blondelle firejocker 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.

Code VB : Sélectionner tout
1
2
3
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 :

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

Mis à jour le 10 décembre 2007 blondelle pottiez

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

Code c++ : Sélectionner tout
1
2
// on supprime la macro 
VBComp.OleFunction("Remove", VBComp.OleFunction("Item", "Module1"));

Mis à jour le 10 décembre 2007 blondelle pottiez

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.