Bonjour,
Il y a quelques semaines, j'ai demandé votre aide pour mettre en place un code VBA.
Le principe était le suivant : pour calculer la puissance nécessaire des appareils de chauffage à 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.
Avec votre aide, le code suivant a été mis en place sur l'évènement APRES MAJ du champs "ALTTERRAIN" :
Le problème est que pour que le code fonctionne je dois systématiquement remplir le champs "ALTTERRAIN" sinon ça bug et la ligne
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 Private Sub ALTTERRAIN_AfterUpdate() Dim Db As Database Dim rTebc As Recordset Dim TEB As Double Dim TEBCDEVIS As Double Set Db = CurrentDb Set rTebc = Db.OpenRecordset("SELECT * FROM [R TEBC] WHERE [CODSTATION] =""" & Me.CHAMPSTATION.Value & """;", dbOpenSnapshot) If Me.Controls("3MER").Value Then TEB = rTebc.Fields("TEB3KM").Value Me.TEBCDEVIS = TEB3KM ElseIf Me.Controls("25MER").Value Then TEB = rTebc.Fields("TEB25KM").Value Me.TEBCDEVIS = TEB25KM ElseIf Not Me.Controls("3MER").Value Then TEB = rTebc.Fields("TEB").Value End If rTebc.FindFirst Me.ALTTERRAIN & ">=[ALT1] And " & Me.ALTTERRAIN & "<=[ALT2]" If Not rTebc.NoMatch Then Me.TEBCDEVIS.Value = rTebc.Fields("TEBC").Value End If rTebc.Close Set rTebc = Nothing Db.Close Set Db = Nothing End Sub
rTebc.FindFirst Me.ALTTERRAIN & ">=[ALT1] And " & Me.ALTTERRAIN & "<=[ALT2]"
est jaune, or j'aurais souhaité que le champs soit renseigné automatiquement.
Je m'explique : en choisissant une station celle-ci à une altitude (ALTSTATION), donc j'aimerais que le champs ALTTERRAIN prenne cette information par défaut pour réaliser le calcul. Mais si je saisis dans le champs ALTTERRAIN une altitude différente que le calcul se fasse après MAJ.
J'ai essayé d'ajouter dans le code ceci :
...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
26
27
28
29
30
31
32
33 Private Sub ALTTERRAIN_AfterUpdate() Dim Db As Database Dim rTebc As Recordset Dim TEB As Double Dim TEBCDEVIS As Double Set Db = CurrentDb Set rTebc = Db.OpenRecordset("SELECT * FROM [R TEBC] WHERE [CODSTATION] =""" & Me.CHAMPSTATION.Value & """;", dbOpenSnapshot) If Me.ALTTERRAIN Is Nul Then Me.ALTTERRAIN = [STATION]![ALTSTATION] End If If Me.Controls("3MER").Value Then TEB = rTebc.Fields("TEB3KM").Value Me.TEBCDEVIS = TEB3KM ElseIf Me.Controls("25MER").Value Then TEB = rTebc.Fields("TEB25KM").Value Me.TEBCDEVIS = TEB25KM ElseIf Not Me.Controls("3MER").Value Then TEB = rTebc.Fields("TEB").Value End If rTebc.FindFirst Me.ALTTERRAIN & ">=[ALT1] And " & Me.ALTTERRAIN & "<=[ALT2]" If Not rTebc.NoMatch Then Me.TEBCDEVIS.Value = rTebc.Fields("TEBC").Value End If rTebc.Close Set rTebc = Nothing Db.Close Set Db = Nothing End Sub
Je joints la BD pour plus de compréhension (le caclcul se fait dans le formulaire devis)
Pièce jointe 434172
Dans l'attente de vos conseils
Partager