Excel tracer toutes les bordures [Résolu]

Signaler
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014
-
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014
-
Bonjour à tous,

Je travaille sur un fichier excel.

je veux tracer toutes les brodures allant de la cellule "A6" jusqu'à la dernière
ligne et la dernière colonne utilisée(céllules non vides).

Comment le faire svp?

Merci


NABIL1974

16 réponses

Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut!!!

essayer ce petit code..
implementation
   uses comobj,math;
{$R *.dfm}
//....


procedure TForm1.Button1Click(Sender: TObject);
var
NbRecords,NbChamps : Integer;
OleApplication : Variant;
OleWorkBook    : Variant;
I,Ex  ,J ,colnbr  : Integer;
XlsFile,NomFichier: ShortString;
begin
OleApplication := CreateOleObject('Excel.Application');
try
 If OpenDialog1.Execute then
      begin
      XlsFile:= (OpenDialog1.FileName);
      OleWorkBook := OleApplication.Workbooks.Open( XlsFile);
      OleApplication.Visible := False;
      NbChamps := 0;
      While not(OleApplication.Cells[2,NbChamps+1].Formula = '') do
         Inc(NbChamps);
      colnbr:= NbChamps ;
      Ex := 0;
        For I:=1 to 1 do
         begin
         NbRecords := 0;

            While not(OleApplication.Cells[NbRecords+3,I].Formula = '') do
            begin
            Inc(NbRecords); end;
             NbRecords := Max(Ex,NbRecords);
         Ex := NbRecords;
         end;

            end;
      NbChamps:=0;
      For I:=6 to NbRecords+2 do
    for j:= 1 to colnbr do
                     begin
              OleApplication.Cells[I,j].select;
                 OleApplication.ActiveCell.Borders[7].LineStyle :=-4119;
                 OleApplication.ActiveCell.Borders[8].LineStyle :=-4119;
                   OleApplication.ActiveCell.Borders[9].LineStyle :=-4119;
                     OleApplication.ActiveCell.Borders[10].LineStyle :=-4119;
                   end;

   finally
  if savedialog1.Execute then
   begin
    NomFichier := ExtractFileName(SaveDialog1.FileName);
    OleApplication.ActiveWorkBook.SaveAs(ExtractFilePath(SaveDialog1.FileName)+NomFichier );
  end;
   OleApplication.Quit;
   end;

       //     end;
end;


j'espere que ca marche
@+
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut!!!
ah oui c bien sur parce que j'ai commencer a compter depuis la 1ere cellules !! si sont vides alors
normalement c'est regler voila + dernier celulles inc le NbRecord...

var
NbRecords,NbChamps : Integer;
OleApplication : Variant;
OleWorkBook    : Variant;
I : Integer;
XlsFile,NomFichier: ShortString;
  function ColExcel(Col : Integer) : ShortString;
  // fonction qui Permet de retrouver les colonnes AA .. ZZ sous excel
   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
OleApplication := CreateOleObject('Excel.Application');
try
 If OpenDialog1.Execute then
      begin
      XlsFile:= (OpenDialog1.FileName);
      OleWorkBook := OleApplication.Workbooks.Open( XlsFile);
      OleApplication.Visible := False;
      NbChamps := 0;
      While not(OleApplication.Cells[7,NbChamps+1].Formula = '') do
         Inc(NbChamps);
           For I:=6 to 6 do
         begin
         NbRecords := 0;
                 While not(OleApplication.Cells[NbRecords+9,I].Formula = '') do
                Inc(NbRecords);// end;
           end;
    OleApplication.Range['A6:'+ColExcel(NbChamps)+IntToStr(NbRecords+8)].Select;
    //pour
    OleApplication.selection.Borders.LineStyle:=-4119;  //tu peut changer le style...
     for i:= 2 to  NbChamps do begin
     // i caracter   {2=B,3=c ..ect}
     OleApplication.cells[NbRecords+9,i].NumberFormat := '# ##0' + DECIMALSEPARATOR + '00';
    // NumberFormat=format Cellule
    OleApplication.cells[NbRecords+9,i].formula:= '=sum('+ColExcel(i)+inttostr(6)+':'+ColExcel(i)+inttostr(NbRecords+8)+')';
      end;
      //inc le  NbRecords
   OleApplication.cells[NbRecords+10,2].formula:='WALIDLAM';
    //pour ecrire sur celulle
