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
- Comment récupérer l'ensemble des feuilles d'un classeur ?
- Comment récupérer une feuille à partir de son nom ?
- Comment récupérer une feuille à partir de sa position dans le classeur ?
- Comment ajouter une nouvelle feuille à un classeur ?
- Comment modifier le nom d'une feuille ?
- Comment déplacer une feuille ?
- Comment protéger ou déprotéger une feuille ?
- Comment supprimer une feuille ?
- Comment créer une nouvelle feuille (nouveau classeur) à partir d'une feuille d'un classeur (copie) ?
- Comment dupliquer une feuille au sein d'un classeur ?
- Comment déterminer la zone utile ou le nombre de lignes/colonnes utiles dans ma feuille ?
- Comment savoir si la suppression de lignes ou de colonnes est permise ?
- Comment savoir si l'insertion de lignes ou de colonnes est permise ?
- Comment savoir si l'insertion d'un lien hypertexte est permise ?
- Comment effacer la grille d'une feuille Excel ?
- Comment dessiner un objet sur une feuille ?
- Comment figer/libérer les volets sur une feuille ?
- Comment connaitre le nombre de feuilles d'un classeur ?
- Comment recopier le contenu d'une feuille vers une autre feuille ?
- Comment connaitre le nombre de feuilles du classeur sur lequel on travaille ?
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"); |
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 |
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) |
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"); |
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); |
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); |
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 allons travailler sur le Variant vWorksheet correspondant à une feuille.
Code c++ : | Sélectionner tout |
vWorksheet.OleProcedure("Protect", "motdepasse", true, true, true, true);
Pour ôter la protection :
Code c++ : | Sélectionner tout |
vWorksheet.OleProcedure("UnProtect", "motdepasse");
Agissons au niveau du Variant correspondant à la feuille en question.
Code c++ : | Sélectionner tout |
vWorksheet.OleFunction("Delete");
Il nous faut travailler au niveau d'une feuille, par exemple définie par le VariantvWorksheet.
Code c++ : | Sélectionner tout |
vWorksheet.OleFunction("Copy");
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); |
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");
Code c++ : | Sélectionner tout |
1 2 3 | Variant vLines; vLines = vUsedRange.OlePropertyGet("Rows"); int i = vLines.OlePropertyGet("Count"); |
Code c++ : | Sélectionner tout |
1 2 3 | Variant vCols; vCols = vUsedRange.OlePropertyGet("Columns"); int i = vCols.OlePropertyGet("Count"); |
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"); |
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"); |
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"); |
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); |
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); |
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" |
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"); |
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"); |
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");
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 çaLes 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 © 2024 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.