bonjour à tous,
Voici le code qui provoque un plantage d'access message en boucle "Access ne peut pas ouvrir plus de bases" ...
Je pense que ça doit venir d'un manque de libération du recordset ou arrêt du compteur, mais je ne suis pas assez expert pour savoir "finir" ce code... Merci d'avance pour votre dévouement et expertise !
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 Public Function ControleChampsObligatoires() Dim recX As Recordset, FormX As Form, ctrlX As Control, fieldx As Field, NewLabel As Control Dim objAccess As AccessObject, blError_ChampInconnu As Boolean Dim blSuppr As Boolean Dim strMsg1 As String Dim strMsg2 As String Dim i As Integer i = 0 Set FormX = Screen.ActiveForm 'Affectation du formulaire à la variable formX 'Vérifions d'abord si le formulaire est lié à une source de données ! If FormX.RecordSource <> "" Then Set recX = CurrentDb.OpenRecordset(FormX.RecordSource) For Each ctrlX In FormX.Controls 'balaye tous les contôles du formulaire If TypeName(ctrlX) = "Textbox" Or TypeName(ctrlX) = "Combobox" Then If ctrlX.ControlSource <> "" Then 'le contrôle est lié à un champ blError_ChampInconnu = False On Error GoTo Err_ChampInconnu Set fieldx = recX.Fields(ctrlX.ControlSource) 'Affectation du champ à la variable fieldX On Error GoTo Err_Gest If (Not fieldx.AllowZeroLength Or fieldx.Required) And blError_ChampInconnu = False Then 'Le champ doit être différent de Null ou la chaine ne peut être vide If IsNull(ctrlX) = True Then 'Incrémente le compteur i = i + 1 'Ajoute le nom du contrôle au message strMsg1 = strMsg1 & vbCrLf & " - " & ctrlX.Name strMsg2 = ctrlX.Name 'Positionne le curseur sur le champs ctrlX.SetFocus 'La fonction doit retourner faux ControleChampsObligatoires() = False End If End If End If End If Next If i > 1 Then 'Display the error message MsgBox ("Les champs suivants sont obligatoires : " & strMsg1) ElseIf i = 1 Then MsgBox ("Le champ '" & strMsg2 & "' est obligatoire.") End If End If Exit Function Err_ChampInconnu: If Err.Number = 3265 Then blError_ChampInconnu = True 'Le champ est inconnu par exemple si ControlSource est une formule de calcul Resume Next End If Err_Gest: MsgBox Err.Description End Function
Partager