Salut grasduslip,
Voici ta table que je vais nommer TaTable:
NumFicheIndicateur NumSite AnneeFiche QuantiteMetal
1 1 2004 120
2 2 2004 210
3 1 2005 150
4 2 2005 160
Tofalu a écrit:
RechDom("QuantiteMetal","TaTable","AnneeFiche=" & AnneeFiche-1
)
VBA ne reconnait pas RechDom, mais DLookUp. Et garsduslip a mal interprété la proposition de Tofalu. Il fallait écrire de la manière suivante:
Me.txtQuantiteMetal=DLookUp("[QuantiteMetal]","TaTable","[AnneeFiche]=[AnneeFiche]-1 AND [NumSite]=1)
Car tu veux avoir la valeur de la quantité de métal de l'année précédente pour le site concerné, non? Et si l'année précédente n'est pas Année en cours -1? Car il se peut qu'en 2005 (ce n'est qu'une suggestion!) il n'y en avait pas de quantité mais c'est en 2004. En gros le problème devrait se poser comme suit: retrouver la quantité de métal d'une année antérieur la plus proche pour un site précis!
Dans ce cas, essayons quelques codes:
Il faut obtenir l'année de l'enregistrement en cours, le site en cours afin d'obtenir une quantité antérieure la plus proche.
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 AnneeFiche_Exit(Cancel As Integer)
'Déclaration des variables
Dim xSite As Long, xAnnee As Long, xQté As Long
xQté = 0
xSite = Me.NumSite
xAnnee = Me.AnneeFiche
'Déclaration des variables objets
Dim db As DAO.Database, tbl As DAO.Recordset
Set db = CurrentDb
'tbl sélectionne le premier champ QuantiteMetal correspondant à l'année et au site. trié de manière décroissante par l'année
Set tbl = db.OpenRecordset("SELECT TOP 1 TaTable.QuantiteMetal " & _
"FROM TaTable " & _
"WHERE TaTable.NumSite=" & xSite & " AND TaTable.AnneeFiche<" & xAnnee & " " & _
"ORDER BY TaTable.AnneeFiche DESC;", dbOpenDynaset)
With tbl
If .RecordCount <> 0 Then
.MoveFirst
xQté = .Fields(0).Value
Else
xQté = 0
End If
.Close
End With
'Libération des ressources
Set tbl = Nothing
Set db = Nothing
'Je ne veux pas modifier la valeur si la quantité est différent de zéro
If Me.QuantiteMetal <> 0 Then Exit Sub
Me.QuantiteMetal = xQté
End Sub |
Je te passe en fichier joint le fichier access illustrant tout ceci!
Partager