Vous êtes sur la page 1sur 13

Une gestion des stocks avec Access

Par Claude Leloup

Date de publication : 15 novembre 2013


Dernire mise jour : 8 octobre 2015

Ceci comme point de dpart pour amorcer la discussion lors de demandes d'aide sur le
forum Access de DVP.

Une gestion des stocks avec Access par Claude Leloup

I - L'ide de dpart...................................................................................................................................................... 3
II - Avantage d'une telle approche : la simplicit........................................................................................................ 3
III - Contexte................................................................................................................................................................ 5
IV - Alimenter la table des entres............................................................................................................................. 6
V - Alimenter la table des sorties..............................................................................................................................11
VI - Et la suite ?.........................................................................................................................................................13
VII - Tlcharger........................................................................................................................................................ 13

-2-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

I - L'ide de dpart
Trois tables :
- une pour rfrencer les articles : tArticles ;
- une pour comptabiliser les entres en stock : tEntrees ;
- une pour comptabiliser les sorties : tSorties.

Si, lors de la mise en place, un stock existe dj, il est comptabilis comme une entre.
La colonne CMUP (Cot Moyen Unitaire Pondr) est ajoute pour les besoins de l'exemple
qui va suivre.
On pourrait reprocher la colonne CMUP dans la table tSorties : elle est redondante puisque
cette notion est dj incluse dans tEntrees.
Le souci de faciliter les calculs de prix de revient (en aval) justifie ce choix.

II - Avantage d'une telle approche : la simplicit


Le stock un moment donn s'obtient :
Somme des entres - somme des sorties
cette date
Voici le contenu du module mFonctions :
Option Compare Database
Option Explicit
Public Function EntreesADate(Article As Long, DateAng As Date) As Single
EntreesADate = Nz(DSum("EntreeQuant", "tEntrees", _
"EntreeDate<=#" & DateAng & "# and tArticlesFK=" & Article), 0)
End Function
Public Function SortiesADate(Article As Long, DateAng As Date) As Single
SortiesADate = Nz(DSum("sortieQuant", "tSorties", _
"SortieDate<=#" & DateAng & "# and tArticlesFK=" & Article), 0)
End Function
Public Function StockADate(Article As Long, DateAng As Date) As Single
-3-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

StockADate = EntreesADate(Article, DateAng) - SortiesADate(Article, DateAng)


End Function

La fonction Nz() renverra zro si aucun enregistrement pour cet article.


Pour vous documenter sur la fonction Dsum(), voyez le tutoriel de Philippe JOCHMANS : Les Fonctions de
Domaine dans Access.
Pour tester ces fonctions, rendez-vous dans la base de donnes qui nous sert d'exemple, nous avons :

et ouvrez la fentre d'excution (<CRTL + G>) et saisissez :


? EntreesADate(961,#10/04/2013#)

et enfoncez <ENTER>, vous obtiendrez ceci :

soit 12 + 25.
De mme :

-4-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

III - Contexte
Pour la suite, nous partons de l'hypothse que l'entreprise veut valoriser les sorties au CMUP pour le calcul du prix
de revient de sa fabrication.
La valorisation des sorties de marchandise au CMUP impose que :
- les entres de marchandise sont comptabilises leur cot rel ;
- les sorties se font au cot unitaire moyen pondr de la quantit totale du stock disponible.
Voici un exemple pour illustrer la mthode :

Dans un tel contexte, il est impratif que les comptabilisations se fassent dans un ordre
chronologique rigoureux : quand un CMUP a t calcul aprs une entre, il n'est plus possible
de comptabiliser des sorties antrieures cette date.

-5-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

IV - Alimenter la table des entres

L'utilisateur choisit un article dans la liste droulante.


S'affiche alors l'historique des entres dans l'ordre chronologique dcroissant (en fait le sous-formulaire
sfEntreesDetail)
1. rivate Sub CboArticle_AfterUpdate()
2.
'Afficher l'historique
3.
Me.CTNRsfEntreesDetail.Form.Requery
4.
'Rendre visibles les contrles pour l'encodage d'une nouvelle entre
5.
Me.txtDate.Visible = True
6.
Me.txtQuant.Visible = True
7.
Me.txtPU.Visible = True
8.
Me.txtDate = Null
9.
Me.txtQuant = Null
10.
Me.txtPU = Null
11.
'Afficher le stock actuel de cet article
12.
Me.txtStock = StockADate(Me.CboArticle, Format(Date, "mm/dd/yyyy"))
13.
'Se positionner sur la date encoder
14.
DoCmd.GoToControl "txtDate"
15. End Sub

-6-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

Remarquez la syntaxe la ligne 12


Me.txtStock = StockADate(Me.CboArticle, Format(Date, "mm/dd/yyyy"))
Dans une version Access francophone la fonction Date() renvoie la date d'ajourd'hui sous la
forme jj/mm/aaaa.
Or quand on traite une date en VBA, il faut que celle-ci soit sous la forme anglo-saxone (mm/
dd/yyyy), d'o ce reformatage ncessaire.

Introduction de la date de la nouvelle entre. Pour respecter la mthode CMUP, cette date doit tre :

- postrieure celle de la dernire entre ;


- postrieure celle de la dernire sortie ;
- et au plus, gale aujourd'hui.
Private Sub txtDate_AfterUpdate()
'la date doit tre postrieure la dernire entre et la date de dernire sortie
If Me.txtDate <= DMax("EntreeDate", "tEntrees", "tArticlesFK=" & Me.CboArticle) Then
MsgBox "La date doit postrieure la dernire entre de cet article"
txtDate = Null
Exit Sub
Else
If Me.txtDate <= DMax("SortieDate", "tSorties", "tArticlesFK=" & Me.CboArticle) Then
MsgBox "La date doit postrieure la dernire sortie de cet article"
txtDate = Null
Exit Sub
Else
DoCmd.GoToControl "txtQuant"
End If
End If
End Sub

et

-7-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

L'utilisateur complte la quantit et le prix unitaire et clique sur

1. Private Sub btEnregistrer_Click()


2.
Dim AvantDernDate As Date
3.
Dim AvantDernStock As Single
4.
Dim AvantDernCMUP As Single
5.
Dim SortiesPeriode As Single
6.
Dim StockFinal As Single
7.
Dim dCMUP As Double
8.
Dim sSql As String
9.
10.
'Est-ce complet ?
11.
If IsNull(Me.txtDate) Or Nz(Me.txtQuant, 0) = 0 Or Nz(Me.txtPU, 0) = 0 Then
12.
MsgBox "Un des champs obligatoires n'est pas rempli", vbCritical
13.
Exit Sub
14.
End If
15.
16.
'Dterminer les lments pour le calcul du CMUP
17.
18.
'AvantDernDate : date de l'entre prcdente
19.
AvantDernDate = Nz(DLookup("EntreeDate", "rAvantDernEntree"), Me.txtDate)
20.
If AvantDernDate = Me.txtDate Then
21.
dCMUP = Me.txtPU
22.
GoTo MajtEntrees
23.
End If
24.
25.
'AvantDernStock : stock aprs l'entre prcdente
26.
AvantDernStock = StockADate(Me.CboArticle, Format(AvantDernDate, "mm/dd/yy"))
27.
28.
'AvantDernCMUP : CMUP aprs l'entre prcdente
29.
AvantDernCMUP = DLookup("CMUP", "rAvantDernEntree")
30.
31.
'SortiesPeriode : sorties depuis entre prcdente
32.
SortiesPeriode = SortiesADate(Me.CboArticle, Format(Date, "mm/dd/
yyyy")) - SortiesADate(Me.CboArticle, Format(AvantDernDate, "mm/dd/yy"))
33.
-8-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

34.
'Stock final : stock aprs cette dernire entre
35.
StockFinal = StockADate(Me.CboArticle, Format(Date, "mm/dd/yyyy")) + Me.txtQuant
36.
37.
' Calcul CMUP
38.
dCMUP = (AvantDernStock - SortiesPeriode) * AvantDernCMUP + Me.txtQuant * Me.txtPU
39.
dCMUP = dCMUP / StockFinal
40.
41.
42.
43.
44. MajtEntrees:
45.
sSql = "INSERT INTO tEntrees ( EntreeDate, EntreeQuant, EntreePU, tArticlesFK, CMUP ) " _
46.
& "SELECT #" & Format(Me.txtDate, "mm/dd/yy") & "# AS Expr1," _
47.
& Me.txtQuant & " AS Expr2, " _
48.
& Me.txtPU & " AS Expr3, " _
49.
& Me.CboArticle & " As Expr4, " _
50.
& Replace(dCMUP, ",", ".") & " as Expr5;"
51.
DoCmd.SetWarnings False
52.
DoCmd.RunSQL sSql
53.
DoCmd.SetWarnings True
54.
55.
'Remettre zro
56.
Me.txtDate = Null: Me.txtQuant = Null: Me.txtPU = Null
57.
Me.CTNRsfEntreesDetail.Requery
58.
Me.txtStock = StockADate(Me.CboArticle, Format(Date, "mm/dd/yyyy"))
59. End Sub

Lignes
2=>8
11=>13
16=>35
20
26
29

Commentaire
Dfinition des variables.
On vrifie la prsence d'une date, d'une quantit et d'un prix
unitaire non nuls.
Sinon, message d'alerte et blocage.
On recueille les donnes ncessaires au calcul du CMUP.
re
On traite le cas particulier de la 1 entre pour cet article.
Remarquez la mise de la date au format anglo-saxon.
Pour trouver le CMPU prcdent, on utilise la requte
rAvantDernEntree

-9-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

38-39
45-53

56-58

Calcul proprement dit du CMUP


On construit une requte Ajout pour insrer la nouvelle
entre dans tEntrees.
Remarquez la ligne 50 le reformatage (un point comme
symbole dcimal au lieu de la virgule).
Mise en place pour l'entre suivante ventuelle.
Stock et historique sont mis jour.
Mme remarque que plus haut, pour le format de la ligne 58
Me.txtStock = StockADate(Me.CboArticle, Format(Date, "mm/dd/
yyyy"))

- 10 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

V - Alimenter la table des sorties

L'utilisateur choisit un article dans la liste droulante.


S'affiche alors l'historique des sorties dans l'ordre chronologique dcroissant (en fait le sous-formulaire
sfSortiesDetail)
1. Private Sub CboArticle_AfterUpdate()
2.
'Afficher l'historique
3.
Me.CTNRsfSortiesDetail.Form.Requery
4. 'Rendre visibles les contrles pour l'encodage d'une nouvelle sortie
5.
Me.txtDate.Visible = True
6.
Me.txtQuant.Visible = True
7.
Me.txtImputation.Visible = True
8.
Me.txtDate = Null
9.
Me.txtQuant = Null
10.
Me.txtImputation = Null
11.
DoCmd.GoToControl "txtDate"
12.
'Afficher le stock actuel de cet article
13.
Me.txtStock = StockADate(Me.CboArticle, Format(Date, "mm/dd/yyyy"))
14.
'Afficher le CMUP actuel et la dernire entre de cet article
15.
Me.txtDernEntree = DLookup("EntreeDate", "rDernEntree")
16.
Me.txtCMUP = DLookup("CMUP", "rDernEntree")
17. End Sub

Introduction de la date de la nouvelle sortie. Pour respecter la mthode CMUP, cette date doit tre :

- postrieure celle de la dernire entre ;

- 11 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

- postrieure celle de la dernire sortie ;


- et au plus, gale aujourd'hui.
Private Sub txtDate_AfterUpdate()
'la date doit tre postrieure ou au moins gale la dernire entre
If Me.txtDate < Me.txtDernEntree Then
MsgBox "La date doit gale ou postrieure la dernire entre de cet article"
txtDate = Null
Else
DoCmd.GoToControl "txtQuant"
End If
End Sub

et

L'utilisateur complte la quantit et clique sur

1. Private Sub btEnregistrer_Click()


2.
Dim sSql As String
3.
'Est-ce complet ?
4.
If IsNull(Me.txtDate) Or Nz(Me.txtQuant, 0) = 0 Or Nz(Me.txtImputation, 0) = 0 Then
5.
MsgBox "Un des champs obligatoires n'est pas rempli", vbCritical
6.
Exit Sub
7.
End If
8.
'Maj tSorties
9.
sSql = "INSERT INTO tSorties ( SortieDate, SortieQuant, SortieImputation, CMUP, tArticlesFK ) " _
10.
& "SELECT #" & Format(Me.txtDate, "mm/dd/yy") & "# AS Expr1, " _
11.
& Me.txtQuant & " AS Expr2, " _
12.
& """" & Me.txtImputation & """ AS Expr3, " _
13.
& Replace(Me.txtCMUP, ",", ".") & " AS Expr4, " _
14.
& Me.CboArticle & " As Expr5;"
15.
16.
DoCmd.SetWarnings False
17.
DoCmd.RunSQL sSql
18.
DoCmd.SetWarnings True
19.
'Rinitialiser pour une nouvelle sortie ventuelle
20.
Me.CTNRsfSortiesDetail.Requery
- 12 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/

Une gestion des stocks avec Access par Claude Leloup

21.
Me.txtDate = Null: Me.txtQuant = Null: Me.txtImputation = Null
22.
Me.txtStock = StockADate(Me.CboArticle, Format(Date, "mm/dd/yyyy"))
23. End Sub

Lignes
4=>5
9=>18

22

Commentaire
On vrifie la prsence d'une date, d'une quantit et d'une
imputation non nulles.
Sinon, message d'alerte et blocage.
On construit une requte Ajout pour insrer la nouvelle sortie
dans tSorties.
Remarquez la ligne 13 le reformatage (un point comme
symbole dcimal au lieu de la virgule).
Mme remarque que plus haut, pour le format Me.txtStock =
StockADate(Me.CboArticle, Format(Date, "mm/dd/yyyy"))

VI - Et la suite ?
Voil pour l'aspect valorisation de l'inventaire au CMUP, reste dvelopper les diffrentes fonctionnalits que l'on
juge utiles dans le cadre d'une application :
contrle des inventaires ;
calcul des prix de revient de la fabrication ;
statistiques d'achat et de vente...

VII - Tlcharger
La base de donnes qui m'a servi tester est ici.

- 13 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 Claude Leloup. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://claudeleloup.developpez.com/tutoriels/access/gestion-de-stock/