Identifier la dernière cellule utilisée sous Excel [Résolu]

nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 28 mars 2013 à 19:16 - Dernière réponse : nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention
- 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
Afficher la suite 

13 réponses

Répondre au sujet
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 29 mars 2013 à 18:06
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de nabil351974
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 31 mars 2013 à 13:33
+3
Utile
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;


@+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_walidlam
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 29 mars 2013 à 16:14
0
Utile
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;



@+
Commenter la réponse de cs_walidlam
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 mars 2013 à 20:35
0
Utile
olé...

cantador
Commenter la réponse de cs_cantador
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 29 mars 2013 à 21:06
0
Utile
salut,
voici le message d'erreur:

OLE 800A03EC




NABIL1974
Commenter la réponse de nabil351974
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 30 mars 2013 à 10:44
0
Utile
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
Commenter la réponse de nabil351974
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 30 mars 2013 à 18:46
0
Utile
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 ..

@+
Commenter la réponse de cs_walidlam
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 30 mars 2013 à 19:55
0
Utile
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
Commenter la réponse de nabil351974
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 31 mars 2013 à 19:07
0
Utile
Salut!

Ok ça marche !

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

Bonne programmation!


NABIL1974
Commenter la réponse de nabil351974
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 31 mars 2013 à 22:09
0
Utile
salut!!!
OK, pas de quoi ...
et le Probleme de OLE ??
Commenter la réponse de cs_walidlam
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 1 avril 2013 à 11:20
0
Utile
Bonjour,

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

NABIL1974
Commenter la réponse de nabil351974
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 1 avril 2013 à 19:46
0
Utile
salut!!
ok j ai fait un Petit zip sur ce ici..

@+
Commenter la réponse de cs_walidlam
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 9 avril 2013 à 17:22
0
Utile
Salut!
pardon pour ce retard.

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

voici une capture d'écran ici.

Merci

NABIL1974
Commenter la réponse de nabil351974

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.