Bonjour,
Voici mon problème :
Il s'agit d'une application access dans laquelle j'ai un formulaire qui lui-même affiche un sous-formulaire en mode continu.
On peut simplifier, pour imager, que mon formulaire est un devis et mon sous-formulaire ma liste d'article.
J'avais écrit tout mon code dans mon formulaire et sous-formulaire. Etant confronté à une duplication de l'ensemble (formulaire et sous-formulaire), je me suis lancé dans les modules de classe pour éviter de tout réécrire à chaque fois (petite précision la duplication se fait à l'intérieur même de la base, par exemple devis type 1, devis type 2...). Je me suis inspiré des tutos du site (un grand merci à leurs auteurs !) et j'ai réussi à faire une classe qui gère les évènements de mes contrôles identiques sur chaque formulaire. Ca, ça fonctionne bien.
Maintenant je souhaitais créer une classe qui gère mes événements dans mon sous-formulaire et là je coince !!
Voici comment j'ai procédé :
La classe (clsEventListeArticle) :
(fortement inspiré du tuto sur la classe MELA)
et code dans le sous-formulaire :
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 Option Compare Database Option Explicit Private oForm As Form Private WithEvents Detail As Section Private WithEvents txtQte As TextBox Public Property Set Form(objForm As Form) Dim cTxtBox As TextBox Set oForm = objForm 'initialisation/paramétrage du formulaire à gérer Set Detail = oForm.Section(acDetail) oForm.Section(acDetail).OnDblClick = "[Event Procedure]" ' parcours le détail du formulaire pour attribuer les évênements aux contrôles spécifié For Each cTxtBox In oForm.Section(acDetail).Controls If Not cTxtBox.Locked Then cTxtBox.OnClick = "[Event Procedure]" Set txtQte = cTxtBox End If Next Set cTxtBox = Nothing End Property Private Property Get Form() As Form Set Form = oForm End Property Private Sub Detail_DblClick(Cancel As Integer) ' test de fonctionnement MsgBox "2*clic dans detail" End Sub Private Sub txtQte_Click() ' test de fonctionnement MsgBox "clic dans txtboxQte" End Sub Private Sub Class_Terminate() Set oForm = Nothing Set Detail = Nothing Set txtQte = Nothing End Sub
Cela fonctionne quand j'ouvre mon sous-formulaire directement (DoCmd.OpenForm "nom de mon sous-formulaire")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Option Compare Database Option Explicit Dim mEventListeArticle As clsEventListeArticle Private Sub Form_Open(Cancel As Integer) Set mEventListeArticle = New clsEventListeArticle Set mEventListeArticle.Form = Me End Sub
Mais pas quand mon sous-formulaire est intégré dans mon formulaire....
J'ai essayé d'instancier ma classe depuis pas mal d'endroit (open de mon formulaire, depuis un module)
Quand je fais le pas à pas, le programme lit bien ma classe et trouve mes contrôles mais après j'ai pas de retour sur les évènements.
Une explication/correction/solution(YES !) (/punition...) ????
Merci
Frédéric
Partager