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

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

Votre réponse

13 réponses

Meilleure réponse
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 29 mars 2013 à 18:06
3
Merci
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

Merci nabil351974 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de nabil351974
Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 31 mars 2013 à 13:33
3
Merci
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;


@+

Merci cs_walidlam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_walidlam
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 29 mars 2013 à 16:14
0
Merci
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
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 29 mars 2013 à 20:35
0
Merci
olé...

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

OLE 800A03EC




NABIL1974
Commenter la réponse de nabil351974
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 30 mars 2013 à 10:44
0
Merci
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
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 30 mars 2013 à 18:46
0
Merci
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
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 30 mars 2013 à 19:55
0
Merci
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
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 31 mars 2013 à 19:07
0
Merci
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
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 31 mars 2013 à 22:09
0
Merci
salut!!!
OK, pas de quoi ...
et le Probleme de OLE ??
Commenter la réponse de cs_walidlam
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 1 avril 2013 à 11:20
0
Merci
Bonjour,

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

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

@+
Commenter la réponse de cs_walidlam
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 9 avril 2013 à 17:22
0
Merci
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.