Bonsoir,
A l'ouverture d'un formulaire j'éxécute ceci :
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
Private Sub BoutonSuite_Click()
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
' Auteur Claude Perelli Créé le 6 juin 2008
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
' Objet         Effectuer les mises à jour automatiques et les initialisations
'
' Description   - initialisation de la Log
'               - recencement des différentes Nature de titres
'               - calculs des pondérations liées aux multiples
'               - ré-évaluation annuelle de la valeur des titres
'               - mise à jour de l'occupation des classeurs
'               - suppression des lignes Objets dans Paramètres
'               - recensement des Etats
'               - recensement des Ecrans/Formulaires
'               - recensement des Macros
'               - recensement des Requêtes
'               - recensement des Tables
'               - recensement des Modules
'
' Remarques     Lorsque l'on travaille sur la base de Références, les formulaires sont automatiquement mis en Plein écran
'               façon PowerPoint alors que cela se fait par le bouton dans les autres bases.
'
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
' Modifié(e) le
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    On Error GoTo Err_BoutonSuite_Click
 
'-----------------------------------------------------------
'   Déclaration des variables et initialisations
'-----------------------------------------------------------
    Dim SQL             As String
    Dim SQLup           As String
    Dim dbCurrent       As Database
    Dim stEcran         As String
    Dim stClauseWhere   As String
    Dim Curseur         As DAO.Recordset
    Dim Titre_évalué    As String
    Dim Nb              As Integer
    Dim Comments        As String
    Dim stIndex         As String
    Dim stTitre         As String
    Dim stVal           As Double
    Dim stClassement    As String
    Dim stValeurs       As String
    Dim stCritere       As String
    Dim stNbr           As String
 
    Set dbCurrent = CurrentDb()
    DoCmd.SetWarnings True
 
'-----------------------------------------------------------       testée ok
'   Initialisation de la Log
'-----------------------------------------------------------
' Suppression de la ligne 'Début de session' dans la Log
' DoCmd.OpenQuery "1R-LOG-DELETE-SESSION", acViewNormal, acEdit
    SQL = "DELETE FROM Log WHERE Jour = date() AND Action = 'Début' ;"
    DoCmd.RunSQL (SQL)
 
' Inscription d'une nouvelle ligne 'Début de session' dans la Log
' DoCmd.OpenQuery "1R-LOG-INSERT-DEBUT SESSION", acViewNormal, acEdit
    SQL = "INSERT INTO Log ( num, Jour, Heure, auteur, [Action], Compteur, Libellé, Impact, Type ) "
    SQL = SQL & "VALUES (time()*1, Date(), 0, '1E-Ecran Présentation', 'Début', 0, "
    SQL = SQL & "'------------------------------------------------------------ Début de session -------------------------------------------------------------- ', 'Log', 'LOG') ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Log"
'------------------------------------------------                    testée ok
' Recencement des différentes Nature de titres
'------------------------------------------------
' DoCmd.RunMacro "1M-NATURE des TITRES", , ""
' Suppression des lignes HISTORIQUE NAT-TITRE dans la table PARAMETRES
' DoCmd.OpenQuery "1R-PARAM-NATURE-TITRE-DELETE", acViewNormal, acEdit
    SQL = "DELETE * FROM Paramètres WHERE Article = 'NAT-TITRE' ;"
    DoCmd.RunSQL (SQL)
 
' Update des lignes NAT-TITRE en HISTORIQUE  NAT-TITRE
' DoCmd.OpenQuery "1R-PARAM-NATURE-TITRE-UPDATE", acViewNormal, acEdit        <<<--- supprimé
 
' Insertion des lignes NAT-TITRE dans la table PARAMETRES
' DoCmd.OpenQuery "1R-PARAM-NATURE-TITRE-INSERT", acViewNormal, acEdit
    SQL = "INSERT INTO Paramètres ( Article, lib1, lib2, lib3, libc1, libc2, libc3, libl1, libl2, libl3, cpt1, cpt2, cpt3, num1, num2, num3, pct1, pct2, pct3, date1, date2, date3, maj ) "
    SQL = SQL & "SELECT 'NAT-TITRE', ' ', ' ', ' ', ' ', ' ', ' ', [Titre], ' ', ' ', Count(*), 0, 0, 0, 0, 0, 0, 0, 0, date(), date(), date(), date() "
    SQL = SQL & "FROM Valeurs GROUP BY [Titre] ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Nature de titre"
