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 cellulesPlages de sélection (11)
précédent sommaire suivant
 

Travaillons directement sur le Variant représentant une plage de cellules.

Code c++ : Sélectionner tout
vRange.OlePropertySet("Name", "ricky81");
Nous pouvons désormais retrouver notre plage par son nom au niveau du Variant vWorksheet correspondent à la feuille sur laquelle nous travaillons.

Code c++ : Sélectionner tout
1
2
Variant vOtherRange; 
vOtherRange = vWorksheet.OlePropertyGet("Range", "ricky81");

Mis à jour le 8 décembre 2004 Ricky81

Supposons qu'une cellule ou un groupe de cellule soit associé à un nom (en l'occurrence "ricky81"). Nous allons chercher ici à récupérer un Variant sur ce groupe de cellules.
Travaillons au niveau de la feuille concernée représentée par le Variant vWorksheet.

Code c++ : Sélectionner tout
1
2
3
Variant vNames, vRange; 
vNames = vWorksheet.OlePropertyGet("Names"); 
vRange = vNames.OleFunction("Item", "ricky81").OlePropertyGet("RefersToRange")

Mis à jour le 8 décembre 2004 Ricky81

Nous allons pour cela travailler au niveau d'un Variant vRange représentant un plage de cellules.

Code c++ : Sélectionner tout
1
2
Variant vNewRange; 
vNewRange = vRange.OlePropertyGet("Resize", rowsize, columnsize);
Les variables rowsize et columnsize sont les tailles attendues pour la nouvelle plage.
Cette plage est obtenue en partant de la cellule supérieure gauche de la plage initiale.

Mis à jour le 8 décembre 2004 Ricky81

Nous allons pour cela travailler au niveau d'un Variant vRange représentant une plage de cellules.

Code c++ : Sélectionner tout
1
2
Variant vNewRange; 
vNewRange = vRange.OleProcedure("Offset", rowoffset, columnoffset);
Les variables rowoffset et columnoffset sont les déplacements attendus par rapport à la plage initiale.

Mis à jour le 8 décembre 2004 Ricky81

Agissons au niveau du Variant correspondant à la plage de cellules cible.

Code c++ : Sélectionner tout
1
2
vRange.OleProcedure("Copy", vCell); 
// le Variant vCell représente le coin supérieur gauche destination

Mis à jour le 8 décembre 2004 Ricky81

Nous allons travailler au niveau de l'instance Excel, représentée par le VariantvMSExcel, et faire appel aux fonctions Union et Intersect avec pour paramètres des Variants représentant des cellules ou groupes de cellules.

Union :

Code c++ : Sélectionner tout
1
2
Variant vRange; 
vRange = vMSExcel.OleFunction("Union", vCell1, vCell2, vCell3);
Intersection :

Code c++ : Sélectionner tout
vRange = vMSExcel.OleFunction("Intersect", vRange1, vRange2, vRange3);
Remarque : il est possible de rajouter d'autres cellules/groupes de cellules en paramètre, la limite étant fixée à 30 paramètres.

Mis à jour le 8 décembre 2004 Ricky81

Il est possible de récupérer, au format en cours utilisé par l'application Excel, l'adresse d'une cellule ou plage de cellules.
Prenons l'exemple d'une plage de cellules matérialisée par le Variant vRange que nous aurons précédemment initialisé.

Code c++ : Sélectionner tout
1
2
Variant vSelection; 
vSelection = vRange.OlePropertyGet("Address");
Le Variant vSelection contient alors la chaîne de caractères correspondant à la zone en question. Un exemple de retour pourrait par exemple être "$A$1:$B$2".

Mis à jour le 8 décembre 2004 Ricky81

Nous allons pour cela travailler au niveau d'un Variant vRange représentant une plage de cellules.

Le code suivant renvoie la plage en cours dans laquelle est l'objet Range. On entend par plage en cours, l'ensemble des cellules limitées par une combinaison de lignes et de colonnes vides en partant du coin supérieur gauche défini par la plage.

