Excel tracer toutes les bordures

Résolu
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014 - 8 mars 2013 à 12:07
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014 - 11 mars 2013 à 16:35
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

cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
8 mars 2013 à 20:00
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
@+
3
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
10 mars 2013 à 23:01
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
@+
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
8 mars 2013 à 14:15
bonjour,

Avec quel outil de développement ?


cantador
0
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014
8 mars 2013 à 14:28
Salut Cantador,

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

NABIL1974
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
8 mars 2013 à 17:18
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
0
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014
8 mars 2013 à 21:34
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
0
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014
9 mars 2013 à 09:28
bonjour à tous,

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

merci à vous.



NABIL1974
0
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014
9 mars 2013 à 09:34
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
0
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
9 mars 2013 à 18:48
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;

@+
0
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
9 mars 2013 à 19:28
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)+')';



@+
0
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014
10 mars 2013 à 07:08
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
0
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
10 mars 2013 à 17:10
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..
@+
0
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014
10 mars 2013 à 22:04
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
0
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014
10 mars 2013 à 22:12
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 mars 2013 à 14:28
Bonjour,

pour des informations complémentaires :

EXCEL OLE

cantador
0
nabil351974 Messages postés 75 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 11 mars 2014
11 mars 2013 à 16:35
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
0
Rejoignez-nous