je n'arrive pas à trouver le test qui me permettrais de savoir à partir d'un sous form si celui-ci à un form parent et auquel cas le nom de son control dans le form parent ("fillexx").
pourriez vous m'éclairer?
merci.
je n'arrive pas à trouver le test qui me permettrais de savoir à partir d'un sous form si celui-ci à un form parent et auquel cas le nom de son control dans le form parent ("fillexx").
pourriez vous m'éclairer?
merci.
Bonjour,
pour ta première question, il te suffit justement de récupérer l'erreur 2452 pour savoir si ton Form est un Sous-Form
Pour la deuxieme question, tu parcours les controles de ton formulaire en testant s'il s'agit d'un 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 Public Function IsSubForm(ByRef frm As Form) ' Test si sous-formulaire Dim pere As String On Error Resume Next pere = frm.Parent.Name IsSubForm = (Err.Number = 0) Err.Clear End Function
si oui, tu récupére le nom de ce controle
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 Public Function NomControle(byref frm as form,byval nomSousFormulaire as string) as string NomControle = vbnullstring Dim c As Control ' Parcours des controles du formulaire For Each c In frm.Controls ' test si sous-formulaire If c.ControlType = acSubform Then ' test du nom du formulaire If c.SourceObject = nomSousFormulaire Then NomControle = c.Name Exit For End If End If Next End Function
salut nostradamus,
je te remercie de tes réponses et de ta générosité.
en fait pour la première question c'est ce que j'avais fait (gestion d'erreur) et pour la deuxième j'avais hésité à la faire.
je me demandais si je passais pas à côté d'une synthaxe du genre:
not is object, not isempty(), not is form, ismissing()...
et pour la suite s'il n'y avait pas juste un prob de synthaxe avec une propriété qui m'aurait échappé genre:
form.parent.form.controls(form.name).name
je peux éviter la function NomControle que tu as proposé en me contraignant à nommer systématiquement le control sousform par le nom de la form auquel elle est attaché, ainsi je peux m'y adresser avec:
par ailleur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part forms(form.parent.name).form(form.name)
ca marche chez toi?Public Function IsSubForm(ByRef frm As Form)
parceque j'ai ouvert justement une discution comment transmettre un form en paramètre?
et chez moi ce type de synthaxe ne marche pas.
merci de tes efforts.
Bonjour,
Pour passer une form en référence, tu dois lui passer l'objet lui-même
Exemple avec function NomControle
Si tu lance la function a partir de ton formulaire courant
ou bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ' me répresentant l'instance de ton formulaire actif msgbox NomControle(me,"nomsousformulaire")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ' tu parcours l'ensemble des forms ouverts dim f as form for each f in application.forms if f.name = "xxxx" then msgbox NomControle(f,"nomsousformumaire") exit for end if next
bonjour nostradamus,
oui c'est réglé après une nuit de sommeil, access à bien voulu consentir à accepter le passage du form en paramètre. (il le perdait en cours de route, je n'avais plus que "vide" en début de la fonction, même avec le code que tu avais donné, n'ayant pas le souvenir d'avoir déjà transmis un form en param je posais donc la question au vu de ces échecs)
je relance le sujet pour trouver éventuellement d'autre solus qui pourrait se résumer en une ligne.![]()
Bonsoir,
Est-ce que le formulaire ne pourrait pas initialiser une variable objet du sous-formulaire ?
En valeur il mettrait le contrôle qui contient le sous-formulaire.
Exemple
Sous-formulaire
Formulaire Parent:
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part Public ParentSfmCtl As Access.Control ' ou Access.SubForm
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub Form_Open(Cancel As Integer) Set Me.NomCtlSousFormulaire.Form.ParentSfmCtl Me.NomCtlSousFormulaire End Sub
ParentSfmCtl est le contrôle sous-formulaire dans le formulaire parent.
ParentSfmCtl.Parent est le formulaire parent.
C'est comme ça que je contourne le problème que tu as soulevé.
A+
tu me fais penser qu'effectivement j'avais il y a qq année avoir procédé ainsi, par variable globale.
et j'avais finalement abandonné pour opter pour une solus comme nostradamus pour alors une raison plus pratique: javais un sous form (agissant sur un form) pour plusieurs forms. les forms ne s'ouvrant pas simulatanément le parcours des forms contenant le sous form me donnaient un résultat plus satisfaisant car il n'est plus besoin d'initaliser à chaque form la variable (et n'oublions pas la libération à la fermeture) et je pouvais donc créer de nouveaux forms sans souci.
autrement une fonction globale appliqué à chaque form peu aussi simplifier le code et surtout cette méthode à l'avantage de garantir le parent.
je te remercie de ton apport enrichissant la discution.![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager