Vous êtes sur la page 1sur 36

Créer un logiciel de caisse

enregistreuse avec Microsoft Access

Par Denis Hulo

Date de publication : 1 septembre 2017

Objectif : apprendre à créer, avec Access, un logiciel de caisse enregistreuse.

Niveau requis : intermédiaire, avancé.

Commentez cet article : Commentez


Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

I - Introduction..............................................................................................................................................................4
II - Principe de fonctionnement de la caisse...............................................................................................................4
III - Structure générale du logiciel............................................................................................................................... 4
IV - Tables nécessaires............................................................................................................................................... 5
IV-A - T_ParametreCaisse..................................................................................................................................... 5
IV-B - T_Produit......................................................................................................................................................5
IV-C - T_Operation................................................................................................................................................. 6
IV-D - T_DetailOperation........................................................................................................................................6
V - Requêtes nécessaires........................................................................................................................................... 6
V-A - R_DetailOperation.........................................................................................................................................6
V-B - R_Ticket........................................................................................................................................................ 7
VI - Formulaires nécessaires.......................................................................................................................................7
VI-A - Formulaire F_Operation...............................................................................................................................7
VI-A-1 - Contrôle sous-formulaire SF_DetailOperation.................................................................................... 8
VI-A-2 - Boutons de commande pour effectuer les opérations........................................................................ 9
VI-A-2-a - Procédure générique................................................................................................................ 10
VI-A-2-b - Bouton de commande cmd0.................................................................................................... 11
VI-A-2-c - Bouton de commande cmd1.................................................................................................... 11
VI-A-2-d - Bouton de commande cmd2.................................................................................................... 11
VI-A-2-e - Bouton de commande cmdP....................................................................................................11
VI-A-2-f - Bouton de commande cmdC.....................................................................................................12
VI-A-2-g - Bouton de commande cmdR....................................................................................................12
VI-A-3 - Boutons de commande pour copier les valeurs dans le détail des opérations................................. 12
VI-A-3-a - Bouton de commande cmdPrix................................................................................................ 13
VI-A-3-b - Bouton de commande cmdQuantite.........................................................................................13
VI-A-3-c - Bouton de commande cmdRemise.......................................................................................... 14
VI-A-3-d - Bouton de commande cmdEnlever.......................................................................................... 14
VI-A-4 - Boutons de commande pour afficher les produits par catégorie...................................................... 14
VI-A-4-a - Procédure générique................................................................................................................ 15
VI-A-4-b - Bouton de commande cmdBoissons........................................................................................16
VI-A-4-c - Bouton de commande cmdBoulangerie................................................................................... 16
VI-A-4-d - Bouton de commande cmdCharcuterie....................................................................................16
VI-A-5 - Zone de texte pour afficher les valeurs saisies................................................................................ 17
VI-A-5-a - Zone de texte txtResultat......................................................................................................... 17
VI-A-6 - Zone de texte pour gérer les codes-barres...................................................................................... 17
VI-A-6-a - Zone de texte txtCodeBarres................................................................................................... 18
VI-A-7 - Zones de texte pour afficher les totaux............................................................................................ 19
VI-A-7-a - Zone de texte txtTotalTTC........................................................................................................20
VI-A-7-b - Zone de texte txtTotalRemise...................................................................................................20
VI-A-7-c - Zone de texte txtTotalAvantRemise..........................................................................................20
VI-A-7-d - Zone de texte txtNbLignes....................................................................................................... 20
VI-A-7-e - Zone de texte txtNbProduits.....................................................................................................21
VI-A-8 - Zones de texte au pied du formulaire...............................................................................................21
VI-A-8-a - Zone de texte txtIdCaisse........................................................................................................ 21
VI-A-8-b - Zone de texte txtIdOperation....................................................................................................22
VI-A-8-c - Zone de texte txtDateOperation............................................................................................... 22
VI-A-8-d - Zone de texte txtHeureOperation............................................................................................. 22
VI-A-8-e - Zone de texte txtIdVendeur...................................................................................................... 22
VI-A-8-f - Bouton de commande cmdEncaisser........................................................................................22
VI-B - Formulaire F_ParametreCaisse.................................................................................................................23
VI-B-1 - Listes déroulantes pour choisir la caisse et le vendeur....................................................................23
VI-B-1-a - Liste déroulante cmbCaisse..................................................................................................... 24
VI-B-1-b - Liste déroulante cmbVendeur...................................................................................................24
VI-C - Formulaire F_ListeProduit......................................................................................................................... 24
VI-C-1 - Formulaire SF_ListeProduit.............................................................................................................. 26
VI-C-1-a - Bouton de commande cmdSelectionner.................................................................................. 26
VI-D - Formulaire F_Encaissement......................................................................................................................27
VI-D-1 - Procédure générique........................................................................................................................ 27

-2-
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-D-2 - Les images représentant les billets et les pièces.............................................................................28


VI-D-2-a - Image img5...............................................................................................................................29
VI-D-2-b - Image img10.............................................................................................................................29
VI-D-3 - Les boutons de commande pour les centimes.................................................................................29
VI-D-3-a - Bouton de commande cmd1c.................................................................................................. 30
VI-D-3-b - Bouton de commande cmd2c.................................................................................................. 30
VI-D-4 - Boutons de commande pour composer le montant donné...............................................................30
VI-D-4-a - Procédure générique................................................................................................................ 31
VI-D-4-b - Bouton de commande cmd0.................................................................................................... 31
VI-D-4-c - Bouton de commande cmd1.................................................................................................... 31
VI-D-4-d - Bouton de commande cmdP....................................................................................................32
VI-D-4-e - Bouton de commande cmdC................................................................................................... 32
VI-D-5 - Zone de texte pour afficher le rendu................................................................................................ 33
VI-D-5-a - Zone de texte txtRendu............................................................................................................33
VI-D-6 - Boutons de commande pour valider ou recommencer la saisie.......................................................34
VI-D-6-a - Bouton de commande cmdValider........................................................................................... 34
VI-D-6-b - Bouton de commande cmdAnnuler..........................................................................................35
VII - État nécessaire.................................................................................................................................................. 35
VII-A - État E_Ticket.............................................................................................................................................35
VIII - Lien utile........................................................................................................................................................... 36
IX - Les bases de données à télécharger.................................................................................................................36
X - Remerciements.................................................................................................................................................... 36

