Bonjour à tous,

J'aimerais pouvoir utiliser le nom d'un sous-formulaire sous la forme d'une variable.

Je dispose d'un formulaire : "Frm_Aptitude" à l'intérieur duquel il y a un contrôle onglet "CtlTabTransverse"
et pour chaque onglet (5 au total) un sous-formulaire : SF_XXXXX.
Une fonction met à jour chaque contrôle du sous formulaire.
Tout ceci est indicé par des tableaux et fonctionne parfaitement bien.

Le problème est, comme on peut le voir dans la partie du code, que je suis obligé de tester à chaque fois la valeur du contrôle onglet
en cours pour déterminer le nom du sous-formulaire concerné.

Depuis 2 semaines j'ai essayé toutes les configurations proposées dans Developpez.net ( ), j'ai lu tous les tutoriaux se rapportant au sujet,
mais je n'arrive pas à faire passer le nom du sous formulaire dans une variable.

J'ai soit : le sous formulaire "Form_SF_Brtique" n'existe pas, alors qu'en dur cela fonctionne,
le nom du champ est inconnu
etc...

Le principe que je voudrais appliquer est un tableau de 5 positions (0 à 4) => nombre d'onglets => 5
Chaque cellule contient le nom du sous-formulaire
La position de la cellule ( = le nom du sous-formulaire) est donnée par la value du contrôle onglet et donc plus de question à se poser.
Donc rien d'extraordinaire et très classique.
Mais pas de passage possible de ce nom dans une variable, en tout cas Access ne veut rien savoir ( où est mon erreur ?!?!).

Le code se trouve dans le formulaire principal.

merci à ceux qui voudront bien se pencher sur ce 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
Sub Deb ()
 
    Dim SF_EnCours As Form
    Dim NomSF_EnCours As String
 
'    ..........
'    ..........
 
	Competence = TabTauxComboTransverse(CtlTabTransverse.Value + 1, 0)
	NbControl = TabTauxComboTransverse(0, CtlTabTransverse.Value + 1)
 
'*****************************************************
' 1ere Tentative
'*****************************************************
	NomSF_EnCours = TabNomSF(CtlTabTransverse.Value)
	Set SF_EnCours = Application.Forms(NomSF_EnCours)
' Message d'erreur : Microsoft Access ne trouve pas le formulaire «*Form_SF_Brtique*» auquel il est fait référence.
' Alors que fonctionne en "dur" --> voir plus bas.
 
'*****************************************************
' 2ème Tentative
'*****************************************************
	NomSF_EnCours = "Form_SF_Bureautique"
	Set SF_EnCours = Application.Forms(NomSF_EnCours)
' Message d'erreur : Microsoft Access ne trouve pas le formulaire «*Form_SF_Brtique*» auquel il est fait référence.
' Alors que fonctionne en "dur" --> voir plus bas.
 
'*****************************************************
' 3ème Tentative
'*****************************************************
	Set SF_EnCours = Application.Forms("Frm_Aptitude").Form("Form_SF_Bureautique")
 
' Message d'erreur : Microsoft Access ne trouve pas le formulaire «*Frm_Aptitude*» auquel il est fait référence.
 
'Etc, etc, ...
'*****************************************************
 
 
' Ce code fonctionne sans problème	:
 
	Select Case CtlTabTransverse.Value
		Case 0
			Form_SF_Brtique.Controls(CboControl & NomControl) = TrouverTaux(Competence, Me.CboCollaborateur, NomControl)
		Case 1
			Form_SF_Lngtiqe.Controls(CboControl & NomControl) = TrouverTaux(Competence, Me.CboCollaborateur, NomControl)
		Case 2
			Form_SF_ReltClt.Controls(CboControl & NomControl) = TrouverTaux(Competence, Me.CboCollaborateur, NomControl)
		Case 3
			Form_SF_OtlMetr.Controls(CboControl & NomControl) = TrouverTaux(Competence, Me.CboCollaborateur, NomControl)
		Case 4
			Form_SF_CnsProd.Controls(CboControl & NomControl) = TrouverTaux(Competence, Me.CboCollaborateur, NomControl)
	End Select
 
End Sub
 
Function TrouverTaux(Competence As String, Matricule As Long, Produit As String) As Byte
 
    TrouverTaux = Nz(DLookup("Taux", "Tbl_Competence" & Competence, "Produit = '" & Produit & "' AND Matricule = " & Matricule), 0)
 
End Function