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 :
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.
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
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 :
Mais ça ne fonctionne pas.
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
Quelqu’un aurait-il une idée pour faire fonctionner le module, ou bien une suggestion plus opportune ?
Avec mes remerciements pour vos conseils,
Partager