cs_38fred
Messages postés15Date d'inscriptionvendredi 11 juin 2004StatutMembreDernière intervention 7 juillet 2005
-
1 sept. 2004 à 16:50
relax62
Messages postés82Date d'inscriptionvendredi 2 avril 2004StatutMembreDernière intervention 8 juillet 2012
-
11 sept. 2004 à 11:05
Bonjour,
J'ai dév une appli qui ouvre et permet de remplir des docs word et des classeurs excel à partir d'un classeur excel (qui est une base de données).
Lors de la 1ere exec d'une fonction de l'appli pas de pb
Ms après lors d'une nouvelle exec d'une fonction de l'appli le prog bug et s'arrete.
J'ai utilise le debugger et il plante au moment d'ouvrir le doc (ou le classeur) qui doit etre ensuite rempli.
Le pb est qu'il plante après un nb d'exec aleatoire et donc pas forcément à l'ouverture du mm fichier.
Pourtant ds chaque fonction j'ouvre word et excel, puis le doc et le tableur......
et à la fin je ferme tt correctement et réinitialise mes variables à Nothing
Et dans les processus les processus excel et word st bien terminés
J'ai tt essayé et sur diff PC et ne sais vraiment plus quoi faire, surtout que le code reste assez basic
cs_38fred
Messages postés15Date d'inscriptionvendredi 11 juin 2004StatutMembreDernière intervention 7 juillet 2005 3 sept. 2004 à 19:04
Il n'y a pas de description de l'erreur il me dit juste que mon prog a commis une erreur et doit fermer. En plus qu'en il plante, je dois aller ds les processus pour fermer ceux ouvert par mon prog (cad: excel et word).
Vu qu'il plante aléatoirement sur une procédure ou sur une autre, il m'est impossible de savoir d'ou ca vient (25 Forms différente dans mon prog) , en sachant que je me suis appuye tt le prog en mode pas à pas et qu'il ne trouve rien d'anormale.
Chaque Form permet de remplir un docs word et certaines de remplir en plus des classeurs Excel.
J'utilise la mm variable publique pour ouvrir les doc word, que je réinitialise en fin de chaque procédure.
Je fais de mm pour les classeurs excel.
Etant deb je ne sais pas si il vaut mieux pas utiliser une variable privée pour chaque doc ou classeur qu'une seule publique pour les doc et une autre publique pour les classeurs.
Avant de tout changer j'aimerai savoir ce qui est le mieux et si le pb peut venir de la?
J'ai pense aussi à ouvrir ts les fichiers utilisés (soit environ 20) dès l'ouverture de mon prog ms j'ai peur que ca surcharge de trop la memoire.
Est ce possible et cohérent ou irréalisable?
relax62
Messages postés82Date d'inscriptionvendredi 2 avril 2004StatutMembreDernière intervention 8 juillet 20121 4 sept. 2004 à 08:48
Essaye de mettre une tempo pour l'ouverture de ton fichier word ou excel
pour faire une tempo:
t=timer
do
doevents
loop until timer>t+...
Si tu utilises ta variable juste au niveau de ta form,
déclare la dans ta form.
Si cette variable n'est pas appelée par une procédure extérieure, rend la 'private'.
Il faut mieux différer l'ouverture des form, ca risque d'etre lourd pour l'utilisateur.
et si ca ne passe pas, donne nous ta procédure pour l'ouverture de tes fichiers :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_38fred
Messages postés15Date d'inscriptionvendredi 11 juin 2004StatutMembreDernière intervention 7 juillet 2005 6 sept. 2004 à 11:59
je n'ai pas besoins de timer pour différer l'ouverture de mes forms compte tenu quelles s'ouvrent que si on clique sur le bouton qui correspond.
Par contre pour une meilleurs optimisation de la memoire vaut il mieux utiliser des variables publiques ou des variables privées.
Procédure d'ouverture doc word (RapportWord est une variable publique déclarée ds la form Rapports):
Set Rapports.RapportWord = New Word.Application
Rapports.RappordWord.Documents.open("chemin et nom du doc")
Procédure de fermeture doc word :
Rapports.RapportWord.ActiveDocument.SaveAs("chemin et new nom du doc")
Rapports.RapportWord.Visible = True
Set Rapports.RapportWord = Nothing
Procédure ouverture classeurs excel:
Dim appTableau As Excel.Application
Dim wbTableau As Excel.Workbook
Dim wsTableau As Excel.Worsheet
Set appTableau = CreateObject("Excel.Application")
Set wbTableau = appTableau.Worbooks.Open("chemin et nom du classeur")
Set wsTableau = wbTableau.ActiveSheet
Procédure de fermeture classeurs excel:
Set wsTableau = Nothing
wbTableau.Save
wbTableau.Close
Set wbTableau = Nothing
appTableau.Quit
Set appTableau = Nothing
Une autre question que je me pose est: est il nécessaire de Unload la Form utilisée en fin de procédure? Et réélement à quoi ca sert?
Si Unload une form, faut il Load cette form si on veut l'utiliser une nvlle fois ou si on la rend visible ca suffit?
relax62
Messages postés82Date d'inscriptionvendredi 2 avril 2004StatutMembreDernière intervention 8 juillet 20121 6 sept. 2004 à 19:18
Pour optimiser la mémoire, il vaut mieux utiliser des variables privées.
Le fait d'unloader une form permet de libérer la mémoire, la form est fermée un peu comme si tu quittait un logiciel.
Si tu la caches seulement, la form utilise toujours la mémoire et garde tous ses paramètres.
Alors, apres à toi de voir si ca vaut le coup de les fermer:
-si tu as beaucoup de controles sur ta form, il est préférable de ne pas la décharger car ca prendrait du temps à la recharger ensuite.
(me.hide et me.show)
-si tu n'as pas beaucoup de controle dessus, tu peux la décharger, ce qui liberera un peu de mémoire.
(unload me et load me)
cs_38fred
Messages postés15Date d'inscriptionvendredi 11 juin 2004StatutMembreDernière intervention 7 juillet 2005 7 sept. 2004 à 19:59
je te remercie pour les explications, mais comment ca se fait que quand je Unload une Form, les variables déclarées publiques dans cette Form soient tjrs utilisables dans d'autres Forms?
Pourquoi elles ne sont pas Unload aussi?
Faut il faire autrement pour décharger les variables de la mémoire?
Je pense que la clé de ts mes soucis se trouve dans ces histoires de variables stockées en mémoire et non supprimées.
cs_38fred
Messages postés15Date d'inscriptionvendredi 11 juin 2004StatutMembreDernière intervention 7 juillet 2005 10 sept. 2004 à 17:18
Je te remercie pour ts tes conseils mais rien n'y fait:
Le prog plante tjrs après un certains nb d'executions
Existe t il un moyen pour savoir si les variables sont réellements déchargées de la mémoire après avoir Unload une Form?
Est ce que le nombre d'appèles à Word et Excels (ouverture modifications et fermeture des fichiers) sont limités?
Sinon j'ai une dernière solution qui consiste à diviser mon logiciel en plusieurs plus petits.
Le pb est alors de savoir si avec l'assistant d'empaquetage on peut empaqueter plusieurs petits prog en mm temps pour les déployer sur d'autres postes avec un seul setup d'installation.
Ceux sont mes ultimes questions avant pétage de plombs en règle