IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Faire référence au controle d'un sous-formulaire


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut Faire référence au controle d'un sous-formulaire
    Bonjour à tous,

    à partir d'un module VBA, je souhaite faire référence au contrôle d'un sous-formulaire.
    Le nom du formulaire et du contrôle sont de variables.

    Jusqu'à maintenant j'utilisais la syntaxe suivante pour un contrôle dans un formulaire :

    Forms(NF).Controls(NC)

    où NF et NC sont respectivement les noms du formulaire et du contrôle.

    Je n'arrive pas à trouver comment atteindre le contrôle (NC) qui se trouve dans le sous-formulaire (SF) du contrôle fille (CF) du formulaire (NF) ... ouf

    J'acceuil toute réponse avec grand intérêt !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    La réponse sera ce tuto où tout est expliqué : Les appels formulaires/états.

    Philippe

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Merci Philippe pour ta réponse.

    Ma réponse va je suppose surprendre : ça ne marche pas ...

    Le tuto est pourtant clair et ne date pas d'hier, alors il y a peut-être quelque chose que j'ai raté.

    donc si je tape dans un autre formulaire (par exemple dans l'évènement 'click' d'un bouton) :

    Forms.nom_form.nom_sous_form.Form.nom_champ = "mon texte"

    j'ai un erreur 2465, "Erreur défini par l'application ou par l'objet"

    J'ai vérifié 100 fois la syntaxe, il n'y a pas d'erreur de frappe.
    Le formulaire destination est bien ouvert ainsi que le sous-formulaire (forcement !), les noms sont les bons, etc ...
    Mais ça ne marche pas.
    Et là, il ne s'agit pas de variables. Pour mon essai j'ai directement tapé le nom des formulaire et sous-formulaire.


    Mais à y réfléchir un peu plus, il y a quelque chose qui ne colle pas. En effet, supposons la situation suivante :

    Je souhaite comparer 2 articles, et pour cela je crée un formulaire avec deux sous-formulaires placés cote à cote. Chaque sous-formulaire va afficher les caractéristiques d'un article, mais il s'agit bien de deux articles différents.
    Bien entendu, dans les deux cas je fais appel au même sous-formulaire car il s'agit d'avoir exactement la même présentation et le mêmes fonctions pour les deux articles.
    Supposons maintenant que je souhaite pour une raison quelconque, à partir d'un module changer une donnée pour l'un des deux article. Comment access peut-il faire la différence entre les deux articles, puisque le nom du sous formulaire va être le même dans les deux cas ?!
    En effet, il n'est jamais fait référence au champ fille qui contient le sous formulaire. Que ce soit pour l'article 1 ou pour l'article 2, pour faire référence au champ à modifier on ecrira :

    Forms.Nom_Formulaire.Nom_Sous_Formulaire.Form.Nom_Champ

    Donc ...

    Voilà, je continu à fouiller ...

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 654
    Points : 14 634
    Points
    14 634
    Par défaut
    Bonsoir,
    je ne comprend pas ton problème. Tu peux très bien avoir 2 sous-formulaires avec le même objet source car ils n'auront pas le même nom dans le formulaire principal. Si tu veux récupérer des données sur l'un ou l'autre tu dois le faire à partir du nom qu'ils portent dans le formulaire principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande3_Click()
     
    ' récupération données du sf 1
    Me.Texte1 = Forms.frmPrincipal.SF1.Form.Controls("Controle1")
    ' récupération données du sf 2
    Me.Texte2 = Forms.frmPrincipal.SF2.Form.Controls("Controle1")
     
    End Sub
    et si tu veux les mettre à jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Commande7_Click()
    ' mise à jour données du sf 1
    Forms.formulaire10.SF1.Form.Controls("Controle1") = Me.Texte2
    Forms.formulaire10.SF1.Form.Refresh
     
    ' mise à jour données du sf 2
    Forms.formulaire10.SF2.Form.Controls("Controle1") = Me.Texte1
    Forms.formulaire10.SF2.Form.Refresh
     
    End Sub
    Donc si tu as une erreur c'est que ta syntaxe n'est pas correcte.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Ok, je pense alors qu'il s'agit d'une confusion dans les noms et définition.

    Pour moi Nom_Sous_Formulaire, au même titre que Nom_Formulaire, c'est le nom qui est donné au formulaire dans la liste des formulaires ...

    Quand tu parles de SF1 et SF2, j'ai l'impression que tu parles du nom des contrôles hotes du sous-formulaire "Nom_Formulaire" dans les deux cas.
    Et cela permet en effet de les différentier.

    Dans ce cas, pour faire référence à un control d'un sous-formulaire, je pense qu'il faudrai plutôt écrire cela de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Texte1 = Forms.frmPrincipal.NC1_SF.Form.Controls("Controle1")
    où NC1_SF serai le sous-formulaire/controle N°1 basé sur le sous_formulaire SF.

    Je regarde cela de plus près, mais ça me parai plutôt logique comme ça.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    C'est bien ça. Je croyais pourtant bien avoir essayé ça avant. J'ai peut-être fais une erreur à ce moment là ...

    Donc la bonne syntaxe c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Texte1 = Forms(NF).controls(NF).Form.Controls(CT1)
    où :
    NF est le nom du formulaire
    NF est le nom du champ fille contenant le sous-formulaire
    CT1 : le nom du controle du sous-formulaire concerné

    Problème résolu,
    merci

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Oui c'est bien ça, merci pour vos posts, messieurs, ça ne m'a jamais paru très clair car bien souvent les sous-formulaires ont un nom légèrement différent dans le formulaire hote de ce qu'ils ont dans la liste des formulaires.

    Pour faire référence à un sous formulaire, il faut faire attention, récupérer le nom du controle de ce sous formulaire ds le formulaire hote. ce n'est pas forcément le mme nom que celui donné ds la liste des formulaires
    on a alors Forms![NomFormulairePrincipal].Nom_controle_du_sous_formulaire.Form

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire l'auto-resize d'un sous formulaire
    Par malingue dans le forum Access
    Réponses: 17
    Dernier message: 30/03/2019, 13h16
  2. Réponses: 4
    Dernier message: 01/02/2007, 11h17
  3. Valuer un controle dans un sous-formulaire continu
    Par micniv dans le forum Access
    Réponses: 6
    Dernier message: 25/01/2007, 14h19
  4. Réponses: 1
    Dernier message: 26/04/2006, 10h52
  5. Réponses: 1
    Dernier message: 27/10/2004, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo