Re-bonjour
J’ai trouvé 2 solutions:
Prérequis:
- Une table StocksMois avec champs mois, initialstock, Finalstock. Le champ FinalStock du premier enregistrement mois M a une valeur.
- Une requête Variations avec champs Mois, Var (somme par mois des mouvements +Entrées-Sorties, mouvements qui doivent se trouver dans une autre table, en toute logique)
1° solution: avec une requête mise à jour sur table StockMois:
o champ InitialStock
DLookUp("[finalstock]","StocksMois"," [StocksMois]![Mois] =" & StocksMois!Mois-1)
o Champ FinalStock
DLookUp("[finalstock]","StocksMois"," [StocksMois]![Mois] =" & StocksMois!Mois-1)+DLookUp("[var]","variations"," Variations!mois=" & [StocksMois]![Mois] )
o Condition (critère) Démarrer le traitement à mois M+1
[StocksMois]![Mois] > M
Problème: la 1° fois qu’on lance la requête, on ne verra de modification que sur le 2° enregistrement, parce que la mise à jour des modif dans les enregistrements par une requête MAJ ne se fait qu’à la fermeture de la requête.
Pour modifier le 3° enregistrement , il faut lancer un deuxième fois la requête MAJ. Et ainsi de suite.
Solution intéressante quand on ne veut mettre à jour qu’un enregistrement.
2° solution : avec du code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
Private Sub Updating()
Dim SQL As String
Dim MoisCount As Variant
Application.SetOption "Confirm Action queries", False
For Mois = M (à definir) To M+???(à definir)
SQL = " UPDATE StockMois " & " SET Stock.InitialStock = DLookUp('[finalstock]',' StockMois ','[StockMois]![Mois]=' & StockMois!Mois-1), StockMois.FinalStock = DLookUp('[finalstock]',' StockMois ','[StockMois]![Mois] =' & StockMois!Mois-1)+DLookUp('[var]','variations',' Variations!Mois=' & StockMois!Mois)" & " WHERE [StockMois]![Mois] =" & [MoisCount] & ""
DoCmd.RunSQL SQL
Next MoisCount
Application.SetOption "Confirm Action queries", True
End Sub |
Un seul passage de la procédure et c’est fini.
Partager