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 :

Comment fermer tous les formulaires d'une application ?


Sujet :

VBA Access

  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut Comment fermer tous les formulaires d'une application ?
    Bonjour,

    Je souhaiterais trouver une solution pour fermer tous les formulaires de mon application. Voici le code que j'utilise mais ça ne fonctionne pas. Aucun formulaire ne se ferme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub ps_FermerTousLesFrm()
    Dim obj         As AccessObject
    Dim dbs         As Object
     
        Set dbs = Application.CurrentProject
     
        For Each obj In dbs.AllForms
            DoCmd.Close acForm, obj.Name
        Next obj
    End Sub
    NB : j'ai déjà remarqué que la commande DoCmd.Close ou DoCmd.Close acForm, <Nom du formulaire> posait parfois des problèmes pour fermer un formulaire.

  2. #2
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    eperat bonjour,

    Une autre solution


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function close_All()
    Do While Forms.Count > 0
        DoCmd.Close acForm, Forms(0).Name
    Loop
    '
    Do While Reports.Count > 0
        DoCmd.Close acReport, Reports(0).Name
    Loop
    End Function
    JimBoLion

  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut
    Bonjour,

    Cette solution donne le même résultat. J'ai essayé avec un formulaire ouvert, la commande Docmd.Close ne fermant pas ce formulaire, il boucle de manière infinie vu que la valeur de forms.count reste à 1.

  4. #4
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    eperat re-bonjour,

    Etrange et surprenant, cette technique ne m'a jamais posé de soucis au préalable (fonctionne également sur les formulaires indépendants et modals).

    N'aurais tu pas un point d'arrêt sur le code associé à ton formulaire par hasard ?

    JimBoLion

  5. #5
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut
    Rebonjour,

    Non, il n'y a pas de point d'arrêt.

  6. #6
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    eperat,

    Si tu ouvres 1 formulaire hormis celui qui pose problème et que tu lances la fonction cela marche t'il ?

    en ouvrant ensuite deux formulaires...

    Je crains que le problème vienne de ton formulaire, la fonction elle ne m'a jamais posé problème

    Quelle version d'Access

    JimBoLion

  7. #7
    Expert confirmé
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Par défaut
    Bonjour,

    J'utilise cette solution qui fonctionne très bien, même depuis le formulaire appelant http://access.developpez.com/faq/?pa...#CloseAllForms

    @+

  8. #8
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    Dolphy35,

    La procédure est exactement identique à la mienne, à priori le problème vient d'ailleurs et je ne vois pas encore pourquoi.

    JimboLion

  9. #9
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut
    Bonjour à tous,

    Pour info, j'utilise une base Access 2007 de type accdb.

    La fermeture des fenêtres est codée dans une procédure publique (dans un module) liée à un bouton de mon ruban.

    Pour répondre à jimbolion, ce n'est pas un formulaire en particulier qui pose problème. J'ai essayé avec plusieurs formulaires différents (avec chaque fois un seul ouvert), le problème demeure. Il n'y a aucune erreur et le formulaire ne se ferme pas. En mode pas à pas, on le voit exécuter la commande DoCmd.close avec le formulaire qu'il doit fermer. Après exécution de la commande, le formulaire est toujours ouvert.

    En fait, Access ne voit pas que les formulaires sont ouverts (il les voit fermés ou bien il ne les voit pas et je pense que tout le nœud du problème est là). Et si ça ne se plante pas, c'est parce qu'on peut faire un DoCmd.close sur un formulaire fermé et même sur un formulaire qui n'existe pas, la commande DoCmd.close ne plante jamais.

    Et la preuve qu'Access ne voit pas que les formulaires sont ouverts, c'est que si je fais par exemple un DoCmd.SelectObject d'un formulaire ouvert (dans la fenêtre de débogage), Access me renvoie une erreur en me disant que ce formulaire n'est pas ouvert.

    Mais j'ai peut-être loupé quelque chose...?

  10. #10
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    eperat,

    Je regarde çà demain avec un ruban mais je suis surpris. D'après ton message, le formulaire reste ouvert mais ne serait plus considéré comme tel par Access ?

    Etrange, etrange cette histoire

    JimBoLion

  11. #11
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut
    jimbolion,

    Je ne pense pas que ce soit lié au ruban car j'ai fait des tests :

    1) créer un formulaire vierge avec un bouton qui appelle la procédure de fermeture des fenêtres : même problème.

    2) directement lancer la procédure dans la fenêtre de débogage : idem.

    3) écrire le code de fermeture dans une procédure publique d'un formulaire et appeler cette procédure à partir d'une procédure publique d'un module (call forms("FRM_TEST").FermerFenetres).

    Merci pour tes réponses et bonne soirée.

  12. #12
    Expert confirmé
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Par défaut
    Citation Envoyé par jimbolion Voir le message
    Dolphy35,

    La procédure est exactement identique à la mienne, à priori le problème vient d'ailleurs et je ne vois pas encore pourquoi.

    JimboLion
    J'ai vu, c'était pour confirmer que cela fonctionne.

    J'utilise ce code un peu détourné depuis un Ruban et cela fonctionne à merveille.

    @+

  13. #13
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    eperat,

    Peux tu nous envoyer ta base ou à défaut quelque chose d'allégé.

    J'avoue être plus que surpris de ce comportement que j'utilise frequemment et qui ne me pose aucun soucis.

    JimboLion

  14. #14
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut
    JimBoLion,

    Si je pouvais te l'envoyer, je le ferais tout de suite mais c'est une application commerciale qui ne m'appartient pas.

    Je vais donc faire des tests en créant une nouvelle base et y importer quelques formulaires de l'application afin de voir si il n'y aurait pas un problème dans l'application. Si ca ne fonctionne pas, je t'enverrai cette nouvelle base.

  15. #15
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    eperat,

    excellente idée

    JimboLion

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Regardes également s'il n'y a pas de code sur l'évènement fermeture des formulaires.

    Philippe

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2006, 19h07
  2. Comment lister tous les composants d'une fiche ?
    Par tipiweb dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2006, 21h53
  3. [TWebBrowser] Comment trouver tous les liens dans une page ?
    Par xenos dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/01/2006, 23h36
  4. [Paradox] Comment fermer tous les handles
    Par Zugg dans le forum Bases de données
    Réponses: 4
    Dernier message: 16/12/2005, 10h22

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