Tutoriel pour tenir la comptabilité d'une association caritative avec Access

Cet article s'adresse à des utilisateurs d'Access qui ont déjà une expérience du logiciel (VBA notamment) et qui possèdent des notions de comptabilité.

Il s'inscrit dans le prolongement des deux tutoriels :

Vous y trouverez aussi quelques exemples de comptabilisation d'événements courants dans la vie d'une association.

Si vous désirez réagir, un espace de dialogue vous est proposé sur le forum : 11 commentaires Donner une note à l'article (5)

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Contexte

Il s'agit d'une association caritative qui recueille des fonds sous la forme de cotisations, de parrainages et des dons ponctuels, pour les redistribuer à des personnes âgées en grande détresse, sous forme de dons alimentaires et vestimentaires, d'accès aux soins médicaux et à l'hygiène, d'hébergement ponctuel pour des seniors sans famille et sans abri.

II. Le plan comptable

On se réfère au plan comptable des associations (loi 1901) dont la liste complète peut être consultée sur ce site : Loi1901.com.

Pour ce qui concerne les besoins de l'exemple, nous avons retenu seulement ceux-ci :

Image non disponible

- Une case cochée dans la colonne « À l'actif » signifie que ce compte de bilan (N° 1000 à 5999) figure à l'actif, les comptes de bilan non cochés s'inscriront au passif.

- Les colonnes « OKii » servent à indiquer si le compte peut être mouvementé pour enregistrer des opérations respectivement dans les livres banque, caisse, achats et opérations diverses.

- Les quelques comptes fournisseurs individuels sont intégrés dans le plan comptable pour des raisons pratiques (leur solde individuel est donc directement accessible). Pour la confection du bilan, ils sont globalisés dans le compte 4010 Fournisseurs.

III. Les différents formulaires pour saisir les événements comptables

III-A. Les opérations au compte Banque

Image non disponible
Encodage des opérations de banque

III-B. Les opérations au compte Caisse

Image non disponible
Encodage des opérations de caisse

Remarque

Prélever des fonds dans la caisse pour les verser en banque se comptabilise :

  • d'abord dans le journal de caisse, le jour du versement :

                                                            Virements de fonds

                                                                                          à Caisse 

  • ensuite, dans le journal de banque, quand on reçoit l'extrait de la banque :

                                                            Banque

                                                                         à Virements de fonds

III-C. Le facturier des achats

Les factures des fournisseurs sont numérotées et conservées dans un classeur.

Image non disponible
Encodage des factures d'achats

Remarque : l'association qui sert d'exemple n'est pas assujettie à la TVA.

III-D. Les opérations diverses

Pour comptabiliser les événements comptables qui n'impliquent ni la banque, ni la caisse, ni un fournisseur. Par exemple, les écritures de fin d'exercice.

Image non disponible
Encodage des opérations diverses

IV. Quelques exemples de comptabilisations pour enregistrer des événements particuliers

  • Un artisan offre à l'association un lot d'objets qu'elle pourra mettre en vente lors de son marché de Noël, valeur estimée : 2000 € :

    Image non disponible
  • Un donateur offre un projecteur (750 €) avec une cartouche d'encre (45 €) à l'association :

    Image non disponible
  • Amortissement du projecteur reçu (par exemple en cinq ans) :

    Image non disponible
  • L'association achète un ordinateur (499 €) :

    Image non disponible
  • Amortissement de l'ordinateur acheté (par exemple en trois ans) :

    Image non disponible
  • L'association perçoit les intérêts sur son livret bleu :

Note pour les lecteurs qui recourent aux services de Image non disponible Mossack Fonseca : dans votre cas, il vaut mieux ne rien comptabiliser !

Image non disponible

V. Les écritures relatives à la fin d'exercice

À la fin de l'exercice comptable (souvent le 31/12), on va « clôturer » les comptes et établir le bilan et le compte de résultat.