'------------------------------------------------                   testée ok
' Calculs des pondérations liées aux multiples
'------------------------------------------------
' DoCmd.RunMacro "1M-MULTIPLE", , ""
 
' RAZ des colonnes MULTIPLES et COEFFICIENT dans la table VALEURS
' DoCmd.OpenQuery "1R-VALEURS-MULTI+COEFF-UPDATE", acViewNormal, acEdit
    SQL = "UPDATE Valeurs SET Multiple = 0, Coefficient = 0 ;"
    DoCmd.RunSQL (SQL)
 
' Mise à jour de la colonne MULTIPLES dans la table VALEURS
'    DoCmd.OpenQuery "1R-VALEURS-MULTIPLES-UPDATE", acViewNormal, acEdit
 
' Ouverture d'un curseur pour recenser les multi-valeurs
    SQL = "SELECT Index as Indx, COUNT(*) as Nbr FROM Valeurs GROUP BY Index ;"
    Set Curseur = CurrentDb.OpenRecordset(SQL)
 
' Lecture du curseur et MAJ de Multiple pour les multi-valeurs
    While Not Curseur.EOF
        Nb = Curseur.Fields("Nbr").Value
        stIndex = Curseur.Fields("Indx").Value
        SQLup = "UPDATE Valeurs SET Multiple = " & "'" & Nb & "'  WHERE Index = " & "'" & stIndex & "'    ;"
        DoCmd.RunSQL (SQLup)
        Curseur.MoveNext
    Wend
 
' Mise à jour de la colonne COEFFICIENT dans la table VALEURS
' DoCmd.OpenQuery "1R-VALEURS-COEFFICIENT-UPDATE", acViewNormal, acEdit
    SQL = "UPDATE Valeurs AS A INNER JOIN Paramètres AS B ON A.Multiple=B.Cpt3 SET A.Coefficient = B.Num1 ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Multiple"
'-----------------------------------------------------              testée ok
' Ré-évaluation annuelle de l'estimation des titres
'-----------------------------------------------------
' DoCmd.OpenQuery "1R-PARAM-ESTIMATION-INSERT", acViewNormal, acEdit
' DoCmd.RunMacro "1M-RE-EVALUATION", , ""
 
' Ouverture d'un curseur pour les titres à ré-évaluer
    SQL = "SELECT ucase(Index) as Indx, Titre, (Estimation + (Estimation * 3/100)) as NewVal  FROM Valeurs WHERE (date() - DateEstimation) > 365 ORDER BY 1;"
    Set Curseur = CurrentDb.OpenRecordset(SQL)
 
' Lecture du curseur et insertion d'une ligne dans la Log
    Nb = 0
    While Not Curseur.EOF
        Comments = Curseur.Fields("Indx").Value & " " & Curseur.Fields("Titre").Value & " estimé(e) à " & Format(Curseur.Fields("NewVal").Value, "# ##0.,00") & " €"
        SQLup = "INSERT INTO Log ( Num, Jour, Heure, Auteur, [Action], Compteur, Libellé, Impact, Type ) "
        SQLup = SQLup & "VALUES (time()*1, Date(), time(), '1E-Ecran Présentation', 'Ré-évaluation', 1, "
        SQLup = SQLup & "'" & Comments & "', 'Valeurs', 'LOG');"
        DoCmd.RunSQL (SQLup)
        Curseur.MoveNext
        Nb = Nb + 1
        MsgBox Comments
    Wend
 
' Ré-évaluation
' DoCmd.OpenQuery "1R-VALEURS-ESTIMATION-UPDATE", acViewNormal, acEdit
    SQL = "UPDATE Valeurs SET DateEstimation = ([DateEstimation] + 365), Estimation = ([Estimation] + ([Estimation] * 3/100)) WHERE (date()-DateEstimation) > 365 ;"
    DoCmd.RunSQL (SQL)
 
    If Nb > 0 Then
        MsgBox "Nombre de titre(s) ré-évalué(s) :     " & Nb & vbCrLf & "Voir la liste dans la Log.", vbInformation, "ScripoGest - Evaluation"
    End If
    MsgBox "Esimation"
