|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : juillet 2010 Messages : 117 ![]() |
Bonjour le forum.
Dans un développement j'ai rencontré un message d'erreur : "Erreur d'exécution 7 : Mémoire insuffisante". L'erreur est survenu lors de l'appel à un formulaire. J'ai changé de type d'appel et n'ai maintenant plus de message d'erreur. Cependant, je souhaiterais comprendre la différence exacte entre les deux écritures. Voici le code utilisé qui génère l'erreur : Et le code qui lui ne génère pas d'erreur : Je crois avoir compris que la seconde écriture fait appel au formulaire en tant qu'objet de la collection Forms. Concernant la première, c'est beaucoup moins clair pour moi...Est-ce qu'il essaie de placer le contenu de la propriété directement en variable sans avoir fait un appel concret au formulaire avant ? Voilà, si quelqu'un pouvait m'éclairer au sujet des différences qu'il existe entre ces deux codes, ça me serait sans doute d'une grande aide. Bien cordialement,
__________________
"Je suis capable du meilleur comme du pire, mais dans le pire, c'est moi le meilleur" Coluche. |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() |
Bonjour
Humm, je vais tenter de t'expliquer... La propriété Forms retourne une référence à la collection Forms avec toutes ses propriétés connexes... L'objet Form_NomDFormulaire est le nom de classe du formulaire lui-même et déclenche notamment les événements qu'il contient comme par exemple Form_Load() si tu cherches à l'exploiter ainsi que tu le fais en essayant d'obtenir son nom (s'il est fermé biensûr). Pour l'exemple, créé un formulaire vierge et écris l'événement suivant : Code :
Il te retourne : Formulaire1 Maintenant, ferme le formulaire en question et place ton curseur dans la fenêtre de débogage derrière le .Name Appuies sur entrée : cela déclenche l'événement alors Form_Load() avec le MsgBox() qu'il contient... puis te donne le nom, bien évidemment... User de Forms![NomDFormulaire] réfère à la collection des formulaires ouverts uniquement. Tu peux user de cette syntaxe pour récupérer par exemple la valeur d'un contrôle : Tu ne peux pas exploiter Forms pour, par exemple, déclencher des événements ou récupérer la valeur d'une propriété déclarée au sein de la classe du formulaire. Ceci étant dit, si tu nous précises que c'est de la culture perso, c'est très bien - maintenant, si tu souhaites faire quelque chose qui n'aboutie pas, on peut certainement t'aider. Argy
__________________
Ils comptent sur vous... Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment. Web Site ‡ @Mail Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007 Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010 MDB Viewer : Visionneuse Access v4.0 |
||
|
|
00
|
|
|
#3 | |
|
Membre habitué
![]() Inscription : juillet 2010 Messages : 117 ![]() |
Bonjour Argyonet et merci beaucoup pour la réponse.
En prenant tes indiquations comme point de départ, voici les manipulations de test que j'ai faites : 1 - Création du formulaire vierge et de son évènement Load comme tu l'as indiqué 2 - Copie de ta ligne dans la fenêtre de debogage. 3 - Déclenchement de l'ordre dans le débogage en appuyant sur entrée => j'ai bien le déclenchement de l'évènement si mon formulaire est fermé. 4 - Déclenchement une seconde fois de l'ordre dans le debogage => Pas d'évènement Load déclenché : j'en déduis que le formulaire est toujours chargé (sans pour autant être ouvert de manière visible). 5 - Ouverture classique du formulaire par double clic => j'ai un déclenchement d'évènement Load 6 - Fermeture normale du formulaire ouvert puis exécution de l'ordre => déclenchement de l'évènement Load : le formulaire a donc été déchargé lorsque je l'ai fermé. 7 - Ajout de l'évènement UnLoad sur le formulaire avec le même code que pour Load et reprise des étapes ci-dessus => l'évènement UnLoad ne s'est effectivement déclenché que lors de la fermeture manuelle du formulaire Ce que j'en comprends, c'est que l'appel à l'objet Form_NomDFormulaire charge le formulaire en mémoire mais sans l'ouvrir. Ce chargement permet d'accéder à ses propriétés. Cependant, à moins d'une ouverture et d'une fermeture (ou d'un ordre dans le code j'imagine) celui-ci reste chargé. Dans le cas d'une exécution qui appellerai de la sorte une dizaine de formulaire, il peut donc être logique de se retrouver avec une surcharge d'utilisation mémoire. Je comprends mieux la venue de ce message. D'un point de vue implémentation j'en conclus donc qu'il vaut mieux : 1 - Utiliser Forms pour accéder aux objets et propriété d'un formulaire (quite à l'ouvrir en caché au préalable et le refermer par la suite) 2 - Reserver l'emploi de Form_NomDFormulaire au déclenchement d'évènements et à l'accès à des variables qui seraient déclarées dans cette classe. Citation:
Si tu pouvais me confirmer que j'ai bien compris, je ferais le petit clic sur Résolu ^^. Merci encore pour ta réponse.
__________________
"Je suis capable du meilleur comme du pire, mais dans le pire, c'est moi le meilleur" Coluche. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com