On commence par établir un inventaire. En fait on va comparer
- le contenu des comptes des classes 1 à 5 qui traduisent le patrimoine de l'association
avec
- la réalité du terrain.

En pratique, on tire une balance (« provisoire ») des comptes et on « justifie les soldes » des comptes de bilan.

Dans notre exemple :

Image non disponible

Image non disponible Il s'agit de la contrepartie du projecteur reçu de Christophe.

On a décidé de l'amortir en cinq ans, on comptabilise l'amortissement :

Image non disponible

Image non disponible On vérifie que c'est bien le report comptabilisé au bilan précédent (31/12/14).

Image non disponible

Image non disponible Ce solde représente
- le projecteur (750 que nous avons déjà réduit plus haut)
et
- l'ordinateur (499) que nous avons décidé d'amortir en trois ans.
On comptabilise l'amortissement :

Image non disponible On dresse l'inventaire des objets encore en stock et on valorise chaque pièce à sa valeur d'achat (par exemple sur une feuille Excel).

Supposons que la valeur totale s'élève à 1234,00 €, on comptabilise l'ajustement :

Image non disponible

Image non disponible et Image non disponible On compare ce solde à celui (symétrique !(1)) qui figure à l'extrait bancaire.

Image non disponible On compte l'argent qui est effectivement dans la caisse.

Un ultime coup d'œil sur la balance (en principe « définitive ») pour détecter et corriger les erreurs d'imputation éventuelles.

Quand on est convaincu que tout est OK, on clôture les comptes de résultat de l'exercice.

Concrètement, on met leur solde à zéro par contrepartie de « 1100 Report à nouveau ».

Cette opération est automatisée :

Image non disponible

Et viennent bilan et compte de résultat en deux clics :

Image non disponible
Image non disponible

De même pour les journaux auxiliaires :

Image non disponible

et le grand-livre :

Image non disponible

VI. Commentaires sur la confection de l'état sePassif

Image non disponible

La source (plutôt acrobatique !) :

Image non disponible
 
Sélectionnez
SELECT IIf([PlanCpte] Like "4*",4010,[Plancpte]) AS CptePassif, Sum(solde([PlanCpte],getgvLaDate())) AS Mt, First(IIf([PlanCpte]=[CptePassif],[PlanIntitule],"Fournisseurs")) AS Intitule
FROM tPlanCompta
WHERE (((tPlanCompta.[Actif])=No))
GROUP BY IIf([PlanCpte] Like "4*",4010,[Plancpte])
HAVING (((Sum(solde([PlanCpte],getgvLaDate())))>0.001));

VII. Commentaires sur la confection de l'état eGrandLivre

Image non disponible

Nous voulons, compte par compte, afficher :

Image non disponible le solde en début d'exercice (en-tête de groupe PlanCpte) ;

Image non disponible le détail des mouvements (détail) ;

Image non disponible le solde en fin d'exercice (pied de groupe PlanCpte).

La source n'est pas piquée des vers :

 
Sélectionnez
SELECT tPlanCompta.tPlanPK, tPlanCompta.PlanCpte, tPlanCompta.PlanIntitule, 
"31/12/" & getgvAnnee()-1 AS DateDepart, 
"31/12/" & getgvAnnee() AS DateFin,
solde([PlanCpte],[DateDepart]) AS SoldeOuverture,
IIf([soldeOuverture]<0,-[SoldeOuverture],0) AS SODebiteur,
IIf([soldeOuverture]>0,[SoldeOuverture],0) AS SOCrediteur, 
solde([PlanCpte],[DateFin]) AS SoldeCloture,
IIf([SoldeCloture]<0,-[SoldeCloture],0) AS SCDebiteur,
IIf([SoldeCloture]>0,[SoldeCloture],0) AS SCCrediteur,
tMvts.Origine, tMvts.MvtDate,
IIf([MvtMt]<0,-[MvtMt],0) AS Debit,
IIf([MvtMt]>0,[MvtMt],0) AS Credit, tMvts.MvtLibelle
FROM tMvts INNER JOIN tPlanCompta ON tMvts.tPlanFK = tPlanCompta.tPlanPK
WHERE (((tMvts.MvtDate)>"31/12/" & getgvAnnee()-1 And (tMvts.MvtDate)<="31/12/" & getgvAnnee()))
ORDER BY tPlanCompta.PlanCpte;

