Re : Saturation mémoire VBA (problème bis)
Bonjour le forum,
Je rencontre un problème s'approchant de celui de Chris et j'apprécierai un conseil d'expert avant de remettre les "mains dans le camboui"
Avant d'entrer dans le détail, voici mes 2 questions brutes de décoffrage pour éviter une perte de temps à ceux qui n'auraient pas une réponse à proposer :
Constat : appli VBA, mémoire saturée, imprimante qui plante, utilisateur qui panique, et service informatique qui dit : "demandez à l'auteur"
Q1 : fermer le poste de travail, le relancer, et utiliser de nouveau l'appli concernée permet - il de vider la mémoire ? (solution temporaire le temps de trouver une solution fiable)
Q2 : existe il une ligne de commande vidant la mémoire hormis le Set MonObject = nothing ?
Voici pour les personnes intéressées un diagnostic de la situation, (avec mes chaleureux remerciements pour votre aide et votre patience) :
Contexte
1. Je ne suis pas informaticien de profession, mais développeur amateur (une trentaine d'appli à mon actif en 7 ans). je ne suis pas sensé faire d'informatique au boulot.
2. Je bosse dans une groupe d'envergure nationale. Localement, les informaticiens n'ont plus le droit de développer (réservé aux informaticiens "nationaux")
3. Les outils proposés sont souvent médiocres et ne correspondent pas toujours aux besoins (cahiers des charges mal définis)
4. De ce fait, à titre personnel, et avec accord hiérarchique, j'ai developpé mes propres outils à partir des outils proposés sans jamais le moindre souci et avec de gros gains de productivité.
5. Effet boule de neige : mes collègues les ont adoptés, ma ligne hiérachique les a mis en avant, avec extension sur l'ensemble du site local, une des appli a même été primée au niveau national et dispatchée.
6. Effet nocif : ma direction locale m'a commandé quelques outils me mettant en porte à faux vis à vis des informaticiens locaux qui ne font pas le SAV (et je les comprends parfaitement).
L'appli développée en VBA : (une synthèse de données issues de 2 applis officielles).
Un classeur Excel qui sert de réceptacle :
- l'utilisateur copie dans 9 onglets des données issues de 2 applis officielles (Ctrl+A, Copier + clic sur un bouton Coller qui vérifie la conformité de la page avant de la coller et de passer à l'onglet suivant)
- un onglet "Salle des Machines" formate les données copiées et alimente un tableau de variables en mémoire
- Excel ouvre ensuite Word (de manière invisible pour l'utilisateur), appèle un modèle en .dot, une macro "Word VBA" alimente les champs du modèle à partir du tableau de variables, lance l'impression de la synthèse, ferme la session Word, vide la mémoire du tableau de variables, nettoie les 9 onglets réceptacles et propose la création d'une autre synthèse (ou Quitter)
Cette petite appli fonctionne parfaitement depuis 16 mois. D'autres fonctionnent sans soucis sur le même principe depuis 1999.
Le problème depuis hier c'est l'utilisation intensive qui en est faite (absolument pas prévue dans le cahier des charges initial) : jusqu'içi 50 à 60 utilisateurs montaient eux même une dizaine de synthèses par jour,
maintenant on demande à une ou deux personnes de ne faire que ça pour la collectivité.
(j'ai honte pour les 2 pauvres qui font du copier-coller à longueur de journée).
Problème confirmé par un "informaticien officiel" : la mémoire est saturée.
En phase test, j'avais monté 70 synthèses sans problème soit 6 à 7 fois l'utilisation quotidienne de l'époque. Il semblerait que ça sature entre 90 et 110 synthèses (selon les autres applis utilisées en parrallèle).
Les solutions auquelles j'ai pensé :
- la solution radicale : "c'est une appli perso, non officielle, elle bugue, laissez tomber et utilisez les anciens outils" : solution refusée, ancienne méthode improductive (fiche incomplète à remplir à la main),
- la solution temporaire : éteindre le poste, puis le rallumer toutes les 50 synthèses. Est ce bien efficace à défaut d'être la solution ?
- comment être sûr de vider régulièrement la mémoire : à priori les variables, le clipboard ça pose pas problème. Je ferme bien Word (Set MonWord = nothing). Est ce un problème de mémoire temporaire comme expliqué dans ce fil ?
Existe t'il une commande VBA pour ce problème ?
J'ai bien sûr une solution intermédiaire :
Modifier mon appli à partir de l'élaboration du tableau de variables, et les transférer dans un 10ème onglet servant de synthèse, évitant ainsi l'ouverture et la fermeture de Word.
Ca devrait alléger la mémoire utilisée. Mais se pose alors un autre problème : reconstruire une appli alors que j'ai pas fait de VBA depuis 8 mois et que j'ai débuté un nouveau job lundi dernier, c'est sûr, c'est ma mémoire perso qui va saturer !!
Et là, je connais la solution : tout envoyer "péter" et partir en courant à travers champs.
Bonne soirée à tous, et merci d'avance pour votre aide.
Kotov