Bonjour Chris, Michel, Pat, le Forum
Merci pour ce complément d'Info (et quel complément ! lol)
Oui tout à fait Thierry... Euh non, tout à fait Michel,
nettoyage de tous les tmp est indispensable. Tellement indispensable que je n'ai pas pensé le signaler !
Pour la
Mémoire Virtuelle (Swap ou encore PageFile), non ce n'est pas de la Ram, c'est un fichier d'échange sur une zone du disque que Windows utilise
comme si c'était de la Ram, mais ce n'est pas de la RAM.
En règle générale, on laisse Windows paramètrer tout seul l'espace prévu, par exemple j'ai 1536 Mo par défaut que je pourrai augmenter à 3072 Mo sur la machine où je me trouve actuellement.
Les 1536 Mo représente bien cette notion de 1.5 x fois la RAM installée (j'ai 1024), mais attention, certains spécialistes considère cette affirmation comme étant obsolète sur des systèmes modernes. (
voir Article sur Developper.Com
Pour les autres points en Vrac :
Le
Nombre d'Onglets un classeur avec 5 onglets (et même 9) est très raisonnable. Pour moi je ne vois pas de souci.
Les
Objects Boutons, 3 Boutons, lol mais c'est rien du tout !
Les
Graphiques, 2 Onglets contenant chacun 4 Graphs... Selon leur complication, c'est peut-être un peu lourd. J'ai eu des plantage avec des classeurs contenant trop de graphs sur la même feuilles... Voir si tu ne peux pas plutôt les séparer, ou même mieux leur dédier un 'Vrai Onglet' Chart à chacun.
Les
Formules, c'est loin d'être ma partie, mais bon si je récapitule 5 Onglets avec 200 colonnes sur 300 lignes dont toutes les cellules contiennent des Formules, et ben ça nous fait 300,000 formules... Je me doute bien que tu ne peux pas faire autrement, mais ça doit mouliner dûr !
Les
Mises en Forme Conditionnelles, si ce sont les mêmes cellules qui sont concernées, ça fait le même nombre que de Formules ... En Plus !
Les 'Liens Internes au Classeur'... Si il en y a beaucoup qui sont eux mêmes donc tributaires des Formules de certains Onglets... Et que eux-même mettent à jours d'autres Formules... Et ensuite les Graphs... MamaMia !!
J'ouvre une parenthèse au regard de ces trois derniers Points... Si au départ c'est en VBA que tu récupère un Tableau pour mettre à jour cette 'Industrie' de calcul...
Recommandation 1)
Mettre au tout début
Application.Calculation = xlCalculationManual
(Ensuite on peut lancer des 'Calculates' sporadiques au coup par coup très précis :
Pour une feuille de calcul particulière : Worksheets(1).Calculate
Pour une plage déterminée Worksheets(1).Rows(2).Calculate
Ce devrait faire peut-être un peu moins de dégats...
Penser à remettre à 'xlCalculationAutomatic' quand tu pourras depuis un classeur 'léger', sinon tu vas avoir des utilisateurs qui vont te dire que leur Excel est Cassé lol
Recommandation 2)
Remplacer le maximum de Formule et de MFC par un algo VBA qui écrira en dûr les résultat et fera les Mise en Forme Voulue...
Ce sera peut-être plus long de traitement, mais ça économisera ensuite de se coltiner un 'bouffe ressource'
Les '
images en Pied de Page', si ce n'est pas sorti de ton appareil photo 6 Méga pixel ce ne devrait pas poser de problème !
L'application du '
quadrillage à l'onglet', à éviter, c'est clair, il vaut mieux définir la zone que de quadriller 16 millions de cellules ! Un petit Code VBA devrait le faire sans souci sur 'UsedRange'
Les '
copier coller', donc oui si tu as des grosses plages, sinon pour une seule Ligne, bof c'est pas la mer à boire ni la belle-mère à avaler !
Coté '
Variables Publiques', bien que l'aide VBA n'explique pas vraiment mis à part :
Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures, dans l'ensemble des modules de toutes les applications, à moins que Option Private Module ne soit activé. Dans ce cas, les variables ne sont publiques qu'au sein du projet qui les accueille
J'ai quand même testé, le fait de Fermer le classeur contenant la Déclaration Publique, la dite variable 'is apparently dead' mais je n'ai pas la preuve de ce qu'elle laisse comme résidus en Mémoire, avec une fermeture un peu 'bourrin', un Erase du Tableau avant fermeture devrait faire (théoriquement) un peu plus de propreté.
Pour le '
End Bien Placé', oh c'est simple dans ton cas vu que tu fermes ce Classeur 'InterFace', tu peux le mettre comme ça :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End
End Sub
L'aide VBA stipule bien ceci :
L'instruction End met immédiatement fin à l'exécution du code, sans appeler d'événement Unload, QueryUnload, ou Terminate, ou tout autre code Visual Basic. Le code que vous avez écrit dans les événements Unload, QueryUnload, et Terminate des feuilles et des modules de classe n'est pas exécuté. Les objets créés depuis les modules de classe sont détruits, les fichiers ouverts au moyen de l'instruction Open sont fermés et la mémoire occupée par le programme est vidée. Les références d'objet appartenant à d'autres programmes ne sont plus valides
Pour '
éviter les copier coller en série', je pense que ce n'est pas si nocif, puisqu'en VBA à chaque nouveau 'Copié' le précédant est écrasé dans le ClipBoard.
On pourrait voir si tu ne peux pas plutôt transposer des Tableaux Array Variant (Tableau de Plage) directement sur une Copy de WorkSheet 'Matrice' qui serait formatée pour le Design voulu.... Mais je dis bien il faut voir le contexte du programme.
Voilà, j'espère
1) que le Post va pas planter quand je vais l'envoyer !
2) que celà permettra de résoudre (un peu) ton souci
Bon Dimanche (ensoleillé ici aussi, mais j'aime pas trop le soleil lol)
[ol]@+Thierry[/ol]