Excel tracer toutes les bordures [Résolu]

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

Votre réponse

16 réponses

Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 8 mars 2013 à 20:00
3
Merci
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
@+

Merci cs_walidlam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_walidlam
Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 10 mars 2013 à 23:01
3
Merci
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
@+

Merci cs_walidlam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

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
- 8 mars 2013 à 14:15
0
Merci
bonjour,

Avec quel outil de développement ?


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

Delphi 7 + Win xp.
MS Excel 2003/ 2007
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
- 8 mars 2013 à 17:18
0
Merci
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
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 8 mars 2013 à 21:34
0
Merci
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
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 9 mars 2013 à 09:28
0
Merci
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
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 9 mars 2013 à 09:34
0
Merci
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
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 9 mars 2013 à 18:48
0
Merci
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
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 9 mars 2013 à 19:28
0
Merci
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
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 10 mars 2013 à 07:08
0
Merci
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
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 10 mars 2013 à 17:10
0
Merci
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
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 10 mars 2013 à 22:04
0
Merci
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
Messages postés
76
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
11 mars 2014
- 10 mars 2013 à 22:12
0
Merci
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
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 11 mars 2013 à 14:28
0
Merci
Bonjour,

pour des informations complémentaires :

EXCEL OLE

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