Identifier la dernière cellule utilisée sous Excel

Résolu
nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014
- 28 mars 2013 à 19:16
nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014
- 9 avril 2013 à 17:22
Salut à tous,

j'ai des difficultés à identifier la dernière cellule utilisée dans un fichier Excel.

Ex: dernière cellule => 'F15'.

je voudrais sélectionner une plage de cellules allant de 'A1' jusqu'à la dernière cellule utilisée .

Merci de votre aide.

NABIL1974

13 réponses

nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014

29 mars 2013 à 18:06
Merci WalidLam!

j'obtiens un msg d'erreur OLE....

En fait , j'ai trouvé comment se positionner sur la dernière cellule non vide:


var
ExcelApp : Variant;
OleWorkBook : Variant;
Sheet: OLEVariant;

begin

ExcelApp := CreateOleObject('Excel.Application');

ExcelApp.Workbooks.Open( ExtractFilePath(Application.ExeName)+'Mon fichier.xls');
ExcelApp.Visible := true;

Sheet := ExcelApp.Workbooks[ExtractFileName(ExtractFilePath(Application.ExeName)+'Mon fichier.xls')].WorkSheets[1];

Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;


merci

NABIL1974
3
cs_walidlam
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
31 mars 2013 à 13:33
salut!!!
1-
le code précédent pour excel 2007 ou plus
excel 97 a 2004 maximum colonnes 256 !!!
2-
la réponse est dans les codes ...
il suffit de parcourir les cellules
ex:

 j:=strtoint(edit1.Text);
 i:=1;
  While not(OleApplication.Cells[j,I].Formula = '') do
  Inc(i);
OleApplication.Cells[j,i-1].select;
OleApplication.Selection.Interior.ColorIndex :=20;


@+
3
cs_walidlam
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
29 mars 2013 à 16:14
Salut!!!
procedure TForm1.BtnSelectClick(Sender: TObject);
var
OpenDlg: TOpenDialog;
OleApplication : Variant;
OleWorkBook    : Variant;
NbrRec,NbrCol,I:Integer;
XlsFileName:ShortString;
{===============================================================}
function ColExcel(Col : Integer) : ShortString;
begin
     If Col > 26 then
      Result := Chr(64 + Trunc(Col/26)) + Chr(64 + (Col - (26 * Trunc(Col/26))))
      else
      Result := Chr(64 + Col);
   end;
 {===============================================================}
begin
OpenDlg := TOPenDialog.Create(nil);//crée de la boite de dialogue
OleApplication := CreateOleObject('Excel.Application'); //Crée du lien OLE
 Try
OpenDlg.Title      := 'Ouvrir un fichier excel';//renommer la boite
OpenDlg.Filter:= 'Fichiers Excel (*.xlsx;*.xls)|*.xlsx;*.xls'; //filtrer la boite pour tout les fichiers excel
If OpenDlg.Execute then
begin
XlsFileName:= (OpenDlg.FileName);
OleWorkBook := OleApplication.Workbooks.Open(XlsFileName);//Ouvrir le fichier voulu
{Pour Choisir  une  feuille dans le classeur }
OleWorkBook.Worksheets.Item['Feuil1'].activate;//oub bien ['Feuil2'] etc..
OleApplication.Visible:=False;
NbrCol:=0;
While not(OleApplication.Cells[1,NbrCol+1].Formula = '') do  //pour recuperer le nbre des colonnes
Inc(NbrCol);
NbrRec := 0;
While not(OleApplication.Cells[NbrRec+1,1].Formula = '') do  //pour recuperer les lignes
Inc(NbrRec);
OleApplication.Range['A1:'+ColExcel(NbrCol)+IntToStr(NbrRec)].Select;
OleApplication.Selection.Interior.ColorIndex :=15; //pour colorier la plage de selection
End;
finally
OpenDlg.Free; //Libératerela boite de dialogue
OleApplication.Visible:=true;   //rendre Excel Visible
end;
end;



@+
0
cs_cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
29 mars 2013 à 20:35
olé...

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014

29 mars 2013 à 21:06
salut,
voici le message d'erreur:

OLE 800A03EC




NABIL1974
0
nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014

30 mars 2013 à 10:44
bonjour les gars,

je me demandais comment se positionner sur la dernière cellule utilisée d'une ligne quelconque.
ex:
dernière cellule de la ligne n° 5

merci!