On comprendra mieux avec un dessin :

Image non disponible

Image non disponible On construit la date de l'exercice précédent et celle de l'exercice courant.

Image non disponible On utilise chacune de ces dates comme paramètre de la fonction Solde().

Image non disponible On ventile la colonne du solde en solde débiteur et solde créditeur.

Image non disponible Seuls les mouvements de l'exercice sont sélectionnés.

Image non disponible Les MvtMt sont ventilés en débit et crédit.

VIII. Commentaires du code VBA (module mCompta)

VIII-A. Deux variables globales et les fonctions qui restituent leur valeur

 
Sélectionnez
Global gvLaDate As Date
Global gvAnnee As Long

Public Static Function GetgvLadate()
  GetgvLadate = gvLaDate
End Function

Public Static Function GetgvAnnee()
  GetgvAnnee = gvAnnee
End Function

VIII-A-1. À quoi servent ces globales ?

Par exemple, si l'utilisateur demande l'édition du bilan, il devra renseigner la date.
On vérifie qu'il s'agit d'une date pertinente, avant de la stocker dans la variable globale gvLaDate.

La fonction GetgvDate() permet d'en récupérer la valeur pour l'utiliser dans la requête source de l'actif :

Image non disponible

Dans une requête, on n'a pas accès aux variables globales. Pour pallier cette lacune, on utilise une fonction qui a la même valeur.

VIII-B. Deux fonctions pour demander une date ou une année

VIII-B-1. Pour demander une date

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public Function DemanderDate() As Boolean
  On Error GoTo GestionErreurs
  Dim LaDate As Date
  'Invite
  LaDate = InputBox("À quelle date jj/mm/aaaa ?")
  'Vérifier la pertinence
  If IsNull(DLookup("tMvtsPK", "tMvts", "year(MvtDate)=" & Year(LaDate))) Then
      Err.Raise 13
  End If
  'MàJ gvLaDate
  gvLaDate = LaDate
  DemanderDate = True
GestionErreurs:
  Select Case Err.Number
      Case 0 'Pas d'erreur
          Exit Function
      Case 13, 94 'Valeur incorrecte
          MsgBox "La valeur entrée n'est pas pertinente !"
          Exit Function
      Case Else
          MsgBox "Erreur dans DemanderDate  " & Err.Number & " " & Err.Description
  End Select
End Function

Commentaires du code

: on vérifie que la table tMvts contient au moins un mouvement pour cette période. Si ce n'est pas le cas, on force une erreur N° 13 que l'on traite à l'instruction 17 pour signaler l'anomalie à l'utilisateur.

12 : si la date est pertinente, la fonction renvoie True. Sinon, elle renvoie sa valeur initiale par défaut : False.

Exemple d'utilisation

Si on clique sur le bouton « Balance » du menu, le code suivant se déclenche :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
Private Sub btBalance_Click()
  'Demander la date
  If DemanderDate = True Then
      Call CreaMvts
      DoCmd.OpenReport "eBalance", acViewPreview
  End If
End Sub

L'utilisateur reçoit cette invite :

Image non disponible

S'il introduit par erreur « 311/2/2015 », ce message sera affiché :

Image non disponible

VIII-B-2. Pour demander une année

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Function DemanderAnnee() As Boolean
  On Error GoTo GestionErreurs
  Dim lngAnnee As Long
  'Invite
  lngAnnee = InputBox("Quelle année aaaa ?")
  'Vérif pertinence
  If IsNull(DLookup("tMvtsPK", "tMvts", "year(MvtDate)=" & lngAnnee)) Then
      Err.Raise 13
  End If
  'MàJ gvAnnee
  gvAnnee = lngAnnee
  DemanderAnnee = True
