Excel tracer toutes les bordures [Résolu]

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

16 réponses

Répondre au sujet
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 8 mars 2013 à 20:00
+3
Utile
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
@+
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 - 10 mars 2013 à 23:01
+3
Utile
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
@+
Cette réponse vous a-t-elle aidé ?  
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 - 8 mars 2013 à 14:15
0
Utile
bonjour,

Avec quel outil de développement ?


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 - 8 mars 2013 à 14:28
0
Utile
Salut Cantador,

Delphi 7 + Win xp.
MS Excel 2003/ 2007
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 - 8 mars 2013 à 17:18
0
Utile
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
Commenter la réponse de nabil351974
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 8 mars 2013 à 21:34
0
Utile
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
Commenter la réponse de nabil351974
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 9 mars 2013 à 09:28
0
Utile
bonjour à tous,

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

merci à vous.



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 - 9 mars 2013 à 09:34
0
Utile
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
Commenter la réponse de nabil351974
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 9 mars 2013 à 18:48
0
Utile
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;

@+
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 - 9 mars 2013 à 19:28
0
Utile
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)+')';



@+
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 - 10 mars 2013 à 07:08
0
Utile
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
Commenter la réponse de nabil351974
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 10 mars 2013 à 17:10
0
Utile
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..
@+
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 - 10 mars 2013 à 22:04
0
Utile
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
Commenter la réponse de nabil351974
nabil351974 76 Messages postés mardi 18 décembre 2007Date d'inscription 11 mars 2014 Dernière intervention - 10 mars 2013 à 22:12
0
Utile
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
Commenter la réponse de nabil351974
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 11 mars 2013 à 14:28
0
Utile
Bonjour,

pour des informations complémentaires :

EXCEL OLE

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 - 11 mars 2013 à 16:35
0
Utile
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
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.