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 :

Fermer un formulaire s'il est ouvert sinon ne rien faire. [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut Fermer un formulaire s'il est ouvert sinon ne rien faire.
    Bonjour, je voudrais savoir comment écrire en vba ceci :
    If le formulaire "Client" est ouvert Then Le fermer.

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub FormulaireFerme(pStr_NomFormAFermer As String)
        On Error GoTo Erreur
        DoCmd.Close acForm, pStr_NomFormAFermer
    Erreur:
    End Sub

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Cela ne fonctionne pas j'ai une erreur : argument non facultatif.

    N'est-ce pas possible de faire cela avec une structure If Then ?

  4. #4
    Membre régulier Avatar de GillesDeVuif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 88
    Points : 110
    Points
    110
    Par défaut
    Bonjour.
    j'ai tenté d'adapter (pomper sans vergogne) le code issu de ce post :
    http://www.developpez.net/forums/d11...ution-code-vb/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub SiFormOuvertAlorsLeFermer(NomDuFormulaireàVérifier As String)
    Dim i As Integer
    For i = 0 To Forms.Count - 1
        If Forms(i).FormName = NomDuFormulaireàVérifier Then
            DoCmd.Close acForm, NomDuFormulaireàVérifier
            Exit Sub
        End If
    Next
    End Sub
    Cordialement.

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Citation Envoyé par Mat08 Voir le message
    Cela ne fonctionne pas j'ai une erreur : argument non facultatif.

    N'est-ce pas possible de faire cela avec une structure If Then ?
    Tu as appeler la sub de la façon suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormulaireFerme "NomDuFormulaireClient"
    GillesDeVuif : des accents dans le code !

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Close acForm, "Client"
    Ferme le formulaire s'il est ouvert, et ne fait rien s'il ne l'est pas.
    En conséquence, je pense qu'il est inutile de tester si un formulaire est ouvert avant de le fermer.

    A+

  7. #7
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour.

    Mat08 a écrit
    "If le formulaire "Client" est ouvert Then Le fermer."

    Je me demande s'il n'y a pas erreur de terme : ne voulez vous pas dire "Si le formulaire est actif"?

    Car je ne vois pas l'intérêt de vouloir fermer un formulaire qui ne serait pas ouvert...

    Pierre

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Bonjour je vais m'expliquer plus clairement.

    J'ai deux cas possible et c'est pour ça que je pose cette question.

    Cas 1 : j'ai un formulaire 1, je clique sur un bouton qui ouvre un formulaire 2, je clique sur un bouton qui ouvre un formulaire 3 dont certain champs se remplissent par rapport au formulaire 2. Quand je clique sur le bouton du fomulaire 2 celui-ci se ferme.

    Aucun problème dans ce cas.

    Cas 2 :j'ai un formulaire 1, je clique sur un bouton qui ouvre un formulaire 2 bis, je clique sur un bouton qui ouvre un formulaire 2, je clique sur un bouton qui ouvre un formulaire 3 dont certain champs se remplissent par rapport au formulaire 2 et au formulaire 2 bis. Quand je clique sur le bouton du formulaire 2, celui-ci ainsi que le formulaire 2 bis doivent se fermer.

    Vous comprendrez donc qu'ici il y a un problème.

    Je ne peux pas mettre dans le code du formulaire 2 une commande qui ferme le formulaire 2 bis car quand celui-ci n'est pas actif j'obtient une erreur, ce qui est normal.

    Voilà pourquoi j'ai pensé à une structure If Then.

    Si vous répondez svp répondez précisemment à la question.

    Je rajoute une précision : ce morceaux de code doit s'intégrer dans une sub déja existante.

    Merci d'avance pour votre aide.

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 644
    Points : 34 351
    Points
    34 351
    Par défaut
    Salut,
    et si tu passais tes formulaires en mode modal ?

  10. #10
    Membre régulier Avatar de GillesDeVuif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 88
    Points : 110
    Points
    110
    Par défaut Ah bon !!
    Bonjour.
    Je tente de comprendre en quoi les réponses apportées ici te semblent imprécises, et en quoi les bouts de code proposés ne sont pas exploitables au sein d'une sub ...

    Essayes avec le post de Stigma sur le fil suivant :

    http://www.developpez.net/forums/d49...ulaire-ouvert/

    Si tu ne t'en sors pas avec çà ...
    Cordialement.

  11. #11
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Bonjour,

    Si tu veux vraiment tester si un formulaire est ouvert, tu peux utiliser une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Public Function Est_Ouvert(ArgNomForm As String) As Boolean
       On Error Goto ErrEO
       '
       Dim frm As Form
       '
       Set frm = Forms(ArgNomForm)
       Est_Ouvert = True
       Set frm = Nothing
       Exit Function
    ErrEO:
      Est_Ouvert = False
      Set frm = Nothing
      Exit Function
    End Function
    A utiliser comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Est_Ouvert(NomDuFormulaire) Then
    ...
    Else
    ...
    End If

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    Salut,
    et si tu passais tes formulaires en mode modal ?
    Je ne connais pas cette fonction.

    A quoi ça sert ?

  13. #13
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 644
    Points : 34 351
    Points
    34 351
    Par défaut
    Cela consiste à empêcher l'utilisateur de cliquer en dehors du formulaire tant que celui-ci est ouvert :
    http://access.developpez.com/faq/?pa...rm#EmpClickExt

    Tu t'assures ainsi que tes autres formulaires ne seront pas fermés...


    Tu vois l'idée ?

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Oui je vois mais ce n'est pas ce qui me convient.

    J'ai trouvé la solution avec une fonction qui vérifie si le formulaire est ouvert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function IsLoaded(ByVal chNomForm As String) As Boolean
        '---------------------------  Renvoie Vrai si le formulaire spécifié est chargé.
        Const conModeCréation = 0
        Const conEtatObjFermé = 0
        IsLoaded = False
        If SysCmd(acSysCmdGetObjectState, acForm, chNomForm) <> conEtatObjFermé Then
            If Forms(chNomForm).CurrentView <> conModeCréation Then IsLoaded = True
        End If
     
    End Function
    Puis j'utilise la structure IF THEN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If IsLoaded("Formulaire") Then DoCmd.Close acForm, "Formulaire"
    Merci à tous de votre aide.

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

Discussions similaires

  1. SI sans sinon (ne rien faire si faux)
    Par userparis dans le forum Excel
    Réponses: 3
    Dernier message: 31/03/2014, 12h36
  2. Réponses: 1
    Dernier message: 10/08/2011, 10h33
  3. Fermer un classeur via VBA que si il est ouvert
    Par dimitrios dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2006, 09h56
  4. Tester si un onglet est ouvert dans un formulaire
    Par dfournier dans le forum Access
    Réponses: 4
    Dernier message: 20/07/2006, 16h13
  5. Vérifier qu'un formulaire est ouvert
    Par com800 dans le forum WinDev
    Réponses: 2
    Dernier message: 07/04/2005, 20h27

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