IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 124, nombre de questions : 934, dernière mise à jour : 23 octobre 2024  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

SommaireMicrosoft OfficeMicrosoft ExcelUtilisation des feuilles et de leur contenuPlages de sélection (10)
précédent sommaire suivant
 

Pour récupérer la plage actuelle de la feuille :

Code delphi : Sélectionner tout
1
2
3
rMaPlage : ExcelRange; 
... 
rMaPlage:=MaFeuille.UsedRange[0];
La plage définie par UsedRange est remise à jour par Excel après des insertions ou suppression lors du prochain appel de UsedRange.
Par exemple l'adresse montrée ici n'est pas correcte :
Code delphi : Sélectionner tout
1
2
3
MaFeuille.Range['A2','A4'].EntireRow.Delete(xlUp);  
showMessage(vartostr(MaFeuille.Cells.SpecialCells(XlCellTypeLastCell,EmptyParam) 
                 .Address[True,True,xlA1,False,False]));
Il faut faire dans ce cas :
Code delphi : Sélectionner tout
1
2
3
MaFeuille.Range['A2','A4'].EntireRow.Delete(xlUp);  
showMessage(vartostr(MaFeuille.UsedRange[0].SpecialCells(XlCellTypeLastCell,EmptyParam) 
                 .Address[True,True,xlA1,False,False]));
Renvoie l'adresse exacte car UsedRange a remis à jour la position.

Mis à jour le 18 janvier 2014 bidou

Pour récupérer la plage de cellules adjacentes sur la gauche à partir de A1 :

Code delphi : Sélectionner tout
1
2
3
MaPlage : ExcelRange; 
... 
rMaPlage:=MaFeuille.Range['A1',Mafeuille.Range['A1',EmptyParam].End_[xlToRight]];

Pour récupérer la plage de cellules adjacentes vers le bas à partir de A1 :
Code delphi : Sélectionner tout
1
2
3
4
5
MaPlage : ExcelRange; 
  
... 
  
rMaPlage:=MaFeuille.Range['A1',Mafeuille.Range['A1',EmptyParam].End_[xlDown]];

Mis à jour le 18 janvier 2014 bidou

Pour récupérer une ligne :

Code delphi : Sélectionner tout
1
2
3
MaPlage : ExcelRange; 
... 
rMaPlage:=MaFeuille.Range['A1',EmptyParam].EntireRow;
Pour récupérer une colonne :
Code delphi : Sélectionner tout
1
2
3
MaPlage : ExcelRange; 
... 
rMaPlage:=MaFeuille.Range['A1',EmptyParam].EntireColumn;

Mis à jour le 18 janvier 2014 bidou

Pour modifier la taille de la plage :

Code delphi : Sélectionner tout
1
2
3
MaPlage : ExcelRange; 
... 
rMaPlage:=MaFeuille.Range['A1',EmptyParam].Resize[4,5];
Ici la plage va être agrandie de 4 lignes et 5 colonnes, donc de A1 à E5 dans ce cas.
Passer des valeurs négatives permet de rétrécir la plage.

Mis à jour le 18 janvier 2014 bidou

Pour décaler la plage :

Code delphi : Sélectionner tout
1
2
3
MaPlage : ExcelRange; 
... 
rMaPlage:=MaFeuille.Range['A1',EmptyParam].Offset[1,2];
Décale la plage d'une ligne et deux colonnes, renvoie C2 dans ce cas.

C'est la zone sélectionnée qui est décalée, pas le contenu des cellules.

Mis à jour le 18 janvier 2014 bidou

Pour obtenir une plage discontinue :

Code delphi : Sélectionner tout
1
2
3
4
MaPlage : ExcelRange; 
... 
rMaPlage:=ExcelApplication1.Union(mafeuille.Range['A1','A20'], 
        mafeuille.Range['C1','C20'],mafeuille.Range['E1','E20']);
Ensuite pour parcourir la plage il faut utiliser la propriété ExcelRange.Areas.
Code delphi : Sélectionner tout
1
2
for compteur:=1 to rMaPlage.Areas.Count do 
        showmessage(rMaPlage.Areas.Item[compteur].Address[true,true,xlA1,false,false]);

