Passer le nom d'un sous-formulaire dans une variable
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 ( :mouarf: ), 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 :aie: ?!?!).
Le code se trouve dans le formulaire principal.
merci à ceux qui voudront bien se pencher sur ce problème.
Code:
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 |
Passer le nom d'un sous-formulaire dans une variable
Bonjour,
merci de vos réponses et de bonnes fêtes à tous.
@pyloupylou
oui il s'agit du même et dans le code il n'y a pas de confusion de nom.
@pgz
En écrivant "Forms" le message est : erreur 2465 (Erreur définie par l'application ou par l'objet)
Et sans le "S" le message d'erreur est : 2465 (Microsoft Access ne trouve pas le champ «*Form_SF_Brtique*» auquel il est fait référence dans votre expression.)
Je ne sais vraiment pas comment solutionner ce problème, à part le test avec ce Case, mais ce n'est pas terrible.
Farouk
Passer le nom d'un sous-formulaire dans une variable
Bonjour
@madefemere
Ta proposition génère ce message :
Error 2465 (Microsoft Access ne trouve pas le champ «*Form_SF_Bureautique*» auquel il est fait référence dans votre expression.)
Et de toute façon le nom du formulaire est en dur alors qu'il faudrait le passer sous forme de variable.
La seule formulation qui fonctionne est celle-ci : Set SF_EnCours = Form_SF_Bureautique ====> aucune erreur et je peux adresser SF_EnCours par la suite.
Code:
Set SF_EnCours = Application.Forms("Form_SF_Bureautique")
===> Error 2450 (Microsoft Access ne trouve pas le formulaire «*Form_SF_Bureautique*» auquel il est fait référence.)
Code:
Set SF_EnCours = Application.Forms("Frm_Aptitude").Form("Form_SF_Bureautique")
=== > Error 2465 (Microsoft Access ne trouve pas le champ «*Form_SF_Bureautique*» auquel il est fait référence dans votre expression.)
Code:
Set SF_EnCours = Application.Forms("Frm_Aptitude").Forms("Form_SF_Bureautique")
=== > Error 2465 (Erreur définie par l'application ou par l'objet)
Code:
Set SF_EnCours = Application.Forms("Frm_Aptitude").Controls("Form_SF_Bureautique").Form
===> Error 2465 (Microsoft Access ne trouve pas le champ «*Form_SF_Bureautique*» auquel il est fait référence dans votre expression.)
Etc, etc...
Merci de te pencher sur ce problème.
Farouk
Passer le nom d'un sous-formulaire dans une variable
Bonjour à tous,
@madefemere
Le nom indiqué est 'SF_Bureautique'
@pgz
J'ai déjà essayé avec
Code:
Application.Forms("Frm_Aptitude").Controls("NomDuContrôleContainer").Form
Code:
Application.Forms("Frm_Aptitude").Controls("CtlTabTransverse").Form
===> mais comment indiquer l'onglet en cours ?
Code:
Application.Forms("Frm_Aptitude").Controls(CtlTabTransverse.Value).Form("Form_SF_Bureautique")
===> Error 438 (Propriété ou méthode non gérée par cet objet)
Code:
Application.Forms("Frm_Aptitude").Controls("CtlTabTransverse").Form
===> Error 438 (Propriété ou méthode non gérée par cet objet)
Code:
Application.Forms("Frm_Aptitude").Controls(CtlTabTransverse.Value).Form
===> Error 438 (Propriété ou méthode non gérée par cet objet)
Code:
Application.Forms("Frm_Aptitude").Controls(CtlTabTransverse.Value)
===> Error 13 (Incompatibilité de type)
Farouk
Passer le nom d'un sous-formulaire dans une variable
Bonjour à tous
J'ai finalement réussi à trouver la solution :
La bonne formulation est :
NomSF_EnCours = "SF_Bureautique" ===> le nom défini dans les propriétés (AUTRES...NOM)
et non pas celui dans la liste des objets de classe : "Form_SF_Bureautique"
Code:
Set SF_EnCours = Application.Forms("Frm_Aptitude").Form(NomSF_EnCours).Form
@madefemere merci de m'avoir mis sur la voie.
Merci à tous.
BONNES FETES de fin d'année
Farouk