PpPool
Messages postés15Date d'inscriptionvendredi 22 mars 2002StatutMembreDernière intervention18 mai 2005
-
18 mai 2005 à 14:57
aogie
Messages postés108Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention27 novembre 2007
-
19 mai 2005 à 14:20
Bonjour à tous,
OS : Windows 98 OS/2
VB 6.0
MAPI 6.0
Library Microsoft Excel 8.0
je rencontre un pb qui commence sincérement à m'énerver. J'espère que la communauté va pouvoir me venir en aide.
Présentation de l'appli :
Depuis 2 ans, j'ai une appli qui tourne, qui me permet de récupérer des pièces jointes reçues par mail. Cette appli se regénére dans le temps comme un automate (lancement toutes les heures).
Ces pièces jointes sont en fait des fichiers excel pré-paramètrés que je reçois de nos clients.
L'appli doit procéder à un traitement de ces fichiers pour réaliser des récaps.
Voici le décor planté !
Probléme :
De manière complétement aléatoire, je dis bien aléatoire (des journées cela se passe bien, d'autres journées, c'est le basard), des process excel (1 à n) restent actifs dans le gestionnaire des tâches. Ces process quand je cherche à les 'killer' sont soit en fin de tâche, soit complétement mort (message de windows : process terminé anormalement);
Très rarement, mais cela est arrivé quand même j'ai carrément un message de mémoire insuffisante qui me plante l'appli.
Exemple de code :
Dim Feuil_Excel_Tampon As Object
Set Feuil_Excel_Tampon = CreateObject("Excel.application")
'Ferme l'objet en cours
Feuil_Excel_Tampon.Application.Quit
'Désallocation mémoire
Set Feuil_Excel_Tampon = Nothing
Je multiplie ce genre de procédures plusieurs fois.
J'ai vérifié toutes mes procédures, à chaque fois je ferme correctement mon objet excel.application, et je désalloue correctement la mémoire.
Alors MYSTERE, vraiment MYSTERE. j'ai essayé de réinstaller plusieurs fois office, et rien n'y fait. L'appli tourne sur un poste dédié qui ne fait rien d'autres. C'est une machine correcte (PIV, 512 Mo de mémoire).
Voyez vous une solution ????
Comment désallouer la mémoire de manière certaine ?
Est-il possible de faire des pointeurs d'objets en VB ?
Merci d'avance pour votre aide, car là franchement je nage
aogie
Messages postés108Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention27 novembre 2007 19 mai 2005 à 14:20
Bonjour,
Je vois que tu travailles sans référence sur la librairie Excel (Dim Feuil_Excel_Tampon As Object suivi d'un CreateObject()).
L'avantage est bien évidemment de n'avoir aucun impact sur la version
de l'application Excel. En revanche, tout objet intermédiaire sur un
appel donné doit clairement être nommé. En effet, il y a quelquefois
des "pertes de référence", notamment sur l'objet Application.
Crée autant de variables de type Object que d'objets Excel utilisés. Tu
ne dois pas "traverser" les différents objets pour faire appel à une
méthode du 3ème objet "traversé". Il vaut mieux ne pas dépasser un
objet après ta référence...
En VBA (interne à l'exécutable), tu peux écrire :
Dim o As Object
Set o = CreateObject("...")
o.obj1.obj2.obj3.f1(...)
Pour ton cas (externe car automation) :
Dim o As Object, o1 As Object, o2 As Object, o3 As Object
Set o = CreateObject("...")
Set o1 = o.obj1
Set o2 = o1.obj2
Set o3 = o2.obj3
o3.f1(...)
De plus, je pense qu'il y a une erreur car ta variable
Feuil_Excel_Tampon est déjà une référence sur l'objet automation
"Application".
Tu ne dois donc pas utiliser la propriété "Application", utilisée pour
le code VBA (interne à l'Exe). Toi tu te trouves à l'extérieur et tu
travailles par automation, ta référence pour l'objet "Application" est
ta variable.