Mis à jour le 18 janvier 2014 bidou

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.

Code delphi : Sélectionner tout
1
2
3
MaPlage : ExcelRange; 
... 
rMaPlage:=MaFeuille.Range['A1',EmptyParam].CurrentRegion;

Mis à jour le 18 janvier 2014 bidou

S'entend aux termes des formules de calculs. imaginons que la colonne 5 contient des valeurs numérique. On trouve dans L9C6 (F9) la formule =L9C5+L8C5, dans la cellule L11C6 (F11) la formule =L11C5+L10C5 et dans la cellule L10C7 (G10) la formule = L9C6+L11C6

Code delphi : Sélectionner tout
1
2
3
4
5
MaPlage : ExcelRange; 
... 
rMaPlage:=MaFeuille.Range['G10',EmptyParam].Precedents; 
    for compteur:=1 to rMaPlage.Areas.Count do 
       ShowMessage(rMaPlage.Areas.Item[compteur].Address[true,true,xlR1C1,false,false]);
Va retourner :
Code : Sélectionner tout
1
2
3
R9C6 
R11C6 
R8C5:R11C5
En utilisant DirectPrecedents au lieu de Precedents, seuls les deux dernière plages auraient été retournées.

Mis à jour le 18 janvier 2014 bidou

Les cellules vides d'une plage :

Code delphi : Sélectionner tout
rMaPlage:=MaFeuille.UsedRange[0].SpecialCells(XlCellTypeBlanks,EmptyParam);
Les cellules constantes numériques :
Code delphi : Sélectionner tout
rMaPlage:=MaFeuille.UsedRange[0].SpecialCells(xlCellTypeConstants, xlNumbers);
Les cellules constantes contenant du texte :
Code delphi : Sélectionner tout
rMaPlage:=MaFeuille.UsedRange[0].SpecialCells(xlCellTypeConstants, xlTextValues);
Les cellules contenant une formule :
Code delphi : Sélectionner tout
rMaPlage:=MaFeuille.UsedRange[0].SpecialCells(xlCellTypeConstants, EmptyParam);
Les cellules constantes contenant une formule en erreur :
Code delphi : Sélectionner tout
rMaPlage:=MaFeuille.UsedRange[0].SpecialCells(xlCellTypeFormulas, xlErrors);
Les cellules non vides de la feuille :
Code delphi : Sélectionner tout
1
2
rMaPlage:=MaFeuille.Columns.ColumnDifferences( 
                MaFeuille.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Offset[1,1]);

Mis à jour le 18 janvier 2014 bidou

Pour trier une page de cellule utilisez la méthode Range[].Sort.
Le code diffère suivant Excel 97 ou Excel 2000. Dans le cas d'Excel 97 il faut écrire :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Var 
  MonClasseur : _workbook; 
  MaFeuille :_Worksheet; 
  ovFeuille: OLEvariant; 
begin 
  ExcelApplication1.Connect; 
  MonClasseur:=ExcelApplication1.Workbooks.Open('d:\tuto.xls',False,False, 
        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); 
  ExcelApplication1.Visible[0]:=true; 
  MaFeuille:=MonClasseur.Worksheets[1] as _worksheet; 
  ovFeuille:=MaFeuille; 
  ovFeuille.Range['J1','L20'].Sort(MaFeuille.Range['J1','J1'], xlAscending,  
        EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 
        xlGuess, 1, False, xlTopToBottom, EmptyParam, EmptyParam, EmptyParam, 
        EmptyParam); 
end;
Pour Excel 2000 il faut remplacer la dernière ligne par :
Code delphi : Sélectionner tout
1
2
3
ovFeuille.Range['J1','L20'].Sort(MaFeuille.Range['J1','J1'], xlAscending,  
        EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,  
        xlGuess, 1, False, xlTopToBottom, EmptyParam);
Ici le tri est ascendant, de haut en bas sur la plage J1 à L20, la colonne située en J1 servant de base de tri.

Mis à jour le 18 janvier 2014 bidou

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