OleApplication.cells[NbRecords+10,2].select;
   //pour selectionner la celulle
  if savedialog1.Execute then
   begin
    NomFichier := ExtractFileName(SaveDialog1.FileName);
    try
    OleApplication.ActiveWorkBook.SaveAs(ExtractFilePath(SaveDialog1.FileName)+NomFichier );
    except
     OleApplication.Quit;
     raise;
     end;    end;
     OleApplication.Visible:=true;
 end;
  except
     OleApplication.Quit;
     raise;

   end;

Voila, j'espère avoir pu t'aider, n'hésites pas dans le cas contraire
bon courage
@+
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
bonjour,

Avec quel outil de développement ?


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

Salut Cantador,

Delphi 7 + Win xp.
MS Excel 2003/ 2007
merci

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

Dans une feuille d'Excel, j'ai une plage de cellules dans laquelle il y a des données. j'ignore quelle est la dernière ligne et la dernière colonne utilisée(cellules où il y a les données)

ben voilà, je veux encadrer toutes les cellules de cette plage en partant de la cellule "A6" jusqu'à la dernière ligne et la dernière colonne utilisée .

il faut avoir la dernière ligne et la dernière colonne utilisée et puis faire une sélection de cette plage et par la suite faire l'encadrement.

comment réalisé cela svp?
merci

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

bonsoir,

Merci walidlam pour ce tuyau!

ça marche mais c'est un peu long.La procédure mais beaucoup de temps à encadrer les cellules.

peut-être elle pourrait être optimisée?

a+

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

bonjour à tous,

en replaçant "-4119" par "1" , j'ai un grand gain de temps :
OleApplication.ActiveCell.Borders[7].LineStyle :=-4119;

merci à vous.



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

bonjour,

y a t-il pas un moyen de faire "SUM" de chaque colonne tout en sachant qu'on ignore toujours la dernière colonne utilisée(cellules où il y a les données).

je veux faire un total (sum) de chaque colonne en partant de la cellule "B6" jusqu'à la dernière la dernière colonne utilisée .

merci d'avance.

NABIL1974
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut!!!
j'ai optimisé le code...voila avec la somme..

var
NbRecords,NbChamps : Integer;
OleApplication : Variant;
OleWorkBook    : Variant;
I : Integer;
XlsFile,NomFichier: ShortString;
  function ColExcel(Col : Integer) : ShortString;
  // fonction qui Permet de retrouver les colonnes AA .. ZZ sous excel
   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
OleApplication := CreateOleObject('Excel.Application');
try
 If OpenDialog1.Execute then
      begin
      XlsFile:= (OpenDialog1.FileName);
      OleWorkBook := OleApplication.Workbooks.Open( XlsFile);
      OleApplication.Visible := False;
      NbChamps := 0;
      While not(OleApplication.Cells[2,NbChamps+1].Formula = '') do
         Inc(NbChamps);
           For I:=1 to 1 do
         begin
         NbRecords := 0;
                 While not(OleApplication.Cells[NbRecords+3,I].Formula = '') do
                Inc(NbRecords); end;
           end;
    OleApplication.Range['A6:'+ColExcel(NbChamps+1-1)+IntToStr(NbRecords+2)].Select;
    OleApplication.selection.Borders.LineStyle:=-4119;  //tu peut changer le style...
     for i:= 2 to  NbChamps do begin
     // i caracter   {2=B,3=c ..ect}
     OleApplication.cells[NbRecords+3,i].NumberFormat := '# ##0' + DECIMALSEPARATOR + '00';
    // NumberFormat=format Cellule
    OleApplication.cells[NbRecords+3,i].formula:='=somme('+ColExcel(i+1-1)+inttostr(6)+':'+ColExcel(i+1-1)+inttostr(NbRecords+2)+')';

   end;
   finally
  if savedialog1.Execute then
   begin
    NomFichier := ExtractFileName(SaveDialog1.FileName);
    OleApplication.ActiveWorkBook.SaveAs(ExtractFilePath(SaveDialog1.FileName)+NomFichier );
  end;
   OleApplication.Quit;
   end;

