|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() guillaume defrainInscription : avril 2006 Messages : 1 667 ![]() |
Code :
|
||
|
|
00
|
|
|
#2 | ||||
|
Membre Expert
![]() ![]() Etienne PailleretDéveloppeur VBA Inscription : mars 2004 Messages : 742 ![]() |
Merci, guigui, mais attention, ta fonction ne va fermer qu'un seul formulaire sur 2 (s'il y en a plus de 3 qui sont ouverts).
Dans toute collection, pour supprimer tous les objets, il faut procéder à l'envers, du dernier au premier Je te propose la mienne : Code :
Code :
|
||||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() guillaume defrainInscription : avril 2006 Messages : 1 667 ![]() |
Exact il faut que je change ça dans mon projet.
Merci du conseil |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Bonjour,
en faisant comme ça, ca ferme tout aussi : Code :
|
||
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Etienne PailleretDéveloppeur VBA Inscription : mars 2004 Messages : 742 ![]() |
Petite question, philben, puisque tu utilises ce code.
J'ai le souvenir d'avoir utilisé ".IsLoaded", plutôt que de parcourir la collection des Forms, en me disant "ce sera plus rapide". Je faisais ça simplement pour savoir si un formulaire était ouvert, ce qui reviendra au même. J'ai abandonné cette méthode, quand je me suis aprerçu qu'elle était extrêmement lente : en fait, Access ouvrait le formulaire avant de renvoyer Vrai ou Faux !!! Je pense qu'il devait s'agir de la première mouture d'Access 2000 ? Je vais refaire les tests, mais, est-ce que tu peux me confirmer déjà qu'il ne s'agissait que d'un défaut de jeunesse, aujourd'hui corrigé ? P.S. : ça ne t'ennuierait pas de supprimer ce contrôle d'erreur qui ignore tout (Resume Fin - Aaaaargh!). Ça va m'empêcher de dormir pendant plusieurs nuits, sinon.
|
|
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Bonjour Papy Turbo,
Citation:
Je crois que l'on peut écrire seulement ( à vérifier): Code :
Citation:
Je savais que j'allais me faire frotter les oreilles... Philippe |
||||
|
00
|
|
|
#7 |
![]() ![]() ![]() Christophe Warin Inscription : octobre 2004 Messages : 8 635 ![]() |
Là, on va tenter des femretures sur des formulaires qui ne sont peut être pas ouvert. Je suis pas sur que niveau perf et robustesse ce soit optimal
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() Etienne PailleretDéveloppeur VBA Inscription : mars 2004 Messages : 742 ![]() |
Oui, là, comme dit Tofalu, si tu ne testes plus le ".IsLoaded", tu vas avoir une erreur pour chaque formulaire non ouvert !
Et y a pas plus lent.Même si tu le testes (.IsLoaded), ce qui paraît bien indispensable, je ne suis pas sûr que cette méthode soit + rapide que l'autre, sur la collection Forms. - Forms ne contient que les formulaires ouverts (ceux qu'on cherche), - AllForms non seulement les contient tous, mais aussi tous les sous-formulaires. Si le nombre de formulaires + sous-formulaires dans ton application est grand, la méthode AllForms sera plus lente que la "bonne vieille" méthode avec Forms ! à tester ! |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Bonjour,
vous avez raison, ce n'est pas robuste si on ne teste plus l'ouverture du form par isloaded. Par contre, au niveau performance, je trouve cette méthode rapide pour l'utilisation que j'en fait. En effet je ne l'utilise que dans des cas particuliers comme un utilisateur qui a oublié de se délogger, etc... C'était juste une alternative possible aux méthodes proposées par Papy Turbo. amicalement, Philippe |
|
00
|
|
|
#10 |
![]() ![]() ![]() Christophe Warin Inscription : octobre 2004 Messages : 8 635 ![]() |
Le gros soucis avec cette méthode :
Elle nécessite : - Parcours de chaque formulaire (200 parfois juste pour en fermer 2) - Un test sur chaque formulaire - Et surtout au moins Access 2000 |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Bonjour,
Hum, Hum, les résultats sont là ![]() Sans rancune... Philippe Modification : voir http://www.developpez.net/forums/sho...08#post1098808 |
|
00
|
|
|
#12 |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Re bonjour,
J'ai 'implémenté' les 2 fonctions proposées par Papy Turbo... Résultat : 1 partout ! mais Papy Turbo a fait rentrer les remplaçants... Amicalement, Philippe http://www.developpez.net/forums/sho...69#post1122669 - Version 1.12 |
|
00
|
|
|
#13 |
![]() ![]() ![]() Christophe Warin Inscription : octobre 2004 Messages : 8 635 ![]() |
Tu as essayé ta méthode pour 10 formulaires ?
Là, ton exemple de 25 n'est pas parlant car la collection Forms tend à rejoindre Allforms du coté du nombre d'élement. En fermant 25 formulaire sur 27,tu ne traite pas les cas des formulaires qui ne sont pas ouverts. Pour 10 formulaire, la différence temps de traitement est de l'ordre de 25 % Il ne faut pas prendre les cas particuliers où l'utilisateurs aura fermés tous ou auncun formulaire (car pour aucun, la méthode Forms est instantanée). Mais il faut plutot prendre un cas typique où l'utilisateur aura ouvert entre 5 et 10 formulaire (et jamais plus de la moitié des formulaires) |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Re bonjour,
J'ai fait le test suivant : 1) Création de 100 formulaires 2) Ouverture de 10 formulaires sur 100 (j'ai essayé avec 30/100, c'est pareil) 3) fermeture de ces 10 formulaires meilleurs résultats obtenus : boucle for sur forms : 156 ms do while sur forms : 94 ms for each sur allforms : 99 ms Caractéristiques : Processeur : 3 giga hertz Access : 2003 je me suis peut-être planté dans mon jeu de test mais les chiffres sont là avec ma configuration. C'est vrai que ce n'est pas logique, la boucle for each est-elle spécialement optimisée ? Sur d'autres configurations, les résultats sont-ils totalement différents ? Pour arrêter les flèches des apaches Philippe |
|
00
|
|
|
#15 |
![]() ![]() ![]() Christophe Warin Inscription : octobre 2004 Messages : 8 635 ![]() |
Il se peut que for each soit plus otpimisé car typé et la variable utilisé par le parcours est déclaré en entête, sa référence mémoire est donc localisée uniquement lors de la première utilisation. En revanche, avec un while, une nouvelle variable est créée à chaque parcours
|
|
|
00
|
|
|
#16 |
![]() ![]() ![]() Christophe Warin Inscription : octobre 2004 Messages : 8 635 ![]() |
Attention, avec la réponse que tu as effacé, tu ne supprimes qu'un formulaire sur deux lorsqu'il y en a au moins 3 d'ouvert.
Pour ce qui est des tests, il serait bon aussi de tester avec des formulaires ayant un jeu d'enregistrements conséquent. |
|
|
00
|
|
|
#17 | |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Bonjour,
Citation:
J'essayerai avec un formulaire ayant des enr. Philippe |
|
|
00
|
|
|
#18 |
![]() ![]() ![]() Christophe Warin Inscription : octobre 2004 Messages : 8 635 ![]() |
Et ben là, je tombe sur le c**.
Je viens de réessayer avec 25 formulaires et je retrouve la méthode Forms plus rapide, alors qu'avant, j'avais les mêmes résultats que toi |
|
|
00
|
|
|
#19 | |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Bonjour,
j'ai essayé avec des formulaires dépendants (liés à la table TTemporaire) et ça ne change rien... Citation:
Premièrement, Je me suis aperçu que windows, lors du premier test, essaye souvent de créer 1 bouton par formulaire ouvert dans la barre de tâche et ça ralenti l'execution du test. Si on relance 2 à 3 fois le test en cliquant sur le bouton <Test>, Windows regroupe les formulaires ouverts dans un seul bouton de la barre de tâche et ça stabilise les vitesses d'éxecution. Deuxièmement, d'autres évènements système peuvent perturber la vitesse du test. En relançant plusieurs fois le test on obtient des temps à peu près significatifs je pense. Dans tous les cas de figure testés chez moi (création jusqu'à 100 formulaires, ouverture de 10 % des formulaires,...) le passage par la collection AllForms s'est toujours située en terme de vitesse entre les 2 méthodes passant par la collection Forms et souvent très proche de la méthode la plus performante. Philippe |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com