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 :

Module ou PE [AC-2013]


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 433
    Points : 131
    Points
    131
    Par défaut Module ou PE
    Bonjour,
    Je dois créer une bd pour réaliser des devis d’installation de système de chauffage.
    Pour calculer la puissance nécessaire des appareils à installer, il faut, entre autre, connaître la TEBC (T° extérieure de base corrigée).

    Pour ce faire, il existe une base de T° appelée TEB (T° extérieure de base) qu’on sélectionne avec un tableau appelé « STATION ».

    Dans la BD il y a une table « STATION » dans laquelle se trouvent les informations nécessaires. Par exemple, si on prend AMBERIEU :
    - La station est à 252m d’altitude
    - La TEB est de -10°C

    Il y a une seconde table appelée « TEBC » qui corrige la T° extérieure suivant l’altitude réelle du terrain où se trouve la construction.

    Dans la table « DEVIS » il y a donc les informations sur la STATION (ALTSTATION, 3KM et 25KM) et l’altitude réelle du terrain (ALTTERRAIN).

    Lorsque je choisis la STATION lors de la saisie du Devis, le calcul de la TEBC doit se faire.

    Si 3km est coché c’est cette altitude qui est prise en compte, idem pour 25km. Pour le reste on choisit la station, qui a une certaine altitude et le TEBC se corrige si l’altitude réelle du terrain est différente de celle de la station.

    J’ai récupéré une BD inutilisée depuis longtemps qui n’a plus de liens ni relations. Dans les modules il y a cette fonction que j’ai adaptée aux noms de mes champs :

    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
    Function CalculTEBC()
     
        Dim Db As Database
        Dim fPrinc As Form
        Dim tStation As Recordset
        Dim tTebc As Recordset
        Dim TEB As Double
        Dim TEBC As Double
     
        Set Db = CurrentDb
        Set tStation = Db.OpenRecordset("STATION", dbOpenTable)
        Set tTebc = Db.OpenRecordset("TEBC", dbOpenTable)
        Set fPrinc = Forms!F_DEVIS
     
        tStation.MoveFirst
         Do Until tStation.EOF
            If tStation![CODSTATION] = fPrinc![CHAMPSTATION] Then
                If fPrinc![3MER] = True Then
                    TEB = tStation![TEB3KM]
                    fPrinc![TEBCDEVIS] = TEB
                    'Exit Function
                ElseIf fPrinc![25MER] = True Then
                    TEB = tStation![TEB25KM]
                    fPrinc![TEBCDEVIS] = TEB
                    'Exit Function
                ElseIf fPrinc![3MER] = False Then
                    TEB = tStation![TEB]
                End If
            End If
            tStation.MoveNext
        Loop
     
        Do Until tTebc.EOF
        If TEBDEVIS = tTebc![TEB] Then
            If fPrinc![ALTTERRAIN] >= tTebc![ALT1] And fPrinc![ALTTERRAIN] <= tTebc![ALT2] Then
            TEBC = tTebc![TEBC]
            End If
        End If
        tTebc.MoveNext
         Loop
        fPrinc![TEBCDEVIS] = TEBC
    End Function
    Il semble que cette fonction recherche bien l’information demandée, mais dans le formulaire Devis de cette ancienne BD je n’ai pas de procédure évènementielle qui s’y rattache.

    Etant novice en module, je ne sais pas comment l’utiliser.

    J’ai essayé de faire une PE « avant MAJ » sur le champ « TEBCDEVIS » en me basant sur cette formule :

    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
    Private Sub Texte25_BeforeUpdate(Cancel As Integer)
    Dim Db As Database
        Dim fPrinc As Form
        Dim tStation As Recordset
        Dim tTebc As Recordset
        Dim TEB As Double
        Dim TEBC As Double
     
        Set Db = CurrentDb
        Set tStation = Db.OpenRecordset("STATION", dbOpenTable)
        Set tTebc = Db.OpenRecordset("TEBC", dbOpenTable)
        Set fPrinc = Forms!F_DEVIS
     
    If Me.Ctl3MER = True Then
    Me.TEBCDEVIS = [STATION]![TEB3KM]
    End If
    Else
    If Me.Ctl25MER = True Then
    Me.TEBCDEVIS = [STATION]![TEB25KM]
    End If
    Else
    If Me.ALTTERRAIN >= [TEBC]![ALT1] And Me.ALTTERRAIN <= [TEBC]![ALT2] Then
    Me.TEBCDEVIS = [TEBC]![TEBC]
    End If
    End Sub
    Mais ça ne fonctionne pas.

    Quelqu’un aurait-il une idée pour faire fonctionner le module, ou bien une suggestion plus opportune ?

    Avec mes remerciements pour vos conseils,

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 547
    Points
    24 547
    Par défaut
    Bonjour,

    Tu déclares 2 recordset DAO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set tStation = Db.OpenRecordset("STATION", dbOpenTable)
        Set tTebc = Db.OpenRecordset("TEBC", dbOpenTable)
    Mais à aucun moment dans la suite de ton code tu ne les utilises.

    C'est peut-être là qu'est le problème.

    Cordialement,

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 433
    Points : 131
    Points
    131
    Par défaut
    Bonjour Loufab,

    J'ai modifié la PE comme ceci :

    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
    Private Sub Texte25_BeforeUpdate(Cancel As Integer)
    Dim Db As Database
        Dim fPrinc As Form
        Dim tStation As Recordset
        Dim tTebc As Recordset
        Dim TEB As Double
        Dim TEBC As Double
     
        Set Db = CurrentDb
        Set tStation = Db.OpenRecordset("STATION", dbOpenTable)
        Set tTebc = Db.OpenRecordset("TEBC", dbOpenTable)
        Set fPrinc = Forms!F_DEVIS
     
    If tStation![CODSTATION] = fPrinc![CHAMPSTATION] Then
    If fPrinc![3MER] = True Then
    fPrinc![TEBCDEVIS] = tStation![TEB3KM]
    Else
    If fPrinc![25MER] = True Then
    fPrinc![TEBCDEVIS] = tStation![TEB25KM]
    Else
    If fPrinc![3MER] = False Then
    TEB = tStation![TEB]
    End If
    End If
    tStation.MoveNext
    Loop
     
    Do Until tTebc.EOF
    If TEB = tTebc![TEB] Then
    If fPrinc![ALTTERRAIN] >= tTebc![ALT1] And fPrinc![ALTTERRAIN] <= tTebc![ALT2] Then
    fPrinc![TEBCDEVIS] = tTebc![TEBC]
    End If
     
    End Sub
    et j'ai essayé aussi comme ça :

    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
    Private Sub Texte25_BeforeUpdate(Cancel As Integer)
    Dim Db As Database
        Dim fPrinc As Form
        Dim tStation As Recordset
        Dim tTebc As Recordset
        Dim TEB As Double
        Dim TEBC As Double
     
        Set Db = CurrentDb
        Set tStation = Db.OpenRecordset("STATION", dbOpenTable)
        Set tTebc = Db.OpenRecordset("TEBC", dbOpenTable)
        Set fPrinc = Forms!F_DEVIS
     
    If tStation![CODSTATION] = fPrinc![CHAMPSTATION] Then
    If fPrinc![3MER] = True Then
    fPrinc![TEBCDEVIS] = tStation![TEB3KM]
    Else
    If fPrinc![25MER] = True Then
    fPrinc![TEBCDEVIS] = tStation![TEB25KM]
    Else
    If fPrinc![3MER] = False Then
    TEB = tStation![TEB]
    End If
    End If
     
    Else
     
    If TEB = tTebc![TEB] Then
    If fPrinc![ALTTERRAIN] >= tTebc![ALT1] And fPrinc![ALTTERRAIN] <= tTebc![ALT2] Then
    fPrinc![TEBCDEVIS] = tTebc![TEBC]
    End If
     
    End Sub
    Donc je pense avoir intégrer les 2 recordset (si j'ai bien compris ton post) et pourtant il ne se passe rien...le champ ne se remplit pas...

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 547
    Points
    24 547
    Par défaut
    Au niveau algo il n'y a rien de particulier.

    1 chose m'interpelle c'est que tu ouvres des recordset tu testes des valeurs mais de quel enregistrement ?

    Je pense que pour y voir plus clair tu devrais faire du mode pas-à-pas.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 433
    Points : 131
    Points
    131
    Par défaut
    Bonjour Loufab,

    En fouillant dans l'ancienne bd, j'ai trouvé une Macro "ExécuterCode" qui était sur le champ "CHAMPSTATION" et donc qui exécute le module "CalculTEBC ()".

    Lorsque je change de Station dans le devis, il y a une erreur d'exécution 2450, qui dit "Microsoft Access ne trouve pas le formulaire "F_DEVIS" auquel il fait référence" et la ligne "Set fPrinc = Forms!F_DEVIS" est jaune.

    Donc lorsque tu dis: "1 chose m'interpelle c'est que tu ouvres des recordset tu testes des valeurs mais de quel enregistrement ?", dois-je comprendre qu'il n'y a pas de lien entre la table DEVIS et la table STATION, pourtant j'ai bien une relation entre elles ?

    Cordialement

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 547
    Points
    24 547
    Par défaut
    Lorsque tu ouvres un Recordset sur une table il n'a aucun lien avec un formulaire qui affiche la même table. Ils affichent les mêmes informations mais le curseur n'est pas forcément placé sur le même record.


    Sachant que tu veux récupérer une valeur du tuple Station/Tbec je commencerais par créer une requête qui remonte ces tuples.

    Puis j'ouvrirais directement le Recordset sur cette requête en utilisant la (les?) valeurs de ton formulaire comme filtre (le if dans ton code).

    Enfin j'affecterais les valeurs à mon formulaire.

    A moins que je n'ai pas bien compris le code que tu as récupéré parcours la table en comparant les valeurs du rst et du frm, ce qui est moche, lent difficile à lire et donc à maintenir.

    Cordialement,

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 433
    Points : 131
    Points
    131
    Par défaut
    Bonjour Loufab,

    Hier j'ai créé 2 requêtes : 1 requête R TEBC (T STATION + T TEBC), pour que les T° correspondent aux différentes altitudes et 1 requête R TEBC DEVIS (T DEVIS + R TEBC DEVIS) pour récupérer la TEBC.

    Dans la requête DEVIS j'ai ajouter la R TEBC DEVIS pour afficher la TEBC.Quand je vais dans le formulaire, la TEBC s'affiche. Le problème c'est que je n'ai plus la possibilité de changer la station ou l'altitude et si je retire la R TEBC DEVIS de la requête R DEVIS, je peux modifier la station et l'altitude mais la TEBC ne s'affiche plus.

    J'ai essayé de créer un champ indépendant avec la source suivante : [R TEBC DEVIS]![TEBC] mais rien ne s'affiche...

    Il y a un truc qui coince mais je n'arrive pas à comprendre quoi...

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 547
    Points
    24 547
    Par défaut
    Bonjour,

    En effet plusieurs choses coincent.

    La requête de f devis n'est pas modifiable.
    Les noms avec des espaces c'est galère à gérer.
    Le montage (zone liste) ne correspond pas du tout au fonctionnement que tu décris.
    On a dû mal se comprendre sur la solution que j'ai envisagé.

    Voici ton formulaire modifié.

    DEVISPAC2_modifie.zip
    • on choisi la station dans l'IHM
    • on filtre la requête sur cette station
    • on affecte les valeurs 3km / 25km
    • on recherche l'altitude correspondante
    • on affecte la valeur dans le formulaire.


    L'écriture avec des ! est préhistorique et pas pratique du tout. cf mon article http://blogaccess.free.fr/?p=197

    Cordialement,

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 433
    Points : 131
    Points
    131
    Par défaut
    Bonjour Loufab,

    Je viens de récupérer tes modifications, effectivement ça n'e rien à voir avec ce que je pensais faire et ça fonctionne parfaitement.

    Je te remercie pour ton aide et pour tes conseils.

    Bien cordialement,
    Maringot

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

Discussions similaires

  1. Module FTP.pm ?
    Par MSP dans le forum Modules
    Réponses: 4
    Dernier message: 04/08/2003, 15h49
  2. module Find
    Par martijan dans le forum Modules
    Réponses: 8
    Dernier message: 09/07/2003, 11h07
  3. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  4. PerlDoc sur une fonction d'un module
    Par lesouriciergris dans le forum Modules
    Réponses: 2
    Dernier message: 13/03/2003, 20h50

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