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 feuilles (20)
précédent sommaire suivant
 

Nous allons récupérer cet ensemble sous la forme d'une propriété d'un objet faisant office de classeur.

Code c++ : Sélectionner tout
1
2
3
Variant vWorksheets; 
// vXLWorkbook est de type Variant 
vWorksheets = vXLWorkbook.OlePropertyGet("Worksheets");

Mis à jour le 8 décembre 2004 Ricky81

Nous allons travailler directement sur le classeur concerné :

Code c++ : Sélectionner tout
1
2
3
4
Variant vWorksheet; 
// vXLWorkbook est de type Variant 
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", vWsName);  
// vWsName est un Variant initialisé au nom de la feuille

Mis à jour le 8 décembre 2004 Ricky81

Nous allons travailler directement sur le classeur concerné :

Code c++ : Sélectionner tout
1
2
3
4
Variant vWorksheet; 
// vXLWorkbook est de type Variant 
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", vWsPos);  
// vWsName est un Variant initialisé à la position (commence à 1)

Mis à jour le 8 décembre 2004 Ricky81

Nous allons exécuter la fonction Add sur le Variant correspondant à l'ensemble des feuilles.

Code c++ : Sélectionner tout
1
2
Variant vWorksheet; 
vWorksheet = vWorksheets.OleProdedure("Add");
Excel donnera pour nom FeuilI (cas de la version française) où I est le plus petit nombre tel que FeuilI n'existe pas encore. La feuille sera placée en première position.

Mis à jour le 8 décembre 2004 blondelle Ricky81

Il suffit pour cela d'agir sur la propriété Name d'un Variant correspondant à la feuille.

Code c++ : Sélectionner tout
1
2
// vWsName est un Variant initialisé au nouveau nom de la feuille 
vWorksheet.OlePropertySet("Name", vWsName);

Mis à jour le 8 décembre 2004 Ricky81

Travaillons sur le Variant correspondant à la feuille.

Code c++ : Sélectionner tout
1
2
// vSheet est un Variant correspondant à la feuille avant laquelle notre feuille doit être plaçée 
vWorksheet.OleProcedure("Move", vSheet);
Exemple :

Code c++ : Sélectionner tout
1
2
3
4
Variant vWorksheet1, vWorksheet3; 
vWorksheet3 = vXLWorkbook.OlePropertyGet("Worksheets", 3); 
vWorksheet1 =  vXLWorkbook.OlePropertyGet("Worksheets", 1); 
vWorksheet3.OleProcedure("Move", vWorksheet1);
Nous déplaçons la 3ème feuille en la mettant en première position.

Mis à jour le 8 décembre 2004 Ricky81

Nous allons travailler sur le Variant vWorksheet correspondant à une feuille.

Code c++ : Sélectionner tout
vWorksheet.OleProcedure("Protect", "motdepasse", true, true, true, true);
Les 4 booléens correspondent respectivement aux paramètres 'DrawingObjects', 'Contents', 'Scenarios' et 'UserInterfaceOnly'. Il est possible d'affiner la protection avec des paramètres facultatifs trop nombreux pour être décrits ici.

Pour ôter la protection :

Code c++ : Sélectionner tout
vWorksheet.OleProcedure("UnProtect", "motdepasse");

Mis à jour le 8 décembre 2004 Ricky81

Agissons au niveau du Variant correspondant à la feuille en question.

Code c++ : Sélectionner tout
vWorksheet.OleFunction("Delete");

Mis à jour le 8 décembre 2004 Ricky81

Il nous faut travailler au niveau d'une feuille, par exemple définie par le VariantvWorksheet.

Code c++ : Sélectionner tout
vWorksheet.OleFunction("Copy");
Cette fonction renvoie un booléen.

Mis à jour le 8 décembre 2004 Ricky81

Il nous faut travailler au niveau d'une feuille, par exemple celle définie par le VariantvWorksheet.

Code c++ : Sélectionner tout
1
2
// la feuille que l'on souhaite précéder est représentée par le Variant vSheetBefore 
vWorksheet.OleFunction("Copy", vSheetBefore);
Cette fonction renvoie un booléen.

Mis à jour le 8 décembre 2004 Ricky81

