Effacer la tache excel de la mémoire

yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017 - 20 sept. 2005 à 11:17
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 - 21 sept. 2005 à 11:22
Lorsque je pilote EXCEL avec DELPHI il arrive que la fermeture de excel est incomplette : excel est toujours en memoire.

avec les instruction suivantes il est possible de créer OleApplication , mais je ne peux décharger excel de la mémoire.

try
OleApplication := GetActiveOleObject('Excel.Application');
except
OleApplication := CreateOleObject('Excel.Application'); // création du lien OLE
end;

Question:
Excel étant toujours en mémoire comment détécter sa présence et l'effacer de la mémoire ?

yvessimon

6 réponses

Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
20 sept. 2005 à 11:36
Bonjour yvessimon,

Pour être sure que tu es bien libérer excel de la mémoire, pourquoi ne pas tuer toi même le process une fois après avoir fait tous tes traitements...
Voici une fonction qui te permettra de tuer un process en lui passant son nom exemple : Excel.exe

function KillProcess(const sProcessName : string): boolean;
var
Processentry32 : TProcessEntry32;
Handle : THandle;
HProc : THandle;
begin
Result := False;


Processentry32.dwSize := SizeOf(Processentry32);
Handle := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);


Process32First(Handle,Processentry32);


repeat
if CompareText(Processentry32.szExeFile,sProcessName) = 0 then
begin
HProc := OpenProcess(1,False,Processentry32.th32ProcessID);
TerminateProcess(HProc,ExitCode);
Result := True;
break;
end;
until not Process32Next(Handle,Processentry32);
end;

Bonne Prog,

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
20 sept. 2005 à 15:38
Hello,



Plus simplement utiliser un try .... finally comme ceci :



var

OleApplication : Variant;



begin

{Connection OLE avec excel}

OleApplication := CreateOleObject('Excel.Application');



Try

OleApplication.WorkBooks.Open('C:\MOnFichier.xls'); //Chargement du fichier OleApplication.Visible := False; //On masque excel

OleApplication.Run('Start'); //On Lance la macro Start

Finally

{Fermeture du fichier excel}

OleApplication.Run('Finish'); //On lance la macro Finish

OleApplication.Quit; //On ferme excel

end;
end;

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
20 sept. 2005 à 17:03
La 1ere solution m'est satisfaisante car en plus j'ai une mèthode pour lister les tâches en cours.

Merci à tous pour cette aide

yvessimon
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
21 sept. 2005 à 09:55
Hello,



Une petite remarque comme cela en passant c'est que si ton utilisateur
avait des fichiers excel ouvert et que ton programme lui ferme
brutalement ces fichiers je pense qu'il ne va pas très apprécié !!!!!

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
21 sept. 2005 à 11:16
C'est une bonne remarque.

Mais avec excel2000 j'ai l'erreur suivante:
'Impossible de trouver la macro 'Start''.
'Impossible de trouver la macro 'Finish''.

Alors .....

yvessimon
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
21 sept. 2005 à 11:22
LOL



Désolé je t'ai fais un copier coller d'un code que j'ai déposé pour quelqu'un d'autre. Voici la version corrigée :


var

OleApplication : Variant;



begin

{Connection OLE avec excel}

OleApplication := CreateOleObject('Excel.Application');



Try

OleApplication.WorkBooks.Open('C:\MOnFichier.xls'); //Chargement du fichier OleApplication.Visible := False; //On masque excel

Finally

{Fermeture du fichier excel}

OleApplication.Quit; //On ferme excel

end;
end;



Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
Rejoignez-nous