GestionErreurs:
  Select Case Err.Number
      Case 0 'Pas d'erreur
          Exit Function
      Case 13, 94 'Valeur incorrecte
          MsgBox "La valeur entrée n'est pas pertinente !"
      Case Else
          MsgBox "Erreur dans DemanderAnnee  " & Err.Number & " " & Err.Description
  End Select
End Function

Même explication, mutatis mutandis.

VIII-C. Deux fonctions pour connaître le solde d'un compte à une date

VIII-C-1. Solde()

Le solde d'un compte, c'est la somme algébrique de ses mouvements (dans notre cas, les débits sont signés « - »).

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
Public Function solde(NumCpte As Long, ADate As Date) As Single
  Dim lngCptePK As Long
  'Rechercher le tPlanPK
  lngCptePK = DLookup("tPlanPK", "tPlanCompta", "PlanCpte =" & NumCpte)
  'Solde = somme des mouvements
  solde = Nz(DSum("MvtMt", "tMvts", "MvtDate<=#" & Format(ADate, "mm/dd/yyyy") & "# AND tPlanFK =" & lngCptePK), 0)
End Function

Dans une fonction (et d'une manière générale dans le VBA), les dates doivent être formatées à la sauce anglaise : mois, jour, année, et encadrées de croisillons (#).

Ex. pour le 2 mars 2016 : #3/2/16#.

Explication du code

: on recherche l'id (tPlanPK) du N° de compte dans la table tPlan.

7 : on additionne les mouvements de ce compte. Si la somme est null (pas encore de mouvement à cette date, par exemple), la fonction renvoie « 0 ».

Exemple d'utilisation

Image non disponible

VIII-C-2. SoldePP()

Pour confectionner le bilan, les comptes de résultat (on dit aussi les comptes de pertes et profits =>PP) sont soldés par transfert au compte « 1100 Report à nouveau ».

La fonction SoldePP() renvoie le solde du compte juste avant cette écriture de transfert :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function SoldePP(NumCpte As Long, Annee As Long) As Double
  'Solde des comptes de pertes et profits avant clôture
  Dim lngCle As Long
  'Recherche le tPlanPK du compte
  lngCle = DLookup("tPlanPK", "tPlanCompta", "PlanCpte=" & NumCpte)
  'Calcul du solde
  SoldePP = Nz(DSum("MvtMt", "tMvts", "tPlanFk=" & lngCle _
                  & " AND  format(MvtDate,""yyyy"")=" & Annee _
                  & " AND MvtLibelle <> ""ClôturePP"""), 0)
End Function

Explication du code

: on recherche l'id (tPlanPK) du N° de compte dans la table tPlan.

7-9 : on additionne les mouvements de ce compte en excluant ceux qui concernent la clôture (libellé = ClôturePP. Si la somme est null (pas encore de mouvement à cette date), la fonction renvoie « 0 ».

Exemple d'utilisation

Image non disponible

VIII-D. Une fonction qui renvoie zéro si la donnée n'existe pas

On connaît la fonction Nz(variant[, valeur-si-null]) qui renvoie une valeur (par ex. « 0 ») si la valeur donnée en premier paramètre est Null.

Ce dont on parle ici, c'est d'une fonction qui renvoie  « 0 »… si la valeur n'existe pas.

Un exemple concret pour comprendre de quoi on parle.

Prenons l'état eRecettesDepenses :

Image non disponible

Instinctivement, on coderait la formule en jaune pour afficher le résultat.

Mais qu'advient-il si, par exemple, il n'y avait pas de dépenses ? Voici :

Image non disponible

Écrire la formule comme ceci :

=Nz([CTNRseRecettes].[Etat]![txtTotalRecettes];0)-Nz[CTNRseDepenses].[Etat]![txtTotalDepenses];0)

ne changerait rien à l'affaire, car [CTNRseDepenses].[Etat]![txtTotalDepenses] n'a pas la valeur Null, le contrôle n'existe pas !

De là, l'idée de cette fonction :

 
Sélectionnez
Function AbsentToZero(anyValue As Variant) As Variant
  On Error GoTo GestionErreur
  AbsentToZero = Nz(anyValue, 0)
GestionErreur:
  AbsentToZero = 0
End Function

Et nous exprimerons la différence comme ceci :

=AbsentToZero([CTNRseRecettes].[Etat]![txtTotalRecettes])-AbsentToZero[CTNRseDepenses].[Etat]![txtTotalDepenses])

