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 :

Ouverture / Fermeture de formulaires liés


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut Ouverture / Fermeture de formulaires liés
    Bonjour,
    J'ai deux formulaires qui dépendent l'un de l'autre : l'un sert à filtrer les informations qui seront affichés dans le second.
    Lorsque je lance uniquement le premier un message d'erreur apparait disant qu'il ne connait pas le second formulaire. Par contre si jamais j'ai ouvert le second formulaire alors tout fonctionne...
    Je vous joins mon code pour aider
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Private Sub ouv_form_filtre_Click()
    On Error GoTo Err_ouv_form_filtre_Click
     
        Dim stDocName As String
        Dim stLinkCriteria As String
     
        compt = 0
        Dim sql As String
        sql = "SELECT [1-FICHE_ECHOUAGE].num_collec FROM [1-FICHE_ECHOUAGE] WHERE"
        MsgBox (sql)
        ' on recupère les cases cochées
        If espece_coch.Value = -1 Then
            compt = compt + 1
            liste_espece.SetFocus
            Dim esp As String
            esp = liste_espece.Text
            Forms!FICHE_Verification_ac_filtre!Texte11.DefaultValue = """" & liste_espece.Text & """"
            req_espece = "SELECT E_Code_Espece.esp_id FROM E_Code_Espece WHERE E_Code_Espece.esp_nom_francais = " & Texte11.DefaultValue & ";"
            Set rep3 = CurrentDb.OpenRecordset(req_espece)
            sql = sql + " (([1-FICHE_ECHOUAGE].esp_id) = " & rep3(0) & ") "
            End If
     
        If sexe_coch.Value = -1 Then
            liste_sexe.SetFocus
            sex = liste_sexe.Value
            Forms!FICHE_Verification_ac_filtre!Texte4.DefaultValue = Forms!FICHE_filtre!liste_sexe.Value
            If compt <> 0 Then
                sql = sql + " AND (([1-FICHE_ECHOUAGE].code_sexe) = " & Texte4.DefaultValue & ")) "
            Else
                sql = sql + " (([1-FICHE_ECHOUAGE].code_sexe) = " & Texte4.DefaultValue & ")) "
                End If
            compt = compt + 1
            End If
     
        If zone_coch.Value = -1 Then
            liste_zone.SetFocus
            Forms!FICHE_Verification_ac_filtre!Texte13.DefaultValue = """" & Forms!FICHE_filtre!liste_zone.Text & """"
            If compt <> 0 Then
                sql = sql + " AND ((([1-FICHE_ECHOUAGE].code_zone) = " & Texte13.DefaultValue & ") "
            Else
                sql = sql + " ((([1-FICHE_ECHOUAGE].code_zone) = " & Texte13.DefaultValue & ") "
                End If
            compt = compt + 1
            End If
        If compt <> 0 Then
            sql = sql + " ORDER BY [1-FICHE_ECHOUAGE].num_collec DESC; "
            MsgBox (sql)
        Else
            MsgBox "Vous n'avez rien coché !"
            End If
        Forms!FICHE_Verification_ac_filtre!nb_coch = compt
         stDocName = "FICHE_Verification_ac_filtre"
         DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    Exit_ouv_form_filtre_Click:
        Exit Sub
     
    Err_ouv_form_filtre_Click:
        MsgBox Err.Description
        Resume Exit_ouv_form_filtre_Click
     
    End Sub

  2. #2
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    912
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 912
    Points : 1 371
    Points
    1 371
    Par défaut
    Re-salut,

    Le problème vient de cette dernière ligne, je pense:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If espece_coch.Value = -1 Then
            compt = compt + 1
            liste_espece.SetFocus
            Dim esp As String
            esp = liste_espece.Text
            Forms!FICHE_Verification_ac_filtre!Texte11.DefaultValue = """" & liste_espece.Text & """"
    car tu mets une valeur dans ta forme FICHE_Verification_ac_filtre qui n'est pas encore ouverte. Dans chacun de tes IF tu fais quelque chose du genre.

    Autre problème en perspective:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Je ne vois pas où tu définis stLinkCriteria. Si c'est ta variable sql que tu veux utiliser, elle ne conviendra pas car la doc dit
    "WhereCondition Optional Variant. A string expression that's a valid SQL WHERE clause without the word WHERE."

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut
    Désolée j'ai oublié de le marquer mais le stLinkCriteria est bien précisé au-dessus.
    Je vais donc essayer en mettant les lignes d'ouverture au début, mais est-ce que mes lignes d'après seront bien executées avant l'apparition du second formulaire ?

  4. #4
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    912
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 912
    Points : 1 371
    Points
    1 371
    Par défaut
    Non je ne pense pas.
    Mais ce que tu fais me semble étrange: pourquoi comparer des données de ton filtre et des données de l'écran de liste avant de rafraîchir cette liste ?
    Si c'est vraiment ce que tu veux faire, remplace ton dernier DoCmd.OpenForm par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Forms!FICHE_Verification_ac_filtr.Filter=stLinkCriteria 
    Forms!FICHE_Verification_ac_filtr.FilterOn=true
    Forms!FICHE_Verification_ac_filtr.Requery

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut
    En fait je doit mettre ces champs à jour car le nouveau formulaire va devoir les utiliser pour faire des requêtes pour afficher les données voulues. Vu que c'est un formulaire sans lien actif vers les tables il me semble que je suis obligée de faire cela.
    Mon problème est le suivant : si je mets le OpenForm en début de procédure, cela lance ma procédure liée à l'ouverture de formulaire... OR je voudrais que s'exécute d'abord ce qui suit OpenForm avant que cela ne lance l'ouverture du formulaire.
    Est-il possible de faire une ouverture en mode création ????
    Merci pour l'aide

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut
    Si ce n'est pas possible d'ouvrir l'autre formulaire en mode création, afin d'éviter le lancement de la procédure liée à l'ouverture, est-ce possible de faire appel à la fonction d'un autre formulaire ??
    En effet, dans ce cas je refais appel à la procédure liée à l'ouverture du formulaire pour remettre à jour mon second formulaire.
    Merci pour votre aide

  7. #7
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    912
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 912
    Points : 1 371
    Points
    1 371
    Par défaut
    De manière générale, je pense qu'il y a un problème de conception, car tu sembles tourner en rond.

    1) Si tu persistes dans cette direction et si je comprends bien, dans FICHE_Verification_ac_filtr tu as un Form_Open que tu veux n'exécuter qu'en fin de processus.

    Tu as bien une possibilité de faire un Load de la forme, qui ne déclenchera pas le Form_Open mais uniquement le Form_Load (alors qu'un DoCmd.OpenForm déclenche les deux). De mémoire, je ne pense pas qu'après le Load tu pourras accéder les champs. A essayer.

    Sinon, tu peux utiliser la possibilité du DoCmd.OpenForm de passer des arguments supplémentaires:
    expression.OpenForm(FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)

    que tu peux récupérer via me.OpenArgs
    Donc tu pourrais plutôt que ton filtre mette à jour les champs de la 2ème forme, lui passer des arguements qui lui permettront de positionner ses champs convenablement.

    Autre possibilité, ce que tu fais dans FICHE_Verification_ac_filtr.Form_Open tu le déplaces dans une autre Subroutine, que tu appelles en fin de process, comme ça elle ne se déclenche plus automatiquement

    2) J'aurais tendance à inverser le processus
    L'utilisateur ouvre directement la liste, et un bouton lui permet d'ouvrir la filtre, ou tu ouvres le filtre automatiquement, comme ça tu es sûr que les 2 formes sont ouvertes. C'est comme ça que je procède, un cran plus sophistiqué, mais c'est cette idée que j'utilise chaque fois.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut
    Merci pour ta réponse.
    Je pense que je pencherai plus pour le fait de déplacer ma procédure dans une subroutine et de l'appeler à la fin de mon process.
    Mon seul problème est le suivant : comment fait-on pour appeler une procédure d'un autre formulaire ?
    Merci pour ton aide lvr

  9. #9
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    912
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 912
    Points : 1 371
    Points
    1 371
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!FICHE_Verification_ac_filtr.MyNewSub arg1, agr2, ...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut
    Merci!
    J'ai utilisé cette formule mais lors de l'exécution de la procédure j'ai le message d'erreur suivant qui apparait "Erreur définie par l'application ou par l'objet".
    Qu'est-ce que cela signifie ???
    Voici comment je l'appelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!FICHE_Verification_ac_filtre.ouverture_MAJ
    Et voici la tête de ma 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
    16
    Private Sub ouverture_MAJ()
        Dim lngDerId As Long
        Dim req_ID As String
     
        req_ID = nb_coch.DefaultValue
        req_ID_bis = Replace(req_ID, """", "")
        Set rep = CurrentDb.OpenRecordset(req_ID_bis)
        If (Not (rep.EOF)) Then
            lngDerId = rep(0)
            MsgBox (" Dernier numéro de collection : " & lngDerId)
            Texte0.DefaultValue = lngDerId
            MAJ (lngDerId)
        Else
            MsgBox ("Vous n'avez pas d'enregistrements correspondant à ces critères !")
        End If
    End Sub
    Merci pour l'aide

  11. #11
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    912
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 912
    Points : 1 371
    Points
    1 371
    Par défaut
    1) Ajoute une gestion d'erreur dans ta routine Ouverture_Maj.
    2) Ta routine est Private, met la Public si tu veux qu'elle soit appellable depuis une autre forme.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut
    Il fallait effctivement passer ma procédure en mode Public!
    Merci énormément pour l'aide

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

Discussions similaires

  1. Effet Visuel d'ouverture et fermeture de formulaire
    Par robyseb dans le forum Contribuez
    Réponses: 1
    Dernier message: 21/08/2012, 20h06
  2. [AC-2003] Bug: Fermeture d'Access à l'ouverture d'un formulaire
    Par Norin dans le forum Access
    Réponses: 2
    Dernier message: 24/06/2012, 13h46
  3. [AC-2003] mettre un timer pour ouverture/fermeture d'un formulaire
    Par blandinais dans le forum IHM
    Réponses: 2
    Dernier message: 24/01/2010, 12h16
  4. Réponses: 3
    Dernier message: 28/01/2009, 02h48
  5. [Formulaire][00]Ouverture Fermeture formulaire
    Par ThieBEN dans le forum IHM
    Réponses: 2
    Dernier message: 06/06/2007, 09h51

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