Plaçons-nous au niveau d'une feuille qui serait définie par le Variant vWorksheet.
Le code suivant permet de récupérer un Variant correspondant à la plage de cellules utile.

Code c++ : Sélectionner tout
vUsedRange = vWorksheet.OlePropertyGet("UsedRange");
Il est après par exemple possible de compter le nombre de lignes :

Code c++ : Sélectionner tout
1
2
3
Variant vLines; 
vLines = vUsedRange.OlePropertyGet("Rows"); 
int i = vLines.OlePropertyGet("Count");
ou le nombre de colonnes :

Code c++ : Sélectionner tout
1
2
3
Variant vCols; 
vCols = vUsedRange.OlePropertyGet("Columns"); 
int i = vCols.OlePropertyGet("Count");

Mis à jour le 8 décembre 2004 Ricky81

Nous allons travailler sur une feuille, représentée par le Variant vWorksheet.
Pour accéder à cette information, il faut interroger l'objet Protection de cette feuille :

Code c++ : Sélectionner tout
1
2
3
4
bool supprLignePermis, supprColonnePermis; 
// vWorksheet est de type Variant 
supprLignePermis = vWorksheet.OlePropertyGet("Protection").OlePropertyGet("AllowDeletingRows"); 
supprColonnePermis =  vWorksheet.OlePropertyGet("Protection").OlePropertyGet("AllowDeletingColumns");

Mis à jour le 8 décembre 2004 Superstivix

Nous allons travailler sur une feuillle, représentée par le Variant vWorksheet.
Pour accéder à cette information, il faut interroger l'objet Protection de cette feuille :

Code c++ : Sélectionner tout
1
2
3
4
bool insertLignePermis, insertColonnePermis; 
// vWorksheet est de type Variant 
insertLignePermis = vWorksheet.OlePropertyGet("Protection").OlePropertyGet("AllowInsertingRows"); 
insertColonnePermis =  vWorksheet.OlePropertyGet("Protection").OlePropertyGet("AllowInsertingColumns");

Mis à jour le 8 décembre 2004 Superstivix

Nous allons travailler sur une feuillle, représentée par le Variant vWorksheet.
Pour accéder à cette information, il faut interroger l'objet Protection de cette feuille :

Code c++ : Sélectionner tout
1
2
3
bool insertPermis; 
// vWorksheet est de type Variant 
insertPermis = vWorksheet.OlePropertyGet("Protection").OlePropertyGet("AllowInsertingHyperlinks");

Mis à jour le 8 décembre 2004 Superstivix

Il est possible d'effacer la grille de fond d'une feuille Excel.

Code c++ : Sélectionner tout
1
2
3
4
// on efface la grille de la feuille courante 
vMSExcel.OlePropertyGet("ActiveWindow").OlePropertySet("DisplayGridlines",false); 
// on affiche la grille 
vMSExcel.OlePropertyGet("ActiveWindow").OlePropertySet("DisplayGridlines",true);

Mis à jour le 10 décembre 2007 blondelle

Exemple de 2 carrés l'un dans l'autre :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
// vXLWorkbook est un Variant qui représente le classeur 
// (msoShapeBevel = 15) 
Variant vLigne1; 
// on dessine sur la première feuille 
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1); 
vLigne1 = vWorksheet.OlePropertyGet("Shapes"); 
vLigne1.OleProcedure("AddShape", 15,  201.6, 269.4, 18.6, 18.6);

Le code complet qui dessine un trait.

On peut changer l'épaisseur, la couleur du trait, et rendre le trait visible ou invisible.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
Variant vLine; 
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1); 
// pour les donnees (1, 1, 200, 100) il faut lire X, Y, X1, Y1 
// X, Y point de depart de la ligne X1, Y1 point d'arrivee de la ligne 
vLine = vWorksheet.OlePropertyGet("Shapes").OleFunction("AddLine", 1, 1, 200,100); 
vLine.OlePropertyGet("Line").OlePropertySet("Weight", 8); // epaisseur de la ligne 
vLine.OlePropertyGet("Line").OlePropertyGet("ForeColor").OlePropertySet("SchemeColor", 22); // couleur de la ligne 
vLine.OlePropertyGet("Line").OlePropertySet("Visible", false); 
vLine.OlePropertyGet("Line").OlePropertySet("Visible", true);

