IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Différence entre 2 appels de formulaires [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 122
    Par défaut Différence entre 2 appels de formulaires
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Form_MonFormulaire.Name
    Et le code qui lui ne génère pas d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Forms!MonFormulaire.Name
    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,

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Load()
        MsgBox "Form_Load() est déclenché...", , Me.Name
    End Sub
    Enregistre le sous Formulaire1 et dans la fenêtre de débogage, tapes :
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaValeur = Forms!Formulaire1!Control1
    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
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 122
    Par défaut
    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.

    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.
    En fait, j'en suis à la phase de recette d'une application de facturation que j'ai développée sur Access pour ma société. J'y fais énormément de manipulation de formulaires et de leurs contrôles avec créations de formulaires dynaimique et autres. C'est cette phase de recette et l'utilisation importante de l'application qui m'ont donc amménés à venir poser cette question. C'est donc aussi bien une question de culture personnelle que d'amélioration d'un développement.

    Si tu pouvais me confirmer que j'ai bien compris, je ferais le petit clic sur Résolu ^^.

    Merci encore pour ta réponse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/09/2013, 10h22
  2. [AC-2003] Quelle différence entre formulaire chargé et ouvert ?
    Par isa911Bis dans le forum IHM
    Réponses: 2
    Dernier message: 11/02/2010, 23h46
  3. Différence entre Etat et Formulaire
    Par Salsaboy60 dans le forum IHM
    Réponses: 2
    Dernier message: 22/02/2009, 09h44
  4. différence entre controles formulaires et ActiveX
    Par scarsat dans le forum Excel
    Réponses: 2
    Dernier message: 20/03/2008, 23h14
  5. gerer la différence entre Null et '' dans un formulaire?
    Par XtofRoland dans le forum Langage
    Réponses: 7
    Dernier message: 21/02/2006, 12h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo