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

Access Discussion :

Formulaire ouvert ?!


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut Formulaire ouvert ?!
    Salut,

    Je porte sur moi tout le poids de ma honte , mais voilà : j'ai bien fais mes devoirs et suis allé sur le FAQ pour trouver solution à mon problème et miracle, voilà un chapitre qui répond à ma question...

    COMMENT SAVOIR SI UN FORMULAIRE EST OUVERT.

    Sauf que
    primo, je ne sais pas ou placer correctement le nom de mon formulaire dans les codes ci-dessous...
    Secondo, je ne sais pas ou récupérer l'information issue d'un module.

    Promis, dans une prochaine vie je fais des études d'informatique et j'arrête de faire C... avec des questions à la C...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function IsLoaded(ByVal strFormName As String) As Integer 
     ' Retourne True si le formulaire spécifié est ouvert.
     
        Const conObjStateClosed = 0
        Const conDesignView = 0
     
        If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
            If Forms(strFormName).CurrentView <> conDesignView Then
                IsLoaded = True
            End If
        End If
    End Function
    Autre solution :


    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 is_form_opened(fname As String) As Boolean 
     
    On Error GoTo not_opened
    Dim LeFichier As String
     
    LeFichier = Forms(fname).Name
    is_form_opened = True
    Exit Function
     
    not_opened: If (Err.Number = 2450) Then
         is_form_opened = False
         err.clear
    End If
     
    End Function

  2. #2
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bon alors je suis pas un pro non plus mais pour la 1ère solution je remplacerais "strFormName" par le nom du formulaire et dans le 2ème code,c'est "fname" que je remplacerais.

    Désolé si ce n'est pas ca

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Ok, et comment se passe la récupération de l'information ?

  4. #4
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    Il ne faut pas remplacer pas les termes comme le dit Qtronix (désolé!), mais seulement utiliser ces fonctions. Comment ?

    Ok mais avant quand et pourquoi as-tu besoin de savoir si un formulaire X est ouvert ? et que dois-tu faire si ce Frm est ouvert ou non ?

    Salut,

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bon bah désolé d'avoir dit des bétises,promis je le ferais plus

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    J'effectue une dizaine de requêtes pour le calcul de CA, bénéfice sur affaires, etc... (pas de question, j'ai réellement besoin d'autant de requêtes)

    Je souhaiterai pouvoir utiliser ces mêmes requêtes pour avoir les mêmes résultats par client et par fournisseur en utilisant la page client ou fournisseur ouverte. Sauf que si je met met le n° Client et le n° Fournisseur en critère de tri, les requêtes ne fonctionnent plus puisque les formulaires clients et fournisseurs ne peuvent être ouverts en même temps.

    Il me faut donc savoir si l'un ou l'autre est ouvert pour le mettre en condition de l'application de tel ou tel critère

    Voilà ce que ca peut donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCTROW [Formulaires]![CLIENGEN] AS FORMULAIRE CLIENT, Commandes.codeclient, [Formulaires]![FOURGEN] AS FORMULAIRE FOURNISSEUR, 
     
    Commandes.codefournisseur, Right([DFact],2) AS Année, [Revente détails].Quant, [Revente détails].PU, [Revente détails].Dev, [Revente détails].DFact, [PU]*[Quant] AS [Montant Dép], Int(100*[Montant Dép]/[taux/1euro])/100 AS dépeuro
     
    FROM Commandes INNER JOIN ([Revente détails] LEFT JOIN devise ON [Revente détails].Dev = devise.devise) ON Commandes.[n° TECMA] = [Revente détails].[N°TecL]
    WHERE ((([Formulaires]![CLIENGEN])="EST OUVERT") AND ((Commandes.codeclient)=[Formulaires]![CLIENGEN]![N° client]) AND (([Formulaires]![FOURGEN])="EST OUVERT") AND ((Commandes.codefournisseur)=[Formulaires]![FOURGEN]![N° four]) AND (([Revente détails].PU)<0) AND (([Revente détails].DFact) Is Not Null));

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Si allé un peu vite avant, ...

    Voilà qui est plus juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCTROW [Formulaires]![CLIENGEN] AS FORMULAIRECLIENT, Commandes.codeclient, [Formulaires]![FOURGEN] AS FORMULAIREFOURNISSEUR, Commandes.codefournisseur, Right([DFact],2) AS Année, [Revente détails].Quant, [Revente détails].PU, [Revente détails].Dev, [Revente détails].DFact, [PU]*[Quant] AS [Montant Dép], Int(100*[Montant Dép]/[taux/1euro])/100 AS dépeuro
    FROM Commandes INNER JOIN ([Revente détails] LEFT JOIN devise ON [Revente détails].Dev = devise.devise) ON Commandes.[n° TECMA] = [Revente détails].[N°TecL]
     
    WHERE ((([Formulaires]![FOURGEN])="EST OUVERT") AND ((Commandes.codefournisseur)=[Formulaires]![FOURGEN]![N° four]) AND (([Revente détails].PU)<0) AND (([Revente détails].DFact) Is Not Null)) OR ((([Formulaires]![CLIENGEN])="EST OUVERT") AND ((Commandes.codeclient)=[Formulaires]![CLIENGEN]![N° client]) AND (([Revente détails].PU)<0) AND (([Revente détails].DFact) Is Not Null)) OR ((([Formulaires]![CLIENGEN])="EST FERME") AND (([Formulaires]![FOURGEN])="EST FERME") AND (([Revente détails].PU)<0) AND (([Revente détails].DFact) Is Not Null));
    "EST OUVERT" et "EST FERME" correspondent à l'information que je cherche à récupérer

  8. #8
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Re,

    Bon ben tu peux faire appel à une fonction comme ceci en modifiant un peu ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WHERE CritereClient()  AND CritereFour() 
         AND (([Revente détails].PU)<0) 
         AND (([Revente détails].DFact) Is Not Null) ;
    CritereClient() et CritereFour() sont des fonctions que tu vas créer et qui vont te permettre de tester l'existence des Frm, et ainsi construire la chaine de recherche pour chaque cas.

    Utilises un module dans lequel tu places les lignes de code suivantes :

    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
     
    Public Function CritereClient()
    '
    ' Critere si Frm Client ouvert
    '
     
      ' Appel de la fonction IsLoaded
      If IsLoaded("ClienGen") Then ' retourne Vrai si ouvert/chargé
         CritereClient = " ( Commandes.codeclient = " & Forms("clienGen").[N° client] & ") "
      Else
        CritereClient = " true "
      End If
     
    End Function
     
    Public Function CritereFour()
    '
    ' Critere si Frm Four ouvert
    '
      If IsLoaded("FourGen") Then
        CritereFour = " ( Commandes.codefournisseur=" &     forms("FOURGEN")![N° four] & ") " 
      Else
        CritereFour = " true "
      End If
     
    End Function
    Bonne continuation,
    Salut,

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Ci dessous le code tapé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCTROW CritereClient(), Commandes.codeclient, CritereFour(), Commandes.codefournisseur, Right([DFact],2) AS Année, [Revente détails].Quant, [Revente détails].PU, [Revente détails].Dev, [Revente détails].DFact, [PU]*[Quant] AS [Montant Dép], Int(100*[Montant Dép]/[taux/1euro])/100 AS dépeuro
    FROM Commandes INNER JOIN ([Revente détails] LEFT JOIN devise ON [Revente détails].Dev = devise.devise) ON Commandes.[n° TECMA] = [Revente détails].[N°TecL]
    WHERE (((CritereFour())=True) AND ((Commandes.codefournisseur)=[Formulaires]![FOURGEN]![N° four]) AND (([Revente détails].PU)<0) AND (([Revente détails].DFact) Is Not Null)) OR (((CritereClient())=True) AND ((Commandes.codeclient)=[Formulaires]![CLIENGEN]![N° client]) AND (([Revente détails].PU)<0) AND (([Revente détails].DFact) Is Not Null)) OR (((CritereClient())=False) AND ((CritereFour())=False) AND (([Revente détails].PU)<0) AND (([Revente détails].DFact) Is Not Null));
    Lors de l'execution de la requête, il me demande de saisir le N° four et le N° client faisant abstraction des conditions vrai ou faux appliquées aux critères...

    Ensuite acces me trouve une erreur dans le module : Erreur de compilation : Sub ou fonction non défini. et il pointe la fonction "isloaded"

    NB : suis sous access 97...

  10. #10
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Re,

    Pour la fonction IsLoaded() non reconnu, ajoute le terme Public :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Code:
    Public Function IsLoaded(ByVal strFormName As String) As Integer
    Pour la requête par contre y faut juste recopier ce que j'ai écris, sans plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WHERE CritereClient()  AND CritereFour()
         AND (([Revente détails].PU)<0)
         AND (([Revente détails].DFact) Is Not Null) ;
    et surtout pas remettre les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ((Commandes.codefournisseur)=[Formulaires]![FOURGEN]![N° four])
    et 
    ((Commandes.codeclient)=[Formulaires]![CLIENGEN]![N° client])
    Salut,

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Aïe Aïe Aïe,

    L'ajout du code dans la fonction dans la fonction IsLoaded() m'a généré une erreur de compilation sur le code "Droite([DLC];2)"... (plus aucune requête ne fonctionne)

    Mon problème est que même si j'applique tes instructions, je n'y comprend pas grand chose et celà me gêne un poil.
    N'est-il pas possible d'ajouter la fontion "isloaded" comme critère dans la requête ? genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Formulaires]![CLIENGEN]) isloaded
    Bon, dans les fais celà ne marche pas...

    Je vais devoir quitter le forum d'ici peu, ne t'étonnes pas de ne plus avoir de retour aujourd'hui

  12. #12
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Re,

    Dans la requete tu peux écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      .....     IsLoaded("ClienGen") = True And.....
    Salut,

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Voilà qui me plaisait bien sauf que maintenant le message d'erreur est : Isloaded non défini dans la fonction.

    La fonction existe t-elle sous Access 97 ? J'essaye à la maison ce soir sous access 2000.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    En fait il faut chercher la fonction dans la base exemple "les comptoirs".

    Dito l'aide Access

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Ca fonctionne !

    Il faut copier le module "utilitaires" et utiliser la fonction "EstChargé" (IsLoaded ne fonctionne pas)...

    Merci Trini, ta solution est sans aucun doute plus académique, mais elle dépasse de loin le cadre de mes connaissances (et j'aime comprendre ce que je fais...

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Enfin, ca fonctionne presque...

    Avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCTROW Commandes.codeclient, Commandes.codefournisseur, Right([DLC],2) AS Année, [Revente détails].Quant, [Revente détails].PU, [Revente détails].Dev, [Revente détails].DLC, [Revente détails].DFact, [PU]*[Quant] AS [Montant Dép], Int(100*[Montant Dép]/[taux/1euro])/100 AS dépeuro
    FROM Commandes INNER JOIN ([Revente détails] LEFT JOIN devise ON [Revente détails].Dev = devise.devise) ON Commandes.[n° TECMA] = [Revente détails].[N°TecL]
    WHERE ((([Revente détails].PU)<0) AND (([Revente détails].DLC) Is Not Null) AND (([Revente détails].DFact) Is Null) AND ((EstChargé("FourGen"))=False) AND ((EstChargé("ClienGen"))=False)) OR (((Commandes.codefournisseur)=[Formulaires]![FOURGEN]![N° four]) AND (([Revente détails].PU)<0) AND (([Revente détails].DLC) Is Not Null) AND (([Revente détails].DFact) Is Null) AND ((EstChargé("FourGen"))=True) AND ((EstChargé("ClienGen"))=False)) OR ((([Revente détails].PU)<0) AND (([Revente détails].DLC) Is Not Null) AND (([Revente détails].DFact) Is Null) AND ((EstChargé("FourGen"))=False) AND ((EstChargé("ClienGen"))=True) AND ((EstChargé("ClienGen")=True & "codeclient")=[Formulaires]![CLIENGEN]![N° client]));
    Lors de l'execution de la requête, il me faut valider les boites msg vides de codeclient et/ou codefour si l'un ou l'autre formulaire n'est pas chargé.

    Le résultat est cependant correct

    Encore une idée ???

  17. #17
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Re,

    Ben supprimer tout simplement les Msgbox qui se trouvent dans la fonction EstChargé(), Non ?

    Salut,

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Ben il s'agit en fait des critères d'équivalence liés au formulaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Commandes.codefournisseur)=[Formulaires]![FOURGEN]![N° four]
    Je pensais qu'en mettant des critères tels que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (((Commandes.codefournisseur)=[Formulaires]![FOURGEN]![N° four])))AND((EstChargé("FourGen"))=True) AND ((EstChargé("ClienGen"))=False))
    Access n'irait pas chercher dans une autre ligne telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((EstChargé("FourGen"))=False) AND ((EstChargé("ClienGen"))=True) AND (("codeclient")=[Formulaires]![CLIENGEN]![N° client]));
    Comment lui faire comprendre que si une solution se vérifie, il ne faut pas aller en chercher une autre ???
    Par la multiplication des requêtes, mais c'est que je cherche à éviter !!!

  19. #19
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    C vrai que VB évalue chaque condition, ce qui peut être génant, comme dans ton cas de figure.

    C pourquoi je proposais une soluce avec la création des 2 fonctions CritereClient() et CritereFour(), moi je vois que ça.
    Quelqu'un a peut-être une autre idée ?

    Salut,

  20. #20
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 45
    Points : 37
    Points
    37
    Par défaut
    Bonjour,
    J'ai eu le meme genre de probleme que neuro, j'ai donc utilisé ta solution Trini, mais la fonction que j'ai crée sur le modèle de criterefour() ne me renvois pas mon critere dans la requete puisque celle-ci me renvoie tout les enregistrement :
    Me requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT data_base.coordinateur
    FROM data_base
    WHERE CritereChoixCoordinateur();
    et ma fonction CritereChoixCoordinateur :

    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
     
    Public Function CritereChoixCoordinateur()
    '
    ' Critere si Frm Client ouvert
    '
     
      ' Appel de la fonction IsLoaded
      If IsLoaded("choix_coordinateur") Then ' retourne Vrai si ouvert/chargé
        Select Case Forms.choix_coordinateur.statut
            Case 1
                CritereChoixCoordinateur = "data_base.coordinateur = forms.choix_coordinateur.coordinateur"
        End Select
      Else
        CritereChoixCoordinateur = " true "
      End If
     
    End Function

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [FAQ] Fermer tous les formulaires ouverts
    Par guigui5931 dans le forum Contribuez
    Réponses: 19
    Dernier message: 15/02/2024, 16h57
  2. simuler un click sur un formulaire ouvert
    Par supernova dans le forum Access
    Réponses: 4
    Dernier message: 08/09/2006, 10h45
  3. Un seul formulaire ouvert plusieurs fois
    Par BMABMA dans le forum IHM
    Réponses: 8
    Dernier message: 18/08/2006, 18h40
  4. Réponses: 12
    Dernier message: 21/06/2006, 09h58
  5. Réponses: 12
    Dernier message: 27/12/2005, 13h16

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