qui donnera ceci :

Image non disponible

VIII-E. La routine CreaMvts()

Cette fonction recrée tous les mouvements comptables qui dérivent des encodages des quatre formulaires : fBanque, fCaisse, fAchats et fOpeDiv.

N.B. Tous les mouvements sont recréés à chaque exécution de la routine.

Image non disponible
 
Sélectionnez
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Public Sub CreaMvts()
  DoCmd.SetWarnings False
  'Purge tMvts
  DoCmd.RunSQL " DELETE * FROM tMvts;"
  '------
  'Banque
  '------
  'Mvts dons
  DoCmd.OpenQuery "rMvtsBqDons"
  'Mvts Recettes
  DoCmd.OpenQuery "rMvtsBqRecettes"
  'Mvts Dépenses
  DoCmd.OpenQuery "rMvtsBqFrais"

  '------
  'Caisse
  '------
  'Mvts dons
  DoCmd.OpenQuery "rMvtsCaDons"
  'Mvts Recettes
  DoCmd.OpenQuery "rMvtsCaRecettes"
  'Mvts Dépenses
  DoCmd.OpenQuery "rMvtsCaFrais"
  
  '------------------------------
  'Contreparties Banque et Caisse
  '------------------------------
  DoCmd.OpenQuery "rMvtsContreparties"
  
  '------
  'Achats
  '------
  DoCmd.OpenQuery "rMvtsAchatsFournisseurs"
  DoCmd.OpenQuery "rMvtsAchatsContreParties"
  
  '-------------------
  'Opérations diverses
  '-------------------
  DoCmd.OpenQuery "rMvtsOpDivDebits"
  DoCmd.OpenQuery "rMvtsOpDivCredits"
  
  DoCmd.SetWarnings True
End Sub
Image non disponible

Explication du code

: on vidange la table tMvts pour repartir de zéro.

6-13 : on crée les mouvements contreparties du compte banque au départ des tables qui ont servi à l'encodage des événements de banque.

9 : pour les dons :

11 : pour les autres montants reçus :

Image non disponible

13: pour les montants prélevés au compte banque :

Image non disponible

16-23 : on crée les mouvements contreparties du compte caisse au départ des tables qui ont servi à l'encodage des événements contre espèces.

La technique est identique à celle décrite plus haut pour la banque.

À ce stade, on a créé les mouvements contreparties des comptes 5100 Banque et 5300 Caisse, on va maintenant générer les mouvements pour ces deux comptes, pour chacune des dates.

28 : création des mouvements aux comptes Banque et Caisse :

Image non disponible

31-34 : création des mouvements relatifs aux factures d'achat.

33 : mouvements aux comptes individuels des fournisseurs :

Image non disponible

34 : mouvements dans les comptes contreparties :

Image non disponible

34-40 : création des mouvements des opérations diverses.

39 : les débits :

Image non disponible

40 : les crédits :

Image non disponible

VIII-F. Automatiser la clôture des comptes de résultat

En fait, automatiser le remplissage du formulaire fOpeDiv pour comptabiliser l'écriture qui solde les comptes de résultat par transfert à « 1100 Report à nouveau ».