-3-
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

I - Introduction

L'objectif de cet article est, après avoir présenté le principe de fonctionnement de la caisse enregistreuse, de décrire
l'architecture et les différents composants de l'application. Au cours de cette présentation, on détaillera également les
parties réutilisables de l'application, comme le pavé numérique ou les boutons associés aux catégories de produits.

Une fois que vous aurez visualisé la structure générale du logiciel et compris l'utilité de ses différents éléments (objets
et contrôles), vous devriez pouvoir réaliser votre propre logiciel de caisse sans trop de difficultés.

II - Principe de fonctionnement de la caisse

Aperçu du formulaire F_Operation

Principe de fonctionnement de la caisse

1 On choisit la catégorie de produits en cliquant sur les boutons de commande situés en bas : boissons,
boulangerie, charcuterie…
2 Sur le formulaire qui s'ouvre, on choisit le produit de la catégorie.
3 On saisit sur le pavé numérique la quantité, puis on clique sur le bouton de commande Quantité.
4 On saisit éventuellement sur le pavé numérique la valeur de la remise, puis on appuie sur Remise.
5 Enfin, on valide la saisie de la ligne en appuyant sur le bouton de commande R.
6 On réitère la procédure pour chaque produit.
7 On termine en cliquant sur Encaisser.

Voici la description du fonctionnement de la caisse au travers d'une petite vidéo :

Fonctionnement de la caisse en vidéo

III - Structure générale du logiciel

On va se limiter aux fonctions essentielles de la caisse enregistreuse pour faciliter la compréhension de l'article.

-4-
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Le formulaire principal F_Operation permettant de réaliser les opérations sur les produits comportera :

• un sous-formulaire pour afficher le détail de l'opération ;


• un groupe de boutons de commande pour copier les références des produits dans le détail ;
• un pavé numérique pour saisir les valeurs ;
• un groupe de boutons de commande pour copier les valeurs dans le détail ;
• un en-tête de formulaire pour afficher les totaux du détail ;
• un pied de formulaire pour saisir les informations relatives à l'opération.

Le formulaire principal permet d'enregistrer les opérations, et le sous-formulaire permet de


sauvegarder le détail des opérations.

Le module du formulaire principal comportera des procédures génériques pour simplifier et rendre plus lisible le code
VBA :

• une procédure générique appelée sur l'événement clic de chaque bouton du pavé numérique ;
• une procédure générique appelée sur l'événement clic de chaque bouton destinée à filtrer les produits par
catégorie.

L'encaissement final se fera sur un formulaire à part.

Par la suite, nous allons décrire plus en détail les différents objets nécessaires, les contrôles des formulaires et les
procédures VBA associées.

IV - Tables nécessaires

Elles vont permettre d'enregistrer les produits et opérations dans la base de données.

IV-A - T_ParametreCaisse

Table permettant d'enregistrer les différents paramètres de la caisse, comme le numéro de caisse ou l'identifiant du
vendeur sur la caisse. Elle ne contient qu'une seule ligne.

Elle est indispensable pour sauvegarder automatiquement la référence du vendeur et de la caisse lors de la création
d'une opération.

Nom du champ Type du champ Description


IdParametre Entier long Numéro de paramétrage
IdCaisse Entier long Identifiant de la caisse
IdVendeur Entier long Identifiant du vendeur

IV-B - T_Produit

On y sauvegarde les différents produits du magasin.

-5-
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Nom du champ Type du champ Description


IdProduit Entier long Identifiant du produit
DesignationProduit Texte Désignation du produit
IdCategorieProduit Entier long Identifiant de la catégorie
du produit
PrixUnitaire Monétaire Prix unitaire du produit
TauxTVA Numérique Taux de TVA du produit

IV-C - T_Operation

Elle contient les opérations effectuées par le vendeur et est reliée à la table T_DetailOperation par une relation 1
à plusieurs.

Nom du champ Type du champ Description


IdOperation Entier long Identifiant de l'opération
DateOperation Date/Heure Date d'enregistrement de
l'opération
HeureOperation Date/Heure Heure d'enregistrement de
l'opération
IdCaisse Entier long Identifiant de la caisse
concernée par l'opération
IdVendeur Entier long Identifiant du vendeur qui
réalise l'opération
TotalPaiement Monétaire Total reçu par le vendeur

IV-D - T_DetailOperation

Elle permet d'enregistrer le détail des achats effectués sur les produits du magasin et est liée à la table T_Operation
sur le champ IdOperation.

Nom du champ Type du champ Description


IdDetailOperation Entier long Identifiant du détail de
l'opération
IdOperation Entier long Clé étrangère liée à
l'identifiant de l'opération
DesignationProduit Texte Désignation du produit
PrixUnitaire Monétaire Prix unitaire du produit
TauxTVA Numérique Taux de TVA du produit
Quantite Numérique Quantité de produit
Remise Numérique Pourcentage de remise

V - Requêtes nécessaires

Elles vont permettre de rassembler les données à afficher sur les formulaires.

V-A - R_DetailOperation

Cette requête permet d'afficher le détail des produits et le total par ligne dans le sous-formulaire SF_DetailOperation :

-6-
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Code SQL de R_DetailOperation


