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

IHM Discussion :

Fermer un form sur le quel on se trouve


Sujet :

IHM

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 58
    Points : 41
    Points
    41
    Par défaut Fermer un form sur le quel on se trouve
    Bonjour,
    J'ai un soucis que je ne parviens pas à résoudre. Je souhaite fermer le form courant quand plusieurs conditions sont réunies. Or, l'utilisation de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docmd.Close AcForm,Me.Name
    provoque une erreur si une procédure du form est en cours. J'ajoute qu'à la fermeture de ce form, j'en affiche un autre.
    Connaissez vous un moyen de fermer un form lorsqu'il est le form courant?
    Merci d'avance
    Grizzly, bientôt un Légende Brutale...

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Et si tu fais simplement

    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 58
    Points : 41
    Points
    41
    Par défaut
    Le problème, c'est que le DoCmd.Close est placé sur une procédure du formulaire à fermer. Donc, ça ne fonctionne pas.
    Grizzly, bientôt un Légende Brutale...

  4. #4
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    Je ne comprends pas
    Le problème, c'est que le DoCmd.Close est placé sur une procédure du formulaire à fermer. Donc, ça ne fonctionne pas.
    Si c'est le fait de vouloir ouvrir un autre formulaire à la fermeture du formulaire courant, fais l'inverse :
    1. tu ouvres l'autre formulaire
    2. sur l'évènement ouverture du second formulaire, si le formulaire de départ est chargé, tu le fermes
    Gabout

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 58
    Points : 41
    Points
    41
    Par défaut
    Je vais essayer d'être plus précis.
    J'ai 2 forms, Form1 et Form2.
    J'ouvre le Form2 grâce au Form1 qui devient invisible. Sous certaines conditions, je souhaite fermer le Form2 et réafficher et revenir dans le Form1.
    Donc, dans le Form2, je ne peux pas mettre Docmd.Close et si je mets le DoCmd.close sur l'événement Activate du Form1, j'ai toujours la même erreur puisque la procédure du Form2 n'est pas fini.
    Code Fermeture Form2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form_Form1.Visible=True
    Form_Form1.SetFocus
    Sur l'événement Activate du Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docmd.Close acForm,Form2
    Ca entraine toujours la même erreur puisque la procédure du Form2 n'est pas fini quand le Form1 cherche à fermer le Form2.
    Grizzly, bientôt un Légende Brutale...

  6. #6
    Membre chevronné Avatar de Renardo
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 648
    Points : 2 019
    Points
    2 019
    Par défaut
    Tu ne peux pas mettre la fermeture du form a la fin du code de ta procédure?

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 58
    Points : 41
    Points
    41
    Par défaut
    Qu'importe l'endroit où je place le code de fermeture, sauf qu'il ne doit pas être dans la procédure qui reaffiche le form1 ni dans l'événement activate du form1 qui se déclenche avant que la procédure ne soit finie. Et là, je ne vois pas où le mettre. (et merci pour votre aide à tous)
    Grizzly, bientôt un Légende Brutale...

  8. #8
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Re,

    Quelle est la condition :
    Sous certaines conditions, je souhaite fermer le Form2 et réafficher et revenir dans le Form1.
    Ne peux-tu pas tester cette condition avant d'ouvrir Form2 ?
    Gabout

  9. #9
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonsoir,

    C'est très clair :

    Je vais essayer d'être plus précis.
    J'ai 2 forms, Form1 et Form2.
    J'ouvre le Form2 grâce au Form1 qui devient invisible. Sous certaines conditions, je souhaite fermer le Form2 et réafficher et revenir dans le Form1.
    Donc, dans le Form2, je ne peux pas mettre Docmd.Close et si je mets le DoCmd.close sur l'événement Activate du Form1, j'ai toujours la même erreur puisque la procédure du Form2 n'est pas fini.
    Code Fermeture Form2
    Sans analyse approndie je dirais :

    Si tu ne peux pas pas exploiter correctement un événement basic d'Access , c'est que tu as un problème... Tu t'en es aperçu

    Quant à la cause

    Tu n'en dis peut-être pas assez... Quelles sont les fameuses conditions dont tu parles ? Si tu dois valider une saisie avant de fermer le formulaire 2, il faut regarder du côté de l'événement BeforeUpdate dudit formulaire... Et annuler l'événement tant que les conditions de validation ne sont pas correctement remplies.

    En plus, tu peux oublier l'événement Sur activation du formulaire 1... Il se produit à l'ouverture et lors de chaque changement d'enregistrement sur ledit formulaire... Et je ne pense pas qu'il soit adapté ou véritablement utilisable dans un tel cas de figure... Sauf à coder une "centrale nucléaire"...

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 58
    Points : 41
    Points
    41
    Par défaut
    Bonjour,
    Je m'aperçois que je ne suis vraiment pas clair. Donc, je reprend. Dans le Form2, j'ai une TextBox dans laquelle je dois controler la saisie par click sur un bouton. Si la valeur saisie dans la textbox n'est pas valide (je la compare avec une valeur d'une table), j'affiche un msgbox avec 3 choix : reessayer, ignorer, annuler. Et c'est sur le choix Annuler que réside mon problème. Si l'utilisateur cique sur Annuler, le Form2 doit se fermer, et le Form1 doit ré apparaitre.
    Le problème, c'est que le code qui ferme le Form2 doit être incluse dans la procédure du msgbox, donc dans le code du Form2 lui-même. Et donc, je ne parviens pas à le fermer.
    Voilà, j'espère avoir été plus précis. Merci de votre aide
    Grizzly, bientôt un Légende Brutale...

  11. #11
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    Voilà qui est plus clair.
    j'affiche un msgbox avec 3 choix : reessayer, ignorer, annuler.
    Tu peux essayer de créer ta boîte de message à partir d'un formulaire. A partir du bouton Annuler de ton FormulaireMessage, tu ouvres ton Form1, tu testes si Form2 et FormulaireMessage sont ouverts, si oui, tu les fermes.
    Gabout

  12. #12
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut L'erreur
    Bonjour,

    Fais passer le code d'erreur

    Sinon :
    faut faire attention au focus quand la procédure est dans l'évènement d'un objet (bouton, combox etc..) la procédure a envie de finir et on ferme le form.

    Du code l'évènement sur fermeture du form ?

    sinon visible ou invisible jusqu'à la fin

    Externaliser la sub ou function dans du code global.
    a+

  13. #13
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 58
    Points : 41
    Points
    41
    Par défaut
    Voici le message d'erreur: Erreur 2585 : Impossible d'exécuter cette action pendant le traitement d'un événement de formulaire ou d'un état.
    Pour cette fois, au moins, le message est clair...
    Grizzly, bientôt un Légende Brutale...

  14. #14
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Ok Erreur 2585
    Bonjour,


    Il y a sans doute une fonction après le docmd.close .. qui tente de finir mais elle n'y arrive pas.
    Un évènement programmé sur la fermeture du form ? on revient à ce que disait Domi2.

    si il n'y en a pas
    tentes ça
    Docmd.Close AcForm, Me.Name
    exit sub ou function

    a+

  15. #15
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 58
    Points : 41
    Points
    41
    Par défaut
    Après le Docmd.Clode, j'ai effectivement un exit sub. D'après ce que je comprend du message d'erreur, on ne peut pas demander de fermer un form en utilisant du code inclus dans le form lui-même. Du coup, je crois que je vais utiliser la solution de Gabout : créer un form message. Ca devrait résoudre le problème.
    Grizzly, bientôt un Légende Brutale...

  16. #16
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonsoir,

    Absolument pas testé...

    La solution de Gabout est une piste sérieuse, je pense...

    Autre alternative... Mettre le code pour fermer le formulaire dans un module indépendant...

    J'en reste cependant à dire que les événements "Access"" ne sont pas ou ne peuvent pas être correctement utilisés...

    Cause ? Difficile à dire avec ce que tu dévoiles...

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  17. #17
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je ne pense pas que le fait qu'une procédure de fermeture sur le formulaire soit la source du problème.

    Comme fermerait-on un formulaire ?
    Si il faut passer par une autre formulaire !

    Pour s'en convaincre, il suffit de faire un simple formulaire avec un bouton généré par Access pour fermer le formulaire.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  18. #18
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 58
    Points : 41
    Points
    41
    Par défaut
    Bonjour,
    J'ai trouvé d'où venait l'impossibilité de fermer le form : la procédure de fermeture était sur l'événement Enter d'un bouton de commande, et pas sur l'événement Click.
    En mettant le code sur l'événement click, effectivement, il n'y a plus de problèmes.
    Maintenant, ça me pose un autre problème. Voilà, ce qui se passe en gros dans le form :
    -Scanne d'un code barre qui remplie un textbox.
    -Vérification de la validité du code barre par un bouton de commande (et s'il ne l'est pas, affichage d'un message pour Annuler, Ignorer, Réessayer).
    J'avais mis le code de vérification du code barre sur l'événement Enter du bouton de commande car la douchette, à la fin de sa lecture, envoi le code de la touche Entrée, et donc, mon bouton de commande recevait le focus et exécutait sa procédure, le tout, sans avoir besoin de lacher la douchette pour cliquer sur le bouton de commande.
    Du coup, en mettant la procédure sur l'événement Click, ... je suis obligé de cliquer : bref, c'est beaucoup moins rapide (car beaucoup de code barre à vérifier)

    Connaissez vous un moyen de remédier à ce souci sachant que la douchette se connecte au port clavier, et que je ne pense pas pouvoir en modifier le parametrage, sachant qu'elle est utilisée pour d'autres applications).
    Grizzly, bientôt un Légende Brutale...

  19. #19
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    C'est juste une supposition !

    Normalement, la douchette envoie un série de caractères dans le système.
    Tu peux vérifier le dernier caractère de ta chaîne et basculer lors de sa saisie.

    Je pense que dans la faq, il y a une méthode pour détecter l'entrée des différents caractères.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

Discussions similaires

  1. [AC-2003] Fermer le form sur le clic du Calendar
    Par manbas dans le forum IHM
    Réponses: 2
    Dernier message: 25/08/2009, 20h31
  2. Réponses: 4
    Dernier message: 24/01/2007, 10h04
  3. [VB6] Comment fermer une form en cliquant sur un boutton ??
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/04/2006, 19h05
  4. Peut-on tester un enregistrement dans form sur open?
    Par samlepiratepaddy dans le forum Access
    Réponses: 7
    Dernier message: 13/09/2005, 12h33
  5. Ajustement d'une forme sur tout l'écran
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 21/06/2005, 09h49

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