@+
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut!!!
remplacer
ligne
OleApplication.cells[NbRecords+3,i].formula:='=somme('+ColExcel(i+1-1)+inttostr(6)+':'+ColExcel(i+1-1)+inttostr(NbRecords+2)+')';

par
 OleApplication.cells[NbRecords+3,i].formula:= '= sum('+ColExcel(i)+inttostr(6)+':'+ColExcel(i)+inttostr(NbRecords+2)+')';



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

Bonjour à tous,

walidlam MERCI beaucoup mon ami pour ce code!!!

Ecoute quand je tente d'enregistrer le fichier, j'obtiens un message d'erreur : "Erreur OLE 80A03EC" ???


je ne sais pas la cause de ce message?




NABIL1974
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut!!!
dans quelle ligne??
voila copier ce code tester plusieurs fois ... ça marche

var
NbRecords,NbChamps : Integer;
OleApplication : Variant;
OleWorkBook    : Variant;
I : Integer;
XlsFile,NomFichier: ShortString;
  function ColExcel(Col : Integer) : ShortString;
  // fonction qui Permet de retrouver les colonnes AA .. ZZ sous excel
   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
OleApplication := CreateOleObject('Excel.Application');
try
 If OpenDialog1.Execute then
      begin
      XlsFile:= (OpenDialog1.FileName);
      OleWorkBook := OleApplication.Workbooks.Open( XlsFile);
      OleApplication.Visible := False;
      NbChamps := 0;
      While not(OleApplication.Cells[2,NbChamps+1].Formula = '') do
         Inc(NbChamps);
           For I:=1 to 1 do
         begin
         NbRecords := 0;
                 While not(OleApplication.Cells[NbRecords+3,I].Formula = '') do
                Inc(NbRecords);// end;
           end;
    OleApplication.Range['A6:'+ColExcel(NbChamps)+IntToStr(NbRecords+2)].Select;
//pour sélectionner une plage de celulles
    OleApplication.selection.Borders.LineStyle:=-4119;  //tu peut changer le style...
     for i:= 2 to  NbChamps do begin
     // i caracter   {2=B,3=c ..ect}
     OleApplication.cells[NbRecords+3,i].NumberFormat := '# ##0' + DECIMALSEPARATOR + '00';
    // NumberFormat=format Cellule
    OleApplication.cells[NbRecords+3,i].formula:= '=sum('+ColExcel(i)+inttostr(6)+':'+ColExcel(i)+inttostr(NbRecords+2)+')';
       end;

  if savedialog1.Execute then
   begin
    NomFichier := ExtractFileName(SaveDialog1.FileName);
    try
    OleApplication.ActiveWorkBook.SaveAs(ExtractFilePath(SaveDialog1.FileName)+NomFichier );
    except
     OleApplication.Quit;
     raise;
     end;    end;
     OleApplication.Visible:=true;
 end;
  except
     OleApplication.Quit;
     raise;

   end;

me rependre..
@+
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2014

Bonsoir à tous,

walidlam Vraiment un énorme MERCI à toi pour ta précieuse aide!!!

ça marche avec des fichiers mais avec d'autres non!?

j'ai d'anciens fichiers excel avec ceux-là ça marche impécable par contre quand je crée un nouveau fichier Excel,là il y erreur!?

la ligne en cause:

-OleApplication.Range['A6:'+ColExcel(NbChamps)+IntToStr(NbRecords+2)].Select;

a+





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

Une autre question:

comment faire pour se positionner sur la 2ème cellule qui est au dessous de la dernière ligne?

exemple:
ici la dernière ligne.
1ere ligne
2ème ligne (sur la colonne B)=> je veux me positionner ici

parce que je veux écrire dans cette cellule.

merci

NABIL1974
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
Bonjour,

pour des informations complémentaires :

EXCEL OLE

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

Bonjour,

ça marche cette fois !

Vraiment formidable ce code!!!
walidlam, je te remercie infiniment cher ami, je n'ai pas pu m’en sortir sans toi !

bonne journée les gars!




NABIL1974