'-----------------------------------------------------                                                  testée ok
' Mise à jour de l'occupation des classeurs
'-----------------------------------------------------
' DoCmd.RunMacro "1M-RANGEMENT", , ""
 
' 1/ Comptage du nombre de titres par classeurs
' ---------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-CLASSEUR-COMPTAGE", acViewNormal, acEdit
' Ouverture d'un curseur pour compter le nombre de titres par classeurs
    SQL = "SELECT Classement, COUNT(*) as Nbr FROM Valeurs GROUP BY Classement ;"
    Set Curseur = CurrentDb.OpenRecordset(SQL)
 
' Lecture du curseur et MAJ des nombres de titres par classeur dans Paramètres
    While Not Curseur.EOF
        Nb = Curseur.Fields("Nbr").Value
        stClassement = Curseur.Fields("Classement").Value
        SQLup = "UPDATE Paramètres SET Cpt2 = " & "'" & Nb & "' "
        SQLup = SQLup & " WHERE Article = 'CLASSEUR' AND Lib1 = " & "'" & stClassement & "'    ;"
        DoCmd.RunSQL (SQLup)
        Curseur.MoveNext
    Wend
 
' 2/ Calcul du taux d'occupation
' ------------------------------
'   DoCmd.OpenQuery "1R-PARAM-CLASSEUR-TAUX", acViewNormal, acEdit
 
    SQL = "UPDATE Paramètres SET Cpt3 = ((Cpt2*100)/Cpt1) WHERE Cpt1 > 0 ;"
    DoCmd.RunSQL (SQL)
 
' 3/ Interprétation du taux d'occupation
' --------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-CLASSEUR-FULL", acViewNormal, acEdit
 
    SQL = "UPDATE Paramètres SET Lib3 = 'Plein' WHERE Article = 'Classeur' And Cpt3 > 99 ;"
    DoCmd.RunSQL (SQL)
 
' 4/ Interprétation du taux d'occupation - suite
' ----------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-CLASSEUR-OCCUPATION", acViewNormal, acEdit
 
    SQL = "UPDATE Paramètres SET Lib3 = (Cpt3) WHERE Article = 'Classeur' And Cpt3 Between 0 And 99 And Lib1 <> 'hors' ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Rangement"
'------------------------------------------------                               testée ok
' Suppression des lignes Objets dans Paramètres
'------------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-SYS-DELETE-OBJETS", acViewNormal, acEdit
 
    SQL = "DELETE FROM Paramètres WHERE (Left$([Article],3) = 'SYS'); "
    DoCmd.RunSQL (SQL)
    MsgBox "Objets"
'------------------------------------------------                               testée ok
' Recensement des Etats
'------------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-SYS-INSERT-ETATS", acViewNormal, acEdit
 
    SQL = "INSERT INTO Paramètres ( Article, lib1, lib2, lib3, libc1, libc2, libc3, libl1, libl2, libl3, cpt1, cpt2, cpt3, num1, num2, num3, pct1, pct2, pct3, date1, date2, date3, maj ) "
    SQL = SQL & "SELECT 'SYSETAT', 'Etat', ' ', ' ', ' ', ' ', ' ', MSysObjects.Name, ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, date(), date(), date(), date() "
    SQL = SQL & "FROM MSysObjects WHERE (Left$([Name], 1) <> '~') And (MSysObjects.Type) = -32764 ORDER BY MSysObjects.Name ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Etats"
'------------------------------------------------                               testée ok
' Recensement des Ecrans/Formulaires
'------------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-SYS-INSERT-ECRAN", acViewNormal, acEdit
 
    SQL = "INSERT INTO Paramètres ( Article, lib1, lib2, lib3, libc1, libc2, libc3, libl1, libl2, libl3, cpt1, cpt2, cpt3, num1, num2, num3, pct1, pct2, pct3, date1, date2, date3, maj ) "
    SQL = SQL & "SELECT 'SYSECRAN', 'Ecran/Form', ' ', ' ', ' ', ' ', ' ', MSysObjects.Name, ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, date(), date(), date(), date() "
    SQL = SQL & "FROM MSysObjects WHERE (Left$([Name], 1) <> '~') And (MSysObjects.Type) = -32768 And ([Name] Like '1E-*' Or [Name] Like '1F-*') ORDER BY MSysObjects.Name ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Ecrans"