Mis à jour le 10 décembre 2007 blondelle

Pour figer/libérer les volets, il faut au préalable sélectionner la/les cellule(s), puis définir la propriété FreezePanes.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
// vMSExcel représente l'instance Excel 
Variant vWorksheet, vRange; 
// on selectionne la première feuille 
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1); 
// on selectionne la cellule qui sert a positionner les volets 
vRange = vWorksheet.OlePropertyGet("Range", "B4"); 
// on selectionne la cellule 
vRange.OleProcedure("Select"); 
// soit on fige soit on libere les volets 
vMSExcel.OlePropertyGet("ActiveWindow").OlePropertySet("FreezePanes", true);  
// pour liberer les volets remplacer "true" par "false"

Mis à jour le 10 décembre 2007 blondelle

Il suffit simplement d'interroger la propriété Count sur l'objet correspondant à l'ensemble des feuilles.

Code c++ : Sélectionner tout
1
2
3
4
// vXLWorkbook représente un classeur 
Variant vWorksheets; 
vWorksheets = vXLWorkbook.OlePropertyGet("Worksheets"); 
int nb_de_feuilles = vWorksheets.OlePropertyGet("Count");

Mis à jour le 10 décembre 2007 blondelle

Ce code copie une feuille, ouvre un nouveau classeur renomme la feuille du nouveau classeur, colle la copie et désélectionne les feuilles de chaque classeur.
Par défaut Excel crée les feuilles avec le nom Feuil1, Feuil2, ... que l'on peut renommer, mais qui conserve toujours son rang dans la classification. Nous l'écrirons donc en OLE ("Worksheets", 1) ou ("Worksheets", "toto").
Il en est de même pour les classeurs.

Le Variant vMSExcel représente l'application Excel.

Code c++ : Sélectionner tout
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
Variant vXLWorkbooks, vXLWorkbook, vWorksheet; 
// l'ensemble des classeurs 
vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks"); 
// on selectionne toute la feuille du classeur 1 et on la copie 
vXLWorkbook = vMSExcel.OlePropertyGet("Workbooks", 1); 
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1); // ici on peut remplacer "1" par le nom de la feuille "ma_feuille" 
vWorksheet.OleProcedure("Select"); 
vWorksheet.OlePropertyGet("Cells").OleProcedure("Select"); 
vMSExcel.OlePropertyGet("Selection").OlePropertyGet("Copy"); 
  
// on cree un nouveau classeur 
vXLWorkbooks.OleProcedure("Add"); 
vWorksheet = vMSExcel.OlePropertyGet("ActiveSheet"); 
  
// on renomme la feuille du nouveau classeur 
vWorksheet.OlePropertySet("Name", "SAUVEGARDE_2"); 
  
// on recopie le contenu dans SAUVEGARDE_2 
vWorksheet.OleProcedure("Select"); 
vWorksheet.OlePropertyGet("Cells").OleProcedure("Select"); 
vMSExcel.OlePropertyGet("ActiveSheet").OleProcedure("Paste"); 
  
// on deselectionne la feuille SAUVEGARDE_2 du nouveau classeur 
vMSExcel.OlePropertySet("CutCopyMode", false); 
vWorksheet.OlePropertyGet("Range", "A1").OleProcedure("Select"); 
  
// on active le classeur 1 
vXLWorkbook = vMSExcel.OlePropertyGet("Workbooks", 1); // ici on peut remplacer "1" par le nom du classeur "mon_classeur" 
vXLWorkbook.OleProcedure("Activate"); 
  
// on active la feuille 1 du classeur 1 
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1); // ici on peut remplacer "1" par le nom de la feuille "ma_feuille 
vWorksheet = vMSExcel.OlePropertyGet("ActiveSheet"); 
  
// on deselectionne la feuille 
vWorksheet.OleProcedure("Select"); 
vWorksheet.OlePropertyGet("Range", "A1").OleProcedure("Select");

Mis à jour le 10 décembre 2007 blondelle

Cette procédure permet de connaitre le nombre de feuilles du classeur actif.

Code c++ : Sélectionner tout
int Nb_feuilles = vXLWorkbook.OlePropertyGet("Sheets").OlePropertyGet("Count");

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.