Dans le déroulement des travaux de clôture, il n'est pas rare de devoir recommencer plusieurs fois cette opération de transfert.

On croit que c'est terminé, on clôture… et on se rend compte qu'on a oublié de comptabiliser une opération importante.

Le mécanisme mis en place dans la routine CloturePP() permet de recommencer autant de fois que nécessaire : l'écriture précédente éventuelle est d'abord détricotée.

Image non disponible

VIII-F-1. Code associé au clic du bouton

 
Sélectionnez
Private Sub BtCloturePP_Click()
  If DemanderAnnee = True Then
      Call CloturePP(gvAnnee)
      DoCmd.OpenForm "fOpeDiv"
  End If
End Sub

Explication du code

: on invite l'utilisateur à entrer une année.

VIII-F-2. La routine Cloture() proprement dite

 
Sélectionnez
Public Sub CloturePP(Annee As Long)

Dim lngCle As Long
Dim strSQL As String
Dim dblContrePartie As Double
Dim qdf As DAO.QueryDef

  '------------------------------------------------------
  'Éliminer les comptabilisations précédentes éventuelles
  '------------------------------------------------------
  DoCmd.SetWarnings False
  ' rechercher la clé de l'enregistrement dans tOpDiv
  lngCle = Nz(DLookup("tOpeDivPk", "tOpeDiv", "tOpeDivDate=#" & "12/31/" & Annee & "#" _
                    & "AND tOpeDivLibelle=""ClôturePP"""), 0)
  'S'il existe on supprime ses débits crédits, sinon on crée un nouvel enregistrement
  If lngCle <> 0 Then
      'Supprimer les débits et crédits anciens
      DoCmd.RunSQL "DELETE * FROM tOpeDivDebits WHERE tOpeDivFK=" & lngCle & ";"
      DoCmd.RunSQL "DELETE * FROM tOpeDivCredits WHERE tOpeDivFK=" & lngCle & ";"
    Else
      Set qdf = CurrentDb.QueryDefs("rClotPPOpeDiv")
      qdf.Parameters("LaDate") = "31/12/" & Annee
      qdf.Execute
  End If
  
  '----------------
  'Recréer les mvts
  '----------------
  Call CreaMvts
  DoCmd.SetWarnings False
  
  '--------------------------------------------------------------------
  'Garnir tOpeDivDebits et tOpeDivCredits pour solder les comptes de PP
  '--------------------------------------------------------------------
  lngCle = DLookup("tOpeDivPk", "tOpeDiv", "tOpeDivDate=#" & "12/31/" & Annee & "#" _
                      & "AND tOpeDivLibelle=""ClôturePP""")
  'Débits pour solder les comptes créditeurs
  Set qdf = CurrentDb.QueryDefs("rClotPPRaZCrediteurs")
  qdf.Parameters("[LaDate]") = "31/12/" & Annee
  qdf.Parameters("[CleOpeDiv]") = lngCle
  qdf.Execute

  'Crédits pour solder les comptes débiteurs
  Set qdf = CurrentDb.QueryDefs("rClotPPRaZdebiteurs")
  qdf.Parameters("[LaDate]") = "31/12/" & Annee
  qdf.Parameters("[CleOpeDiv]") = lngCle
  qdf.Execute

  '-----------------------------------
  'Contrepartie Résultat de l'exercice
  '-----------------------------------
  dblContrePartie = Nz(DSum("OpeDivDebitMt", "tOpeDivDebits", "tOpeDivFK =" & lngCle), 0) _
          - Nz(DSum("OpeDivCreditMt", "tOpeDivCredits", "tOpeDivFK =" & lngCle), 0)
  If dblContrePartie > 0 Then
      'Bénéfice => créditer Report à Nouveau
  Set qdf = CurrentDb.QueryDefs("rClotPPReportBenef")
  qdf.Parameters("[ReportANouveau]") = dblContrePartie
  qdf.Parameters("[CleOpeDiv]") = lngCle
  qdf.Execute
    Else
      'Perte : => débiter Report à Nouveau
      dblContrePartie = dblContrePartie * -1
  Set qdf = CurrentDb.QueryDefs("rClotPPReportPerte")
  qdf.Parameters("[ReportANouveau]") = dblContrePartie
  qdf.Parameters("[CleOpeDiv]") = lngCle
  qdf.Execute
  End If
    
  '-----------
  'Libérer qdf
  '-----------
  Set qdf = Nothing
