Bonjour,
A l'ouverture de ma base, j'ai un code qui s'exécute automatiquement
Qui appel 2 fonctions pour chacun de mes comptes à calculer les différents soldes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
44
45
46
47
48
49
50
51
52 Option Compare Database Option Explicit Private Sub Form_Open(Cancel As Integer) Dim Base As DAO.Database Dim Chemin As String Dim I As Integer Dim MonPc As Variant Dim rst As Recordset ' V?rification et enregistrement des op?rations r?currentes DoCmd.SetWarnings False DoCmd.OpenQuery "R_Recurrente_Ajout", , acEdit DoCmd.OpenQuery "R_Recurrente_MAJ", , acEdit DoCmd.OpenQuery "R_Recurrente_Supression", , acEdit DoCmd.SetWarnings True ' Chemin du fichier Excel de Synth?se MonPc = Environ("COMPUTERNAME") Set Base = CurrentDb Set rst = Base.OpenRecordset("SELECT * From T_Parametres where TPara1 = '" & MonPc & "'", dbOpenSnapshot) Chemin = rst.Fields("Tpara2").Value rst.Close Set rst = Nothing Application.TempVars("MonFichExcel").Value = Chemin & "Synthese_des_comptes.xlsm" ' Calcul des Soldes de comptes For I = 1 To 6 Application.TempVars("Moncompte").Value = I CalculSoldeCompte Me CalculSoldeBanque Me Next I ' Ouverture du formulaire des saisie op?ration et fermeture formulaire d?marage Application.TempVars("Moncompte") = 4 DoCmd.OpenForm "F_Saisie_Operation", , , "TaOpNumCompte = " & 4 DoCmd.Maximize DoCmd.GoToRecord , , acNewRec DoCmd.Close acForm, "Demarage" End Sub
qui appellent à leur tour un code pour l'enregistrer dans une cellule d'un classeur Excel fermé (code copié à Cafeine https://access.developpez.com/faq/?p...egChangeExcell.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166 Option Compare Database Option Explicit Public Base As DAO.Database Public ClasExcel As DAO.Database Public Col As Variant Public CompteActuel As Variant Public Credit As Variant Public DateJ As Date Public DateK As Date Public DateL As Date Public Debit As Variant Public I As Integer Public Lign As Variant Public rst As Recordset Public rstFiltered As Recordset Public Solde As Variant Public XLApp As Excel.Application Public XLSheet As Excel.Worksheet Public XLBook As Object ' *********************************** ' ** CALCUL DU SOLDE DES COMPTES ** ' *********************************** Function CalculSoldeCompte(ByRef CalculSoldeC As Form) DateL = DateAdd("m", 1, DateSerial(Year(Date), Month(Date), 1)) ' ** Calcul du solde fin de mois ** ' *********************************** Solde = 0 CompteActuel = Application.TempVars("Moncompte").Value Set Base = CurrentDb Set rst = Base.OpenRecordset("SELECT * From T_Operation where TaOpNumCompte =" & CompteActuel, dbOpenSnapshot) Do If rst.Fields("TaOpMultiFils").Value = "Faux" Then DateJ = rst.Fields("TaOpDate").Value If DateJ < DateL Then If rst.Fields("TaOpMultiFils").Value = 0 Then Debit = rst.Fields("TaOpDebit").Value Credit = rst.Fields("TaOpCredit").Value Solde = Solde + Credit - Debit End If End If End If rst.MoveNext Loop Until rst.EOF = True rst.Close Set rst = Nothing Set rst = Base.OpenRecordset("T_Comptes", dbOpenDynaset) rst.Filter = "TaCoCle = " & CompteActuel Set rstFiltered = rst.OpenRecordset rstFiltered.Edit rstFiltered.Fields("TaCoSoldeCompte").Value = Solde rstFiltered.Update rst.Close Set rst = Nothing ' Enregistrement dans Excel Lign = CompteActuel Col = 8 DAOUpdateExcelFile Application.TempVars("MonFichExcel").Value, "Feuil2", Lign, Col, Lign ' ** Calcul du solde ? ce jour ** ' ********************************* Solde = 0 Set rst = Base.OpenRecordset("T_Operation", dbOpenDynaset) Set rst = Base.OpenRecordset("SELECT * From T_Operation where TaOpNumCompte =" & CompteActuel, dbOpenSnapshot) Do DateJ = rst.Fields("TaOpDate").Value If DateJ <= Date Then If rst.Fields("TaOpMultiFils").Value = "Faux" Then Debit = rst.Fields("TaOpDebit").Value Credit = rst.Fields("TaOpCredit").Value Solde = Solde + Credit - Debit End If End If rst.MoveNext Loop Until rst.EOF = True rst.Close Set rst = Nothing Set rst = Base.OpenRecordset("T_Comptes", dbOpenDynaset) rst.Filter = "TaCoCle = " & CompteActuel Set rstFiltered = rst.OpenRecordset rstFiltered.Edit rstFiltered.Fields("TaCoSoldeJour").Value = Solde rstFiltered.Update rst.Close Set rst = Nothing ' Enregistrement dans Excel Col = 10 DAOUpdateExcelFile Application.TempVars("MonFichExcel").Value, "Feuil2", Lign, Col, Lign End Function ' ********************************* ' ** CALCUL DU SOLDE DE BANQUE ** ' ********************************* Function CalculSoldeBanque(ByRef CalculSoldeB As Form) CompteActuel = Application.TempVars("Moncompte").Value Solde = 0 Set rst = Base.OpenRecordset("T_Operation", dbOpenDynaset) rst.Filter = "TaOpNumCompte = " & CompteActuel & "And TaOpPointageBanque = -1" ' AND TaOpMultiFils = -1" Set rstFiltered = rst.OpenRecordset Do 'If rst.Fields("TaOpCle").Value = 394 Then MsgBox rst.Fields("TaOpMultiFils").Value 'If rst.Fields("TaOpMultiFils").Value = 0 Then Debit = rstFiltered.Fields("TaOpDebit").Value Credit = rstFiltered.Fields("TaOpCredit").Value Solde = Solde + Credit - Debit 'End If rstFiltered.MoveNext Loop Until rstFiltered.EOF = True rst.Close Set rst = Nothing Set rst = Base.OpenRecordset("T_Comptes", dbOpenDynaset) rst.Filter = "TaCoCle = " & CompteActuel Set rstFiltered = rst.OpenRecordset rstFiltered.Edit rstFiltered.Fields("TaCoSoldeBanque").Value = Solde rstFiltered.Update rst.Close Set rst = Nothing ' Enregistrement dans Excel Lign = CompteActuel Col = 9 DAOUpdateExcelFile Application.TempVars("MonFichExcel").Value, "Feuil2", Lign, Col, Lign End Function
Jusque là, tout va bien, mon tableau se met à jour sans problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ' ****************************************************** ' ** ENREGISTREMENT DANS SYNTHESE DES COMPTES EXCEL ** ' ****************************************************** Sub DAOUpdateExcelFile(ByVal strFullPath As String, _ ByVal strTab As String, _ ByVal RowIndex As Long, _ ByVal ColumnIndex As Long, _ ByVal setValue As Variant) ' Ajoutez la r?f?rence DAO Dim db As DAO.Database Dim rec As DAO.Recordset ' On ouvre le fichier Excel en tant que base de donn?es DAO Set db = OpenDatabase(strFullPath, False, False, "Excel 8.0;") DoEvents Set rec = db.OpenRecordset(strTab & "$", DAO.dbOpenDynaset) ' On se d?place sur l'enregistrement souhait? rec.Move RowIndex - 1 ' On ?dite l'enregistrement rec.Edit rec.Fields(ColumnIndex - 1).Value = Solde rec.Update ' On sauvegarde ' Fermez les objets rec.Close db.Close ' Lib?rez les objets ! Set db = Nothing Set rec = Nothing End Sub
Mais lors de saisie de nouvelles opérations dans un formulaire, lors d'une saisie d'un débit ou crédit ou lors de pointage banque, je refait appel aux fonctions de calculs de solde de compte
exemple de mon code à la saisie d'une opération Crédit
J'ai le mme code pour le débit et pointage banque.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub TaOpCredit_AfterUpdate() If IsNull(Me!TaOpCredit.Value) Then TaOpCredit = 0 If IsNull(Me!TaOpDebit.Value) Then TaOpDebit = 0 Form.Refresh CalculSoldeCompte Me Form.Refresh End Sub
Mes Soldes se mettent bien à jour, mais là j'ai un message qui s'affiche
![]()
et au débogage, ma ligne dans mon dernier code lors de l'enregistrement dans ma cellule Excel
est surlignée
Code : Sélectionner tout - Visualiser dans une fenêtre à part rec.Edit
Je me permets d'ajouter quelques précisions :
- au démarrage avec Access fermé (démarrage avec un raccourci sur le bureau) , le code CalculSoldeBanque et CalculSlodeCompte s'exécutent 6 fois chacun (puisqu'il y a une boucle pour passer tous nos comptes bancaires). Pour le CalculSoldeCompte, il appelle 2 fois le code d'enregistrement dans la cellule Excel et pour le code CalculCodeBanque, 1 fois. Donc le code d'enregistrement dans la cellule Excel est appelé 18 fois au démarrage et donc sans problème.
- mais si j'interompre mes saisies et que je veux redémarrer en double cliquant sur le fichier de démarrage dans le volet de navigation Access, le bug est là.
- de même que si je n'enregistre pas dans les cellules accès au démarage, mais que je le faits simplement en quittant access, le bug est aussi là.
En fait, ce code ne fonctionne qu'au démarrage, access fermé.
Si quelqu'un pourrait m'aider à résoudre ce problème
Merci d'avance et bonne journée
Partager