Bonjour
Voici comment effectuer un Mailling d'enveloppes en utilisant Word, la source de donnees et dans un classeur Excel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
 
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <utilcls.h>
//#include<Comobj.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Variant vMSWord, vWDocuments, vWDocument;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Button2->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
        {
//    vMSWord = Variant::GetActiveObject("Word.Application");
    vMSWord = Variant::CreateObject("Word.Application");
        }
catch(...)
        {
    vMSWord = Variant::CreateObject("Word.Application");
        }
vMSWord.OlePropertySet("Visible", true);
//vFileName = "c:\\Debut de lettre.doc";
//vWDocuments = vMSWord.OlePropertyGet("Documents");
//vWDocument = vWDocuments.OleFunction("Open", vFileName);
vWDocuments = vMSWord.OlePropertyGet("Documents");
vWDocument = vWDocuments.OleFunction("Add");
Button2->Visible = true;
if (Form1->Visible) // mettre l'appli toujours au premier plan
  {
Form1->Visible = true;
Form1->BringToFront();
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    vWDocuments.OleFunction("Close", NULL, NULL);
    vMSWord.OleFunction("Quit");
    // on libere les Variants
    vMSWord = Unassigned;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Application->Terminate();        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Variant Address, ReturnAddress, AutoText;
Address = "";
ReturnAddress = "";
AutoText = "";
// on va effectuer un mailling Enveloppe
vWDocument.OlePropertyGet("MailMerge").OlePropertySet("MainDocumentType", 2); // wdEnvelopes = 2
// type d'enveloppe
vWDocument.OlePropertyGet("Envelope").OlePropertySet("DefaultSize", "DL");
// initialisation a "" expediteur, destinataire
vWDocument.OlePropertyGet("Envelope").OleProcedure("Insert", false, WideString(Address), WideString(AutoText), false, WideString(ReturnAddress));
// parametrage et affichage expediteur
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Size", 8);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Name", "Arial");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", "blondelle jean-pierre");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeParagraph");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", "chemin xxxx");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeParagraph");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", "quartier xxxx");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeParagraph");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", "30000 xyxyxyxy");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeParagraph");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", "France");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeParagraph");
// on se positionne sur la fenetre destinataire
vWDocument.OlePropertyGet("Envelope").OlePropertyGet("Address").OleProcedure("Select");
vMSWord.OlePropertyGet("Selection").OleProcedure("MoveDown", 5, 2); // wdLine = 5, Count = 2
// affichage des parametres de fusion
vWDocument.OlePropertyGet("MailMerge").OlePropertyGet("Fields").OleProcedure("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), "Prenom");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", " ");
vWDocument.OlePropertyGet("MailMerge").OlePropertyGet("Fields").OleProcedure("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), "Nom");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeParagraph");
vWDocument.OlePropertyGet("MailMerge").OlePropertyGet("Fields").OleProcedure("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), "ADRESSE");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeParagraph");
vWDocument.OlePropertyGet("MailMerge").OlePropertyGet("Fields").OleProcedure("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), "CODE_POSTAL");
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", " ");
vWDocument.OlePropertyGet("MailMerge").OlePropertyGet("Fields").OleProcedure("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), "Ville");
Variant PasswordDocument, PasswordTemplate, WritePasswordDocument, WritePasswordTemplate, SQLStatement, SQLStatement1;
PasswordDocument = "";
PasswordTemplate = "";
WritePasswordDocument = "";
WritePasswordTemplate = "";
SQLStatement = "";
SQLStatement1 = "";
String Chemin, Connection;
Chemin = "C:\\tableau.xls";
Connection = "Feuille de calcul entière";
// ouverture de la source
// une boite de dialogue s'affiche
vWDocument.OlePropertyGet("MailMerge").OleProcedure("OpenDataSource", Chemin.c_str(), 1, true, true, false, false, PasswordDocument, PasswordTemplate, false, WritePasswordDocument, WritePasswordTemplate, Connection.c_str(), SQLStatement, SQLStatement1, false);
// parametre de l'adresse Gras, Times New Roman, Size 16
vWDocument.OlePropertyGet("Envelope").OlePropertyGet("AddressStyle").OlePropertyGet("Font").OlePropertySet("Bold", true);
vWDocument.OlePropertyGet("Envelope").OlePropertyGet("AddressStyle").OlePropertyGet("Font").OlePropertySet("Name", "Times New Roman");
vWDocument.OlePropertyGet("Envelope").OlePropertyGet("AddressStyle").OlePropertyGet("Font").OlePropertySet("Size", 16);
// caracteres en majuscules
vWDocument.OlePropertyGet("Envelope").OlePropertyGet("AddressStyle").OlePropertyGet("Font").OlePropertySet("AllCaps", 9999998);
// on fusionne
vWDocument.OlePropertyGet("MailMerge").OleProcedure("Execute", false);
}
//---------------------------------------------------------------------------
il reste cependant une boite de dialogue imposee par Word qui s'affiche a l'execution de cette ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
vWDocument.OlePropertyGet("MailMerge").OleProcedure("OpenDataSource", Chemin.c_str(), 1, true, true, false, false, PasswordDocument, PasswordTemplate, false, WritePasswordDocument, WritePasswordTemplate, Connection.c_str(), SQLStatement, SQLStatement1, false);
Si quelqu'un a une idee pour recuperer le Handle de cette boite il serait peut etre possible de simuler un click sur le boutton "ok", ca n'empecherais pas l'affichage de la boite mais il n'y aurait aucune intervention de l'utilisateur