Récupérer la valeur d'un champ comme nom d'un formulaire dans VB

Résolu/Fermé
Lasiomata Messages postés 5 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 20 décembre 2016 - 13 déc. 2016 à 16:08
Lasiomata Messages postés 5 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 20 décembre 2016 - 14 déc. 2016 à 17:37
Bonjour

ce que j'essaie de faire me paraissait simple, mais je suis en train de me casser les dents les unes après les autres

j'ai une dizaine de formulaires différents, chacun avec son sous-formulaire qui lui est propre

formulaire FX1 et sous-formulaire SFX1
formulaire FX2 et sous-formulaire SFX2...

chacun de ces sous formulaires permet de récupérer une valeur dans la même liste. Si la valeur voulue n'est pas dans la liste, un bouton du sous-formulaire appelle un formulaire FF pour ajouter une nouvelle valeur à la liste. une fonction VBA de FF permet d’enregistrer la nouvelle entrée, de mettre à jour le champ liste de SFXn, et de lui attribuer comme valeur la nouvelle entrée.

pour ce faire mon bouton dans FF code :
Private Sub Commande98_Click()
On Error GoTo Err_Commande98_Click

'Enregistre le formulaire
DoCmd.RunCommand acCmdSaveRecord

'Met à jour la liste de valeur dans le formulaire SFXn
Forms![FXn].[SFXn].Form![LB_EXPERT].Requery

'Reporte la valeur SRG dans SFXn
Forms![FXn].[SFXn].Form![LB_EXPERT] = Me.LB_EXPERT.Value

Dim stDocName As String

DoCmd.Close acForm, "FF"


Exit_Commande98_Click:
Exit Sub

Err_Commande98_Click:
MsgBox Err.Description
Resume Exit_Commande98_Click

End Sub


je souhaitais trouver une solution pour ne faire qu'un seul FF et donc trouver une astuce VBA qui dans le module FF récupère les noms du formulaire et de son sous-formulaire contenu qui a appelé FF

mon idée saugrenue a été, avec le SFXn appelant (imaginons ici que ce soit SFX1) d'envoyer l'expression Forms![FX1].[SFX1].Form! dans un champ indépendant du formulaire FF, comme valeur de texte. Simple à faire, pas de soucis.

mais comment, dans le VBA de FF, récupérer la valeur de ce champ indépendant, que nous appellerons Txt 250, pour remplacer l'adresse de mon sous-formulaire appelant, à savoir

'Met à jour la liste de valeur dans le formulaire SFXn
Forms![FXn].[SFXn].Form![LB_EXPERT].Requery

'Reporte la valeur SRG dans SFXn
Forms![FXn].[SFXn].Form![LB_EXPERT] = Me.LB_EXPERT.Value


j'ai essayé un nombre incalculable de trucs, Dim as string, Dim as form, dim as subform, dim as object... pour donner cette valeur à un variable F1 :
F1 = Me.TXT250.value

mais à chaque fois que je tente de remplacer l'expression en dur par mon F1, ça plante

saurez-vous m'aider ?

3 réponses

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
Modifié par yg_be le 13/12/2016 à 19:28
Je suggère de mettre "FX1" dans ton Txt250, et tu ferais :
F1 = Me.TXT250.value
Forms(F1).Controls("S"+F1)![LB_EXPERT].Requery
Forms(F1).Controls("S"+F1)![LB_EXPERT] = Me.LB_EXPERT.Value

Je pense à une autre façon de faire. Moi je ferais le requery dans le code VBA du sous-formulaire, au retour du formulaire FF. Et le formulaire FF stockerait dans la base de données la valeur par défaut, utilisée également au retour du formulaire FF.
0
merci yg_be
pour ta suggestion "Forms("FXn").Controls("SFXn"), et changer la valeur des chaines de caractères", j'ai essayé mais c'est la base de mon problème qui reste entier.

je vais donc synthétiser mon problème : dans un formulaire, j'ai un champs avec une valeur indépendante. Cette valeur, je veux l'utiliser dans le module VBA du même formulaire comme nom d'objet (en l’occurrence, un sous-formulaire inclus dans un formulaire qui n'est pas notre formulaire actuel)
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
13 déc. 2016 à 19:29
Je viens de mettre à jour ma réponse précédente, sans doute plus clair ainsi.
0
Lasiomata Messages postés 5 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 20 décembre 2016
14 déc. 2016 à 10:50
très très TRES cher yg_be

tu as résolu mon problème et je t'en suis infiniment reconnaissant

je n'étais visiblement pas loin, mon script se jouait à une parenthèse en moins et un crochet en trop...

le script final, pour la postérité

Dim F1 As String
Dim SF1 As String

F1 = Me.FX.Value
SF1 = Me.SFX.Value

'Met à jour la liste de valeur dans le formualire REG_METIER_EXPERTS
Forms(F1).Controls(SF1)![LB_EXPERT].Requery

'Reporte la valeur SRG dans REG_METIER_EXPERT
Forms(F1).Controls(SF1)![Texte250] = Me.LB_EXPERT.Value

Dim stDocName As String

stDocName = "Saisie_Expert_plus"
DoCmd.Close acForm, "Saisie_Expert_plus"
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
14 déc. 2016 à 16:30
Merci alors de marquer la question comme résolue.
0
Lasiomata Messages postés 5 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 20 décembre 2016
14 déc. 2016 à 17:37
désolé, je suis débutant ici.
c'est fait
et encore merci !!!
0