SELECT T_DetailOperation.*,
DCount("*","T_DetailOperation","IdOperation=" & [IdOperation] & " and IdDetailOperation<" & [IdDetailOperation])+
IdLigne, [PrixUnitaire]*[Remise] AS RemiseU,
IIf(Not IsNull([T_DetailOperation].[Quantite]) And Not IsNull([T_DetailOperation].[PrixUnitaire]) And Not IsNull(
TotalLigne
FROM T_DetailOperation;

L'expression du champ calculé IdLigne donne le numéro de la ligne du détail de l'opération :

Champ calculé IdLigne


IdLigne: CpteDom("*";"T_DetailOperation";"IdOperation=" & [T_Operation].[IdOperation] & " and
IdDetailOperation<" & [IdDetailOperation])+1

L'expression du champ TotalLigne donne le montant total de la ligne du détail de l'opération :

Champ calculé TotalLigne


TotalLigne: VraiFaux(Pas EstNull([T_DetailOperation].[Quantite]) Et Pas
EstNull([T_DetailOperation].[PrixUnitaire]) Et Pas EstNull([Remise]);([T_DetailOperation].
[Quantite]*[T_DetailOperation].[PrixUnitaire])*(1-[Remise]);Null)

V-B - R_Ticket

Cette requête permet d'afficher le détail des produits et le total par ligne sur le ticket :

Code SQL de R_Ticket


SELECT T_DetailOperation.*,
DCount("*","T_DetailOperation","IdOperation=" & [T_Operation].[IdOperation] & " and IdDetailOperation<" & [IdDeta
IdLigne, [PrixUnitaire]*[Quantite]*[Remise] AS TotalRemise,
IIf(Not IsNull([T_DetailOperation].[Quantite]) And Not IsNull([T_DetailOperation].[PrixUnitaire]) And Not IsNull(
TotalLigne, T_Operation.TotalPaiement
FROM T_Operation INNER JOIN T_DetailOperation ON T_Operation.IdOperation =
T_DetailOperation.IdOperation;

L'expression du champ calculé IdLigne donne le numéro de la ligne du détail de l'opération :

Champ calculé IdLigne


IdLigne: IdLigne: CpteDom("*";"T_DetailOperation";"IdOperation=" & [T_Operation].[IdOperation] &
" and IdDetailOperation<" & [IdDetailOperation])+1

L'expression du champ TotalLigne donne le montant total de la ligne du détail de l'opération :

Champ calculé TotalLigne


TotalLigne: VraiFaux(Pas EstNull([T_DetailOperation].[Quantite]) Et Pas
EstNull([T_DetailOperation].[PrixUnitaire]) Et Pas EstNull([Remise]);([T_DetailOperation].
[Quantite]*[T_DetailOperation].[PrixUnitaire])*(1-[Remise]);Null)

VI - Formulaires nécessaires

VI-A - Formulaire F_Operation

Ce formulaire principal, en mode ajout, est basé sur la table T_Operation et permet au vendeur d'enregistrer les
différentes opérations avec leur détail grâce à différents contrôles. Il contient le sous-formulaire SF_DetailOperation,
et différents éléments (boutons de commande et zones de texte).

-7-
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Aperçu du formulaire F_Operation en mode création

VI-A-1 - Contrôle sous-formulaire SF_DetailOperation

Il contient le sous-formulaire SF_DetailOperation basé sur la requête R_DetailOperation, qui affiche les différents
champs du détail de l'opération.

Ses propriétés Champs pères et champs fils se réfèrent aux champs IdOperation des tables T_Operation et
T_DetailOperation.

-8-
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Aperçu du sous-formulaire SF_DetailOperation en mode création

VI-A-2 - Boutons de commande pour effectuer les opérations

Ces boutons permettent de copier les nombres dans la zone du résultat.

-9-
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Aperçu du pavé numérique

VI-A-2-a - Procédure générique

Une procédure générique placée sur l'événement Clic de ces boutons permet d'ajouter à la suite du contenu de la
zone résultat, le chiffre du bouton cliqué.

Les étapes de la procédure sont les suivantes :

1 On copie dans une variable le contenu de la légende du bouton cliqué (0, 1, …, 9) ;


2 On place le focus sur la zone de texte txtResultat ;
3 On ajoute à la fin de la zone de texte le chiffre contenu dans la variable ;
4 On place le curseur à la fin du contenu de la zone de texte.

Le code complet :

procédure générique
'----------------------------------------------------------------------------------------
' Copie les chiffres affichés sur la légende des boutons à la suite dans la zone du résultat.
'----------------------------------------------------------------------------------------
Public Sub MajResultat()
Dim c As String

On Error GoTo err_MajResultat ' Gestion d'erreur

c =
Me.ActiveControl.Caption ' Copie dans une variable la légende du bouton de commande (0,1,2,3,4,5,6,7,8,9,..)
Me.txtResultat.SetFocus ' Positionne le focus dans la zone de texte txtResultat
Me.txtResultat.Value = (Me.txtResultat.Text +
c) ' Copie le chiffre à la suite du contenu de la zone de texte Resultat
Me.txtResultat.SelStart = Len(Me.txtResultat.Text) + 1 ' Positionne le curseur à la fin du contenu de la zone de t

- 10 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

procédure générique
Exit Sub
err_MajResultat:
MsgBox Err.Description ' Affiche la description de l'erreur

End Sub

Le pavé numérique et le code VBA associé peuvent être facilement réutilisés.

VI-A-2-b - Bouton de commande cmd0

Un clic sur ce bouton permet de copier 0 à la suite dans la zone de texte txtResultat.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie le chiffre 0 à la suite dans la zone du résultat.
'----------------------------------------------------------------------------------------
Private Sub cmd0_Click()
MajResultat ' Exécution de la procédure de mise à jour du résultat
end sub

VI-A-2-c - Bouton de commande cmd1

Un clic sur ce bouton permet de copier 1 à la suite dans la zone de texte txtResultat.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie le chiffre 1 à la suite dans la zone du résultat.
'----------------------------------------------------------------------------------------
Private Sub cmd1_Click()
MajResultat ' Exécution de la procédure de mise à jour du résultat
end sub

VI-A-2-d - Bouton de commande cmd2

Un clic sur ce bouton permet de copier 2 à la suite dans la zone de texte txtResultat.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie le chiffre 2 à la suite dans la zone du résultat.
'----------------------------------------------------------------------------------------
Private Sub cmd2_Click()
MajResultat ' Exécution de la procédure de mise à jour du résultat
end sub

C'est le même principe pour les autres chiffres du pavé numérique.

VI-A-2-e - Bouton de commande cmdP

Un clic sur ce bouton permet de copier « . » à la suite dans la zone de texte txtResultat.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie un point à la suite dans la zone du résultat.
'----------------------------------------------------------------------------------------

- 11 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

procédure événementielle sur clic


Private Sub cmdP_Click()
MajResultat ' Exécution de la procédure de mise à jour du résultat
end sub

VI-A-2-f - Bouton de commande cmdC

Un clic sur ce bouton permet d'effacer le contenu de la zone de texte txtResultat.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Efface le contenu de la zone du résultat.
'----------------------------------------------------------------------------------------
Private Sub cmdC_Click()
Me.Resultat.Value = Null ' Efface le contenu de la zone de texte
end sub

VI-A-2-g - Bouton de commande cmdR

Un clic sur ce bouton permet d'afficher le résultat dans la zone de texte txtResultat.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Affiche le résultat dans la zone du résultat.
'----------------------------------------------------------------------------------------
Private Sub cmdR_Click()

Me.Resultat = Me.SF_DetailOperation.Form!
TotalLigne ' Affiche le total de la ligne du détail dans la zone du résultat

Me.SF_DetailOperation.SetFocus ' On donne le focus au sous-formulaire


DoCmd.GoToRecord , , acLast ' On accède au dernier enregistrement du détail des opérations
DoCmd.GoToRecord , , acNext ' On accède au nouvel enregistrement du détail des opérations

End Sub

VI-A-3 - Boutons de commande pour copier les valeurs dans le détail des opérations

Ces boutons permettent de copier les valeurs saisies dans le détail de l'opération.

- 12 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Aperçu des boutons de copie des valeurs

VI-A-3-a - Bouton de commande cmdPrix

Un clic sur ce bouton permet de copier la valeur contenue dans la zone de texte txtResultat dans la colonne Prix
Unitaire du sous-formulaire.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie la valeur du résultat dans la colonne Prix unitaire du sous-formulaire.
'----------------------------------------------------------------------------------------
Private Sub cmdPrix_Click()

If Not IsNull(Me.Resultat.Value) Then

Me.DateOperation = Date ' Copie la date courante dans la zone de texte DateOperation pour créer l'opération
Me.SF_DetailOperation.Form!PrixUnitaire = Me.Resultat ' Copie de la valeur
Me.Resultat = Null ' On efface le contenu du résultat
End If

End Sub

VI-A-3-b - Bouton de commande cmdQuantite

Un clic sur ce bouton permet de copier la valeur contenue dans la zone de texte txtResultat dans la colonne Quantité
du sous-formulaire.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie la valeur du résultat dans la colonne Quantité du sous-formulaire.
'----------------------------------------------------------------------------------------
Private Sub CmdQuantite_Click()

- 13 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

procédure événementielle sur clic


If Not IsNull(Me.txtResultat.Value) Then
Me.DateOperation = Date
Me.SF_DetailOperation.Form!Quantite = Replace(Me.txtResultat, ".", ",")
Me.txtResultat = Null
End If
End Sub

VI-A-3-c - Bouton de commande cmdRemise

Un clic sur ce bouton permet de copier la valeur contenue dans la zone de texte txtResultat dans la colonne Remise
du sous-formulaire.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie la valeur du résultat dans la colonne Remise du sous-formulaire.
'----------------------------------------------------------------------------------------
Private Sub cmdRemise_Click()
If Not IsNull(Me.Resultat.Value) Then

Me.DateOperation = Date ' Copie la date courante dans la zone de texte DateOperation pour créer l'opération
Me.SF_DetailOperation.Form!
Remise = Val(Me.Resultat) / 100 ' Copie de la valeur affichée en pourcentage
Me.Resultat = Null ' On efface le contenu du résultat
End If
End Sub

VI-A-3-d - Bouton de commande cmdEnlever

Un clic sur ce bouton permet de supprimer les lignes sélectionnées dans le sous-formulaire du détail de l'opération.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Supprime les lignes sélectionnées dans le sous-formulaire du détail de l'opération.
'----------------------------------------------------------------------------------------
Private Sub cmdEnlever_Click()
DoCmd.SetWarnings False ' Enlève les avertissements Access
DoCmd.RunSQL ("delete * from T_DetailOperation where IdOperation=" & Nz(Me.IdOperation, 0) & " and Selection;") '
formulaire
DoCmd.SetWarnings True ' Remet les avertissements Access
Me.Refresh ' Actualise les données

End Sub

VI-A-4 - Boutons de commande pour afficher les produits par catégorie

Ces boutons permettent d'afficher la liste des produits par catégorie pour ensuite les choisir.

- 14 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Aperçu des boutons de sélection des produits

VI-A-4-a - Procédure générique

Une procédure générique placée sur l'événement Clic de ces boutons permet d'afficher la liste des produits filtrée en
fonction de la légende du bouton cliqué correspondant à la catégorie de produits choisie.

Les étapes de la procédure sont les suivantes :

1 On copie dans une variable le contenu de la légende du bouton correspondant à la catégorie de produits ;
2 On ouvre le formulaire F_ListeProduit ;
3 On génère le code SQL pour afficher la liste des produits de cette catégorie ;
4 On copie la catégorie dans la liste déroulante CategorieProduit du formulaire ListeProduit ;
5 On copie le code SQL sur la propriété RecordSource du sous-formulaire SF_ListeProduit.

Le code complet :

Procédure générique
'----------------------------------------------------------------------------------------
' Affiche la liste des produits correspondant à la légende du bouton cliqué.
'----------------------------------------------------------------------------------------
Private Sub OuvrirListeProduits()
Dim CategorieProduit As String
Dim LeSQL As String

On Error GoTo err_OuvrirListeProduits ' Gestion d'erreur

CategorieProduit =
Me.ActiveControl.Caption ' Copie la légende du bouton cliqué correspondant à la catégorie de produits choisie
DoCmd.OpenForm "F_ListeProduit" ' Ouvre le formulaire affichant la liste des produits

' Code SQL de la requête filtrant les produits en fonction de la variable CategorieProduit

- 15 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Procédure générique
LeSQL = "select * from R_ListeProduit where NomCategorie like '" &
CategorieProduit & "' order by NomCategorie, IdProduit;"

Forms!F_ListeProduit!CategorieProduit.Value =
CategorieProduit ' On copie la catégorie dans la zone de texte correspondante du formulaire F_ListeProduit
Forms!F_ListeProduit!SF_ListeProduit.Form.RecordSource =
LeSQL ' On applique le code SQL à la source du sous-formulaire SF_ListeProduit

Exit Sub
err_OuvrirListeProduit
MsgBox (Err.Description) ' Affiche la description de l'erreur

End Sub

Vous pouvez facilement créer vos propres boutons de commande avec vos catégories de
produits et y exécuter la procédure générique sur l'événement Clic.

VI-A-4-b - Bouton de commande cmdBoissons

Un clic sur ce bouton permet d'afficher la liste des produits appartenant à la catégorie Boissons.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Affiche la liste des produits du type Boissons.
'----------------------------------------------------------------------------------------
Private Sub cmdBoissons_Click()
OuvrirListeProduits ' Exécute la procédure d'ouverture de la liste des produits de catégorie Boissons
End Sub

VI-A-4-c - Bouton de commande cmdBoulangerie

Un clic sur ce bouton permet d'afficher la liste des produits appartenant à la catégorie Boulangerie.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Affiche la liste des produits du type Boulangerie.
'----------------------------------------------------------------------------------------
Private Sub cmdBoulangerie_Click()
OuvrirListeProduits ' Exécute la procédure d'ouverture de la liste des produits de catégorie Boulangerie
End Sub

VI-A-4-d - Bouton de commande cmdCharcuterie

Un clic sur ce bouton permet d'afficher la liste des produits appartenant à la catégorie Charcuterie.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Affiche la liste des produits du type Charcuterie.
'----------------------------------------------------------------------------------------
Private Sub cmdCharcuterie_Click()
OuvrirListeProduits ' Exécute la procédure d'ouverture de la liste des produits de catégorie Charcuterie
End Sub

C'est le même principe pour les autres boutons : il suffit de copier dans la légende du bouton
le nom de la catégorie du produit pour afficher la liste correspondante.

- 16 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-A-5 - Zone de texte pour afficher les valeurs saisies

Zone de texte permettant d'afficher les valeurs saisies avec le clavier ou sur le pavé.

Aperçu de la zone de texte txtResultat

VI-A-5-a - Zone de texte txtResultat

Elle affiche les différentes valeurs intervenant dans les opérations.

procédure événementielle sur touche appuyée


'----------------------------------------------------------------------------------------
' Code pour limiter la saisie aux caractères numériques
'----------------------------------------------------------------------------------------
Private Sub txtResultat_KeyDown(KeyCode As Integer, Shift As Integer)

If ((KeyCode >= 96) And (KeyCode


p<= 105)) Or (KeyCode = 16) Or (KeyCode = 110) Or (KeyCode = 188) Then
' Autorise la saisie pour les touches numériques
Else
KeyCode = 0 ' Annule l'entrée du caractère
End If

End Sub

VI-A-6 - Zone de texte pour gérer les codes-barres

Zone de texte permettant à partir du code-barres entré, de saisir le bon produit dans le détail.

- 17 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Aperçu de la zone de texte txtCodeBarre

Pour rappel la douchette (ou lecteur de codes-barres) est équivalente à une saisie clavier.

VI-A-6-a - Zone de texte txtCodeBarres

Si la zone de texte possède le focus, une simple saisie d'un code-barres dans cette zone au moyen d'une douchette
déclenche la recherche du produit correspondant dans la base et la copie des références du produit dans le détail
de l'opération.

procédure événementielle sur changement


'------------------------------------------------------------------------------------------
' Recherche le produit correspondant au code-barres dans la base, et copie de la désignation
' et du prix du produit dans le détail de l'opération.
'------------------------------------------------------------------------------------------
Private Sub txtCodeBarres_Change()
Dim db As DAO.Database '
Dim rs As DAO.Recordset

Set db = CurrentDb ' Référence à la base courante


Set rs = db.OpenRecordset("T_Produit",
dbOpenSnapshot) ' Ouverture du jeu d'enregistrements des produits

rs.FindFirst "[CodeProduit] = '" &


Me.txtCodeBarres.Text & "'" ' Recherche du produit correspondant au code saisi

If Not (rs.NoMatch) Then


Me!DateOperation = Date
Me.SF_DetailOperation.Form!DesignationProduit = rs!
DesignationProduit ' Copie de la désignation du produit dans la colonne correspondante du sous-
formulaire

- 18 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

procédure événementielle sur changement


Me.SF_DetailOperation.Form!PrixUnitaire = rs!
PrixUnitaire ' Copie du prix unitaire du produit dans la colonne correspondante du sous-
formulaire
Else
MsgBox ("Produit introuvable !")
End If

' libération des variables


rs.Close
Set rs = Nothing

Set db = Nothing
End Sub

VI-A-7 - Zones de texte pour afficher les totaux

Zones de texte permettant d'afficher les totaux des montants avant et après remise, le nombre de lignes et de produits.

Aperçu de la zone affichant les totaux

Si vous souhaitez créer votre propre total en en-tête du formulaire, le principe est relativement
simple :

• on crée une zone de texte txtTotal dans le pied du sous-formulaire SF_DetailOperation, elle va afficher la
somme du champ (ici Montant) de la requête source, au moyen de la formule suivante placée sur la propriété
Source Contrôle :

=Somme([Montant])

- 19 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

• on ajoute ensuite dans le formulaire principal une zone de texte txtTotal faisant référence au contrôle txtTotal
du sous-formulaire au moyen de l'expression :

=[SF_DetailOperation].[Formulaire].[txtTotal]

VI-A-7-a - Zone de texte txtTotalTTC

Elle affiche le total des montants.

La formule appliquée à la propriété Source contrôle fait référence à la zone de texte txtTotalTTC située dans le pied
du sous-formulaire :

=[SF_DetailOperation].[Formulaire].[txtTotalTTC]

La formule appliquée à la propriété Source contrôle de la zone de texte txtTotalTTC située dans le pied du sous-
formulaire SF_DetailOperation est :

=Nz(Somme([Totalligne]);0)

VI-A-7-b - Zone de texte txtTotalRemise

Elle affiche le total des remises.

La formule appliquée à la propriété Source contrôle fait référence à la zone de texte txtTotalTTC située dans le pied
du sous-formulaire :

=[SF_DetailOperation].[Formulaire].[txtTotalRemise]

La formule appliquée au contrôle txtTotalRemise situé dans le pied du sous-formulaire SF_DetailOperation est :

=Nz(Somme([Quantite]*[RemiseU]);0))

VI-A-7-c - Zone de texte txtTotalAvantRemise

Elle affiche le total des montants avant remise.

La formule appliquée à la propriété Source contrôle est :

=[txtTotalTTC]-[txtTotalRemise]

VI-A-7-d - Zone de texte txtNbLignes

Elle affiche le nombre total de lignes.

La formule appliquée à la propriété Source contrôle est :

=[SF_DetailOperation].[Formulaire].[txtNbLignes]

La formule appliquée au contrôle txtNbLignes situé dans le pied du sous-formulaire SF_DetailOperation est :

=Nz(Compte([Totalligne]);0)

- 20 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-A-7-e - Zone de texte txtNbProduits

Elle affiche le nombre total de produits.

La formule appliquée à la propriété Source contrôle est :

=[SF_DetailOperation].[Formulaire].[txtNbLignes]

La formule appliquée au contrôle txtNbProduits situé dans le pied du sous-formulaire SF_DetailOperation est :

=Nz(Somme([Quantite]);0)

VI-A-8 - Zones de texte au pied du formulaire

Zones de texte reliées aux champs de la requête source R_DetailOperation.

Aperçu de la zone du pied du formulaire

VI-A-8-a - Zone de texte txtIdCaisse

Elle est reliée au champ IdCaisse de la table T_Operation.

La formule appliquée à la propriété Valeur par défaut fait référence au champ IdCaisse de la table
T_ParametreCaisse :

=RechDom("IdCaisse";"T_ParametreCaisse")

- 21 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

La formule permet de copier par défaut dans le champ IdCaisse de la table source, le numéro de caisse enregistré
dans la table T_ParametreCaisse.

VI-A-8-b - Zone de texte txtIdOperation

Elle est reliée au champ numéro-auto IdOperation de la table T_Operation.

VI-A-8-c - Zone de texte txtDateOperation

Elle est reliée au champ DateOperation de la table T_Operation.

La formule appliquée à la propriété Valeur par défaut est la date d'aujourd'hui :

=Date()

La formule permet de copier par défaut dans le champ DateOperation de la table source, la date du jour de l'opération.

VI-A-8-d - Zone de texte txtHeureOperation

Elle est reliée au champ HeureOperation de la table T_Operation.

La formule appliquée à la propriété Valeur par défaut est l'heure du jour :

=Time()

La formule permet de copier par défaut dans le champ HeureOperation de la table source, l'heure du jour de
l'opération.

VI-A-8-e - Zone de texte txtIdVendeur

Elle est reliée au champ IdVendeur de la table T_Operation.

La formule appliquée à la propriété Valeur par défaut fait référence au champ IdVendeur de la table
T_ParametreCaisse :

=RechDom("IdVendeur";"T_ParametreCaisse")

La formule permet de copier par défaut dans le champ IdVendeur de la table source, l'identifiant du vendeur enregistré
dans la table T_ParametreCaisse.

VI-A-8-f - Bouton de commande cmdEncaisser

Un clic sur ce bouton permet de valider l'opération courante et de passer à une nouvelle.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Valide l'opération courante et passe à la suivante.
'----------------------------------------------------------------------------------------
Private Sub cmdEncaisser_Click()
' Ouvre le formulaire des encaissements
DoCmd.OpenForm "F_Encaissement", , , "IdOperation=" & Nz(Me.IdOperation)

End Sub

- 22 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-B - Formulaire F_ParametreCaisse

Il est basé sur la table T_ParametreCaisse et permet de paramétrer la caisse en définissant la référence de la caisse
et du vendeur.

On y accède depuis le formulaire F_Operation en cliquant sur le bouton cmdCaisse :

Aperçu du formulaire F_ParametreCaisse accessible depuis F_Operation

VI-B-1 - Listes déroulantes pour choisir la caisse et le vendeur

Elles permettent de définir la caisse sur laquelle le vendeur effectuera les opérations.

- 23 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Aperçu du formulaire F_ParametreCaisse en mode création

VI-B-1-a - Liste déroulante cmbCaisse

Elle est liée au champ IdCaisse de la table T_ParametreCaisse et sa propriété Contenu fait référence à la table
T_Caisse.

VI-B-1-b - Liste déroulante cmbVendeur

Elle est liée au champ IdVendeur de la table T_ParametreCaisse et sa propriété Contenu fait référence à la table
T_Vendeur.

VI-C - Formulaire F_ListeProduit

Ce formulaire permet au vendeur de choisir un produit dans une liste filtrée par catégorie, il contient le sous-formulaire
SF_ListeProduit.

- 24 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

Aperçu du formulaire F_ListeProduit en mode création

- 25 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-C-1 - Formulaire SF_ListeProduit

Aperçu du formulaire SF_ListeProduit en mode création

VI-C-1-a - Bouton de commande cmdSelectionner

Un clic sur ce bouton permet de copier la désignation et le prix du produit sur la ligne courante dans le détail de
l'opération.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Sélectionne le produit et copie sa désignation et son prix dans le détail.
'----------------------------------------------------------------------------------------
Private Sub cmdSelectionner_Click()
Forms!F_Operation!
DateOperation = Date ' Copie la date courante dans la zone de texte DateOperation pour créer l'opération
Forms!F_Operation!SF_DetailOperation!DesignationProduit = Me.DesignationProduit
' Copie de la désignation du produit dans le détail
Forms!F_Operation!SF_DetailOperation!PrixUnitaire =
Me.PrixUnitaire ' Copie du prix unitaire dans le détail
Forms!F_Operation!SF_DetailOperation!TauxTVA = Me.TauxTVA ' Copie du taux de TVA dans le détail
DoCmd.Close acForm, Me.Parent.Name
End Sub

- 26 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-D - Formulaire F_Encaissement

Lié à la table T_Operation, il s'ouvre en cliquant sur le bouton Encaisser, et permet la saisie de l'argent donné par le
client en utilisant des contrôles représentant les billets et pièces de monnaie.

Aperçu du formulaire F_Encaissement en mode création

VI-D-1 - Procédure générique

Une procédure générique placée sur l'événement Clic des images et boutons de commande permet d'ajouter le
montant du billet ou de la pièce, au montant déjà enregistré dans la zone de texte txtTotalPaiement.

Les étapes de la procédure sont les suivantes :

1 On masque le contour de toutes les images ;


2 Si le contrôle cliqué est une image, on affiche son contour ;
3 On ajoute le montant du billet ou de la pièce au montant déjà présent dans la zone de texte txtTotalPaiement.

Le code complet :

procédure générique
'------------------------------------------------------------------------------------------------
' Ajoute le montant passé en argument au montant contenu dans la zone de texte txtTotalPaiement.
'------------------------------------------------------------------------------------------------
Public Sub MajEncaissement(m As Currency)
' m : Argument de la routine correspondant au montant du billet ou de la pièce cliqué
On error goto err_MajEncaissement

' On masque le contour de toutes les images


Me.Controls("img1").BorderStyle = 0
Me.Controls("img2").BorderStyle = 0
Me.Controls("img5").BorderStyle = 0

- 27 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

procédure générique
Me.Controls("img10").BorderStyle = 0
Me.Controls("img20").BorderStyle = 0
Me.Controls("img50").BorderStyle = 0
Me.Controls("img100").BorderStyle = 0
Me.Controls("img200").BorderStyle = 0
Me.Controls("img500").BorderStyle = 0

If m >= 1 Then ' Si le contrôle cliqué est une image


Me.Controls("img" + CStr(m)).BorderStyle = 1 ' Affiche son contour
End If

' Ajoute le montant du billet ou de la pièce au montant déjà présent dans la zone de texte txtTotalPaiement
Me.txtTotalPaiement = Nz(Me.txtTotalPaiement, 0) + m

exit sub

err_MajEncaissement:
Msgbox(err.description)

End Sub

Le formulaire et le code VBA associé peuvent être facilement réutilisés si votre unité monétaire
est l'euro.

VI-D-2 - Les images représentant les billets et les pièces

Ces contrôles affichent les différents billets d'euros disponibles sur le marché, un clic sur ces images exécute la
procédure générique permettant l'ajout du montant du billet ou de la pièce, au montant déjà enregistré dans la zone
de texte txtTotalPaiement.

Aperçu des images affichant les euros

- 28 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-D-2-a - Image img5

Un clic sur cette image permet d'ajouter 5 euros au montant affiché dans la zone de texte txtTotalPaiement

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Ajoute 5 au montant donné par le client.
'----------------------------------------------------------------------------------------
Private Sub img5_Click()
MajEncaissement (5) ' Ajoute 5 au montant affiché dans la zone de texte txtTotalPaiement
End Sub

VI-D-2-b - Image img10

Un clic sur cette image permet d'ajouter 10 euros au montant affiché dans la zone de texte txtTotalPaiement

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Ajoute 10 au montant donné par le client.
'----------------------------------------------------------------------------------------
Private Sub img10_Click()
MajEncaissement (10) ' Ajoute 10 au montant affiché dans la zone de texte txtTotalPaiement
End Sub

VI-D-3 - Les boutons de commande pour les centimes

Ces contrôles représentant les pièces de 1, 2, 5, 10, 20 et 50 centimes, un clic sur ces boutons de commande exécute
une procédure générique permettant l'ajout du montant de la pièce, au montant déjà enregistré dans la zone de texte
txtTotalPaiement.

Aperçu des images affichant les centimes

- 29 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-D-3-a - Bouton de commande cmd1c

Un clic sur cette image permet d'ajouter 1 centime au montant affiché dans la zone de texte txtTotalPaiement

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Ajoute 1 centime au montant donné par le client.
'----------------------------------------------------------------------------------------
Private Sub cmd1c_Click()
MajEncaissement (0.01) ' Ajoute 1 centime au montant affiché dans la zone de texte txtTotalPaiement
End Sub

VI-D-3-b - Bouton de commande cmd2c

Un clic sur cette image permet d'ajouter 2 centimes au montant affiché dans la zone de texte txtTotalPaiement

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Ajoute 2 centimes au montant donné par le client.
'----------------------------------------------------------------------------------------
Private Sub cmd2c_Click()
MajEncaissement (0.02) ' Ajoute 2 centimes au montant affiché dans la zone de texte txtTotalPaiement
End Sub

VI-D-4 - Boutons de commande pour composer le montant donné

Ces boutons permettent de copier les nombres dans la zone de texte txtTotalPaiement.

Aperçu du pavé numérique

- 30 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-D-4-a - Procédure générique

Une procédure générique placée sur l'événement Clic de ces boutons permet d'ajouter à la suite du contenu de la
zone de texte txtTotalPaiement, le chiffre du bouton cliqué.

Les étapes de la procédure sont les suivantes :

1 On copie dans une variable le contenu de la légende du bouton cliqué (0, 1, …, 9) ;


2 On place le focus sur la zone de texte txtTotalPaiement ;
3 On ajoute à la fin de la zone de texte le chiffre contenu dans la variable ;
4 On place le curseur à la fin du contenu de la zone de texte.

Le code complet :

procédure générique
'-------------------------------------------------------------------------------------------------
' Copie les chiffres affichés sur la légende des boutons à la suite dans la zone txtTotalPaiement.
'-------------------------------------------------------------------------------------------------
Public Sub MajEncaisser()
Dim c As String

On Error GoTo err_MajEncaisser ' Gestion d'erreur

c = Replace(Me.ActiveControl.Caption, ".", ",") ' Copie dans une variable la légende du bouton de commande (0,1,2,
Me.txtTotalPaiement.SetFocus ' Positionne le focus dans la zone de texte txtTotalPaiement
Me.txtTotalPaiement.Value = (Me.txtTotalPaiement.Text +
c) ' Copie le chiffre à la suite du contenu de la zone de texte txtTotalPaiement
Me.txtTotalPaiement.SelStart = Len(Me.txtTotalPaiement.Text) + 1 ' Positionne le curseur à la fin du contenu de la

Exit Sub
err_MajEncaisser:
MsgBox Err.Description ' Affiche la description de l'erreur
End Sub

Le pavé numérique et le code VBA associé peuvent être facilement réutilisés.

VI-D-4-b - Bouton de commande cmd0

Un clic sur ce bouton permet de copier 0 à la suite dans la zone de texte txtTotalPaiement.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie le chiffre 0 à la suite dans la zone de texte txtTotalPaiement.
'----------------------------------------------------------------------------------------
Private Sub cmd0_Click()
MajEncaisser ' Exécution de la procédure de mise à jour de la zone de texte txtTotalPaiement
end sub

VI-D-4-c - Bouton de commande cmd1

Un clic sur ce bouton permet de copier 1 à la suite dans la zone de texte txtTotalPaiement.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie le chiffre 1 à la suite dans la zone de texte txtTotalPaiement.
'----------------------------------------------------------------------------------------
Private Sub cmd1_Click()
MajEncaisser ' Exécution de la procédure de mise à jour de la zone de texte txtTotalPaiement

- 31 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

procédure événementielle sur clic


end sub

C'est le même principe pour les autres chiffres du pavé numérique.

VI-D-4-d - Bouton de commande cmdP

Un clic sur ce bouton permet de copier « . » à la suite dans la zone de texte txtTotalPaiement.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Copie un point à la suite dans la zone de texte txtTotalPaiement.
'----------------------------------------------------------------------------------------
Private Sub cmdP_Click()
MajEncaisser ' Exécution de la procédure de mise à jour de la zone de texte txtTotalPaiement
end sub

VI-D-4-e - Bouton de commande cmdC

Un clic sur ce bouton permet d'effacer le contenu de la zone de texte txtTotalPaiement.

procédure événementielle sur clic


'----------------------------------------------------------------------------------------
' Efface le contenu de la zone de texte txtTotalPaiement.
'----------------------------------------------------------------------------------------
Private Sub cmdC_Click()
Me.txtTotalPaiement.Value = Null ' Efface le contenu de la zone de texte
end sub

- 32 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-D-5 - Zone de texte pour afficher le rendu

Aperçu de la zone de texte txtTotalPaiement

VI-D-5-a - Zone de texte txtRendu

La propriété Source contrôle de cette zone de texte fait référence au contrôle txtTotalTTC du formulaire
F_Encaissement et au contrôle txtTotalTTC du formulaire F_Operation :

=[txtTotalPaiement]-Formulaires!F_Operation!txtTotalTTC

- 33 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VI-D-6 - Boutons de commande pour valider ou recommencer la saisie

Aperçu des boutons de commandes

VI-D-6-a - Bouton de commande cmdValider

Valide la saisie et donc l'encaissement, puis lance l'impression du ticket.

Les étapes de la procédure sont les suivantes :

1 Enregistre la saisie sur le formulaire d'encaissement ;


2 Lance l'impression du ticket de caisse ;
3 Ferme le formulaire d'encaissement ;
4 Place le focus sur le formulaire F_Operation ;
5 Se positionne sur un nouvel enregistrement pour une nouvelle opération.

Le code complet :

Private Sub cmdValider_Click()


Me.TotalPaiement = Nz(Me.txtTotalPaiement, 0) ' Copie du contenu de la zone de texte txtTotalPaiement dans le cham
Me.Refresh ' Actualise le formulaire
DoCmd.OpenReport "E_Ticket", acViewPreview, , "IdOperation=" & Nz(Me!
IdOperation, 0) ' Lance l'impression du ticket de caisse

DoCmd.Close acForm, Me.Name ' Ferme le formulaire d'encaissement.


Forms!F_Operation.SetFocus ' Place le focus sur le formulaire F_Operation

If MsgBox("Vous lui devez " & Format(Me.txtRendu, "currency"), vbOKCancel, "Rendu") = vbCancel Then ' Possibilit
Exit Sub
End If

DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acNext ' Se déplace sur un nouvel enregistrement

- 34 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

End Sub

VI-D-6-b - Bouton de commande cmdAnnuler

Annule la saisie en vidant la zone de texte txtTotalPaiement.

Private Sub cmdAnnuler_Click()


Me.txtTotalPaiement.Value = Null ' Vide la zone de texte
End Sub

VII - État nécessaire

VII-A - État E_Ticket

Aperçu de l'état en mode création

Il est basé sur la requête R_Ticket et est imprimé à la fin du processus d'encaissement.

On a défini en mode création un regroupement sur le champ IdOperation et un tri sur le champ
IdLigne.

- 35 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/
Créer un logiciel de caisse enregistreuse avec Microsoft Access par Denis Hulo

VIII - Lien utile

Il faut désormais tenir compte de la loi obligeant à partir de 2018 l'utilisation d'un logiciel de caisse certifié, pour plus
d'informations vous pouvez consulter cette page : Obligation d'utiliser des logiciels de caisse certifiés à partir
de 2018

IX - Les bases de données à télécharger

Les bases jointes au format mdb et accdb.

X - Remerciements

Je tiens à remercier Pierre Fauconnier, chrtophe, gaby277 et Claude Leloup pour m'avoir conseillé pour la
réalisation de cet article, ainsi que pour sa relecture.

- 36 -
Copyright ® 2017 Denis Hulo. Aucune reproduction, même 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 intérêts.
http://denishulo.developpez.com/tutoriels/access/caisse/

Vous aimerez peut-être aussi