End Sub

Commentaires du code

9-24 : on annule l'écriture éventuelle déjà comptabilisée pour cette clôture.

13-14 : on recherche dans tOpeDiv la clé de cette précédente écriture éventuelle.

17-19 : s'il y a déjà eu une écriture de clôture cette année, on en supprime les débits et crédits.

21-23 : sinon, on crée un nouvel enregistrement dans tOpeDiv. On exécute la requête paramétrée rClotPPOpeDiv :

Image non disponible
 
Sélectionnez
PARAMETERS [LaDate] DateTime;
INSERT INTO tOpeDiv ( tOpeDivDate, tOpeDivLibelle )
SELECT [LaDate] AS [Date], "ClôturePP" AS libelle;

27-30 : on recrée les mouvements avant clôture.

33-67 : on construit une nouvelle écriture de clôture.

37-41 : on débite les comptes de résultat actuellement créditeurs pour les solder. Pour ce faire, on exécute la requête rClotPPRazCrediteurs :

Image non disponible
 
Sélectionnez
PARAMETERS [LaDate] DateTime, [CleOpeDiv] Long;
INSERT INTO tOpeDivDebits ( tPlanFK, OpeDivDebitMT, tOpeDivFK )
SELECT tPlanCompta.tPlanPK, solde([PlanCpte],[LaDate]) AS Mvt, [CleOpeDiv] AS Cle
FROM tPlanCompta
WHERE (((solde([PlanCpte],[LaDate]))>0.001) And ((tPlanCompta.PlanCpte)>=6000 And (tPlanCompta.PlanCpte)<=7999))
ORDER BY tPlanCompta.PlanCpte;

43-47 : on procède de manière semblable pour solder les comptes de résultat actuellement débiteurs.

50-67 : « 1100 Report à nouveau » est la contrepartie de ces débits et crédits de remise à zéro des comptes de résultat.

52-53 : on calcule le résultat. Si la somme des débits de mise à zéro est supérieure à celle des crédits, nous sommes en bénéfice, sinon en perte.

56-59 : dans le cas d'un bénéfice, on exécute la requête rCloPPReportBenef :

Image non disponible
 
Sélectionnez
PARAMETERS [ReportANouveau] IEEEDouble, [CleOpeDiv] Long;
INSERT INTO tOpeDivCredits ( OpeDivCreditMT, tOpeDivFK, tPlanFK )
SELECT [ReportANouveau] AS benef, [CleOpeDiv] AS Cle, 2 AS NumCpte;

62-67 : idem mutatis mutandis s'il s'agit d'une perte.

IX. Téléchargement

La base de données se trouve ici. Vous devez décompresser l'archive dans un répertoire quelconque qui inclura le sous-dossier Images.

X. Remerciements

Ma gratitude à Joseph de l'association vidica qui a eu la patience de m'expliquer en détail le fonctionnement de son association.

Merci aux utilisateurs de cette application de me signaler les erreurs et lacunes éventuelles.

Merci aussi à Christophe LOUVET, Denis Hulo (User), Pierre Fauconnier et Winjerome pour leurs remarques.

Merci à Jacques Thery pour sa correction orthographique.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   


À un crédit inscrit à l'extrait reçu de la banque correspond un débit dans notre comptabilité, d'où la symétrie des soldes.

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2016 Claude Leloup. 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.