'------------------------------------------------                           testée ok
' Recensement des Macros
'------------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-SYS-INSERT-PROC", acViewNormal, acEdit
 
    SQL = "INSERT INTO Paramètres ( Article, lib1, lib2, lib3, libc1, libc2, libc3, libl1, libl2, libl3, cpt1, cpt2, cpt3, num1, num2, num3, pct1, pct2, pct3, date1, date2, date3, maj ) "
    SQL = SQL & "SELECT 'SYSMACRO', 'Macro', ' ', ' ', ' ', ' ', ' ', MSysObjects.Name, ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, date(), date(), date(), date() "
    SQL = SQL & "FROM MSysObjects WHERE (Left$([Name], 1) <> '~') And (MSysObjects.Type) = -32766 And ((Left$([Name],3) = '1M-') Or [Name]='autoexec') ORDER BY MSysObjects.Name ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Macros"
'------------------------------------------------                           testée ok
' Recensement des Requêtes
'------------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-SYS-INSERT-QUERY", acViewNormal, acEdit
 
    SQL = "INSERT INTO Paramètres ( Article, lib1, lib2, lib3, libc1, libc2, libc3, libl1, libl2, libl3, cpt1, cpt2, cpt3, num1, num2, num3, pct1, pct2, pct3, date1, date2, date3, maj ) "
    SQL = SQL & "SELECT 'SYSQUERY', 'Requête', ' ', ' ', ' ', ' ', ' ', MSysObjects.Name, ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, date(), date(), date(), date() "
    SQL = SQL & "FROM MSysObjects WHERE (Left$([Name], 1) <> '~') And (MSysObjects.Type) = 5 And ([Name] Like '1R-*') ORDER BY MSysObjects.Name ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Requêtes"
'------------------------------------------------                       testée ok
' Recensement des Tables
'------------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-SYS-INSERT-TABLE", acViewNormal, acEdit
 
    SQL = "INSERT INTO Paramètres ( Article, lib1, lib2, lib3, libc1, libc2, libc3, libl1, libl2, libl3, cpt1, cpt2, cpt3, num1, num2, num3, pct1, pct2, pct3, date1, date2, date3, maj ) "
    SQL = SQL & "SELECT 'SYSTABLE', 'Table', ' ', ' ', ' ', ' ', ' ', MSysObjects.Name, ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, date(), date(), date(), date() "
    SQL = SQL & "FROM MSysObjects WHERE (Left$([Name], 1) <> '~') And (Left$([Name], 4) <> 'Msys') And (MSysObjects.Type) = 1 ORDER BY MSysObjects.Name ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Tables"
'------------------------------------------------                  testée ok
' Recensement des Modules
'------------------------------------------------
'    DoCmd.OpenQuery "1R-PARAM-SYS-INSERT-MODULE", acViewNormal, acEdit
 
    SQL = "INSERT INTO Paramètres ( Article, lib1, lib2, lib3, libc1, libc2, libc3, libl1, libl2, libl3, cpt1, cpt2, cpt3, num1, num2, num3, pct1, pct2, pct3, date1, date2, date3, maj ) "
    SQL = SQL & "SELECT 'SYSMODULE', 'Module', ' ', ' ', ' ', ' ', ' ', MSysObjects.Name, ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, date(), date(), date(), date() "
    SQL = SQL & "FROM MSysObjects WHERE (Left$([Name], 1) <> '~') And (MSysObjects.Type) = -32761 And (Left$([Name], 3) = '1M-') ORDER BY MSysObjects.Name ;"
    DoCmd.RunSQL (SQL)
    MsgBox "Modules"
' Rétablissement des messages
    DoCmd.SetWarnings True
 
' DoCmd.RunMacro "1M-MAJ AUTOMATIQUES"
 
    stEcran = "1E-Ecran Général"
    DoCmd.OpenForm stEcran, , , stClauseWhere
 
Exit_BoutonSuite_Click:
    Exit Sub
 
Err_BoutonSuite_Click:
    MsgBox err.Description
    Resume Exit_BoutonSuite_Click
 
End Sub
Le code s'éxécute lentement et au bout d'un moment Access ne répond plus.
C'est la partie Rangement qui semble très lente
Quelqu'un a-t-il une explication ou a-t-il déjà rencontré ce problème.
PS j'ai désinstallé puis réinstallé Access, mais cela n'a rien fait
Merci