Code c++ : Sélectionner tout
1
2
Variant vRegion; 
vRegion = vRange.OlePropertyGet("CurrentRegion");

Mis à jour le 8 décembre 2004 Ricky81

Nous allons travailler au niveau d'un Variant vRange représentant un plage de cellules.
Voici quelques exemples :

- Des cellules vides :

Code c++ : Sélectionner tout
1
2
Variant vBlankCells; 
vBlankCells = vRange.OlePropertyGet("SpecialCells", xlCellTypeBlanks);
- Des cellules constantes contenant du texte :

Code c++ : Sélectionner tout
1
2
Variant vTextCells; 
vTextCells = vRange.OlePropertyGet("SpecialCells", xlCellTypeConstants, xlTextValues);
- Des cellules constantes contenant une valeur numérique :

Code c++ : Sélectionner tout
1
2
Variant vNumbersCells; 
vNumbersCells = vRange.OlePropertyGet("SpecialCells", xlCellTypeConstants, xlNumbers);
- Des cellules contenant une formule :

Code c++ : Sélectionner tout
1
2
Variant vFormulaCells; 
vFormulaCells = vRange.OlePropertyGet("SpecialCells", xlCellTypeFormulas);
Pour davantage d'éléments, les différentes valeurs possibles pour le second et le troisième paramètre sont respectivement des constantes des classes XlCellType et XlSpecialCellsValue.

Mis à jour le 8 décembre 2004 Ricky81

Pour sélectionner une plage de cellules, il faut au préalable avoir définit la plage, par exemple en délimitant la zone avec 2 cellules.
Il suffit ensuite d'appeler la fonction Select :

Code c++ : Sélectionner tout
1
2
3
4
//on sélectionne la plage de cellules délimitées par vCell1 et vCell2 
// vCell1 et vCell2 sont des Variant représentant des cellules 
// vWorksheet est un Variant représentant une feuille 
vWorksheet.OlePropertyGet("Range", vCell1, vCell2).OleFunction("Select");

Mis à jour le 10 décembre 2007 blondelle

Pour sélectionner plusieurs plages de cellules, il faut au préalable avoir défini les plages, par exemple en délimitant la zone avec deux cellules.
Une fois cela fait, il faut unir les sélections grace à la fonction Union.
Il suffit ensuite d'appeler la fonction Select :

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
vWorksheet.OleProcedure("Activate"); 
  
// définition des plages 
// vMSExcel.OlePropertyGet("Range", "C5:D9,G9:H16,B14:D18"); 
//Variant Aire1 = vWorksheet.OlePropertyGet("Range", "A1:B2"); 
Variant Aire1 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGet("Cells",1,1),vWorksheet.OlePropertyGet("Cells",2,2)); 
//Variant Aire2 = vWorksheet.OlePropertyGet("Range", "C3:D4"); 
Variant Aire2 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGet("Cells",3,3),vWorksheet.OlePropertyGet("Cells",4,4)); 
//Variant Aire3 = vWorksheet.OlePropertyGet("Range", "B8:F14"); 
Variant Aire3 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGet("Cells",8,2),vWorksheet.OlePropertyGet("Cells",14,6)); 
Variant mesMultiAires =  vMSExcel.OleFunction("Union", Aire1, Aire2, Aire3); 
  
// sélection des plages 
mesMultiAires.OleProcedure("Select"); 
  
// on récupère le NB de lignes et de colonnes 
Variant lign1 = Aire1.OlePropertyGet("Rows").OlePropertyGet("Count"); 
Variant colon1 = Aire1.OlePropertyGet("Columns").OlePropertyGet("Count"); 
Variant lign2 = Aire2.OlePropertyGet("Rows").OlePropertyGet("Count"); 
Variant colon2 = Aire2.OlePropertyGet("Columns").OlePropertyGet("Count"); 
Variant lign3 = Aire3.OlePropertyGet("Rows").OlePropertyGet("Count"); 
Variant colon3 = Aire3.OlePropertyGet("Columns").OlePropertyGet("Count");

Mis à jour le 21 novembre 2010 blondelle

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.