NABIL1974
0
cs_walidlam
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
30 mars 2013 à 18:46
salut !!!
voila code pour resoudre le probleme >256
remplacer la Function ColExcel
voila un exemple: créer une fiche, un button
procedure TForm1.Button1Click(Sender: TObject);
var
OpenDlg: TOpenDialog;
OleApplication : Variant;
OleWorkBook    : Variant;
XlsFileName:ShortString;
{========================================================================}
Function ColExcel(Col : Integer) : ShortString  ;
var EntCol ,a,k,i,j : Integer; c :Double   ;
begin
case Col of

//1 ere cas A..Z
1..26:  Result := Chr(64 + Col);

//2 eme cas de AA..ZZ
27..702:
begin
    Col := Col - 26   ;
    EntCol := Trunc(Col / 26);
    If EntCol-Trunc(Col / 26) > 0 Then
        EntCol:= EntCol - 1   ;
        i := Col - (EntCol * 26) ;
    If i = 0 Then  begin
       EntCol:=EntCol-1;
       i := 26  ;
                   End ;
   Result:= Chr(65 + EntCol) + Chr(64 + i)  ;
End ;

//3 eme cas AAA..ZZZ
703..16384:
begin
    Col := Col - 702  ;
    c := Col / 676  ;
    EntCol:= trunc(c)   ;
    c := EntCol - c ;
    If c > 0 Then
    EntCol:= EntCol - 1 ;
    j := EntCol   ;
    k := Col - (EntCol * 676);
    If k = 0 Then   begin
        j := j - 1 ;
        k := 676 ;
    End ;
    c :=k / 26  ;
   EntCol := Trunc(c) ;
    c := EntCol - c ;
    If c > 0 Then
       EntCol :=  EntCol - 1 ;
    a := EntCol ;
    i := k - (EntCol * 26) ;
    If i = 0 Then  begin
       a := a - 1 ;
       i := 26 ;
    End;
    Result := Chr(65 + j) + Chr(65 + a) + Chr(64 + i);
End ;
End;

end;
{========================================================================}
begin
OpenDlg := TOPenDialog.Create(nil);//crée de la boite de dialogue
OleApplication := CreateOleObject('Excel.Application'); //Crée du lien OLE
 Try
OpenDlg.Title      := 'Ouvrir un fichier excel';//renommer la boite
OpenDlg.Filter:= 'Fichiers Excel (*.xlsx;*.xls)|*.xlsx;*.xls'; //filtrer la boite pour tout les fichiers excel
If OpenDlg.Execute then
begin
XlsFileName:= (OpenDlg.FileName);
OleWorkBook := OleApplication.Workbooks.Open(XlsFileName);//Ouvrir le fichier voulu
{Pour Choisir  une  feuille dans le classeur }
OleWorkBook.Worksheets.Item['Feuil3'].activate;//oub bien ['Feuil2'] etc..
OleApplication.Visible:=False;
OleApplication.Range['A1:'+ ColExcel(16384)+'7'].Select;
OleApplication.Selection.Interior.ColorIndex :=20; //pour colorier la plage de selection
OleApplication.Cells[1,16384].select;
End;
finally
OpenDlg.Free; //Libératerela boite de dialogue
OleApplication.Visible:=true;   //rendre Excel Visible
end;
end;

a me rependre ..

@+
0
nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014

30 mars 2013 à 19:55
salut!

toujours le même message d'erreur:

OLE 800A03EC

peut-être tu n'as pas vu mon poste:

"comment se positionner sur la dernière cellule utilisée d'une ligne quelconque.
ex:
dernière cellule de la ligne n° 5 "

merci


NABIL1974
0
nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014

31 mars 2013 à 19:07
Salut!

Ok ça marche !

Un Grand Merci à toi WalidLam pour ta précieuse aide mon ami.

Bonne programmation!


NABIL1974
0
cs_walidlam
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
31 mars 2013 à 22:09
salut!!!
OK, pas de quoi ...
et le Probleme de OLE ??
0
nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014

1 avril 2013 à 11:20
Bonjour,

walidlam, le Probleme de OLE est toujours présent!
toujours le même msg d'erreur.

NABIL1974
0
cs_walidlam
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
1 avril 2013 à 19:46
salut!!
ok j ai fait un Petit zip sur ce ici..

@+
0
nabil351974
Messages postés
75
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014

9 avril 2013 à 17:22
Salut!
pardon pour ce retard.

Walidlam, je reçoit toujours le même message d'erreur!

voici une capture d'écran ici.

Merci

NABIL1974
0