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

Modélisation Discussion :

Sub ne trouve pas un sous-formulaire [AC-2000]


Sujet :

Modélisation

  1. #1
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 482
    Points : 46
    Points
    46
    Par défaut Sub ne trouve pas un sous-formulaire
    Bonjour,
    Dans la proc événementielle d'un bouton, je veux copier une donnée dans un champ d'un formulaire C indépendant et la coller dans un champ du même nom dans un sous-formulaire B intégré à un formulaire A. Mon code assigne bien la valeur à copier à ma variante mais ne trouve pas le sous-formulaire de destination et je ne comprends pas pourquoi. J'ai essayé en remplaçant les ! par des . ; j'ai essayé en ajoutant Form devant le nom du sous-formulaire, sans résultat. J'ai aussi essayé d'aller en 2 temps: mettre le focus sur le fomulaire principal A puis sur le sous-formulaire hébergé B: néant ! J'ai contrôlé mes relations et fait des essais avec des clef mono-champ, bi-champ, tri-champ mais sans succès.
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande12_Click()
    Dim Mavaleur As String
    Forms!FrmT_Maitre.Controls("IDMaitre").SetFocus
    Mavaleur = Forms!FrmT_Maitre.Controls("IDMaitre").Value
    Forms!FrmT_Eleve!FrmT_Ass.Controls("IDMaitre").SetFocus
    Forms!Form_FrmT_Eleve!FrmT_Ass.Controls("IDMaitre").Value = Mavaleur
    Mavaleur = ""
    End Sub
    Est-ce que quelqu'un pourrait me dépanner ?
    Merci d'avance pour toute piste ou solution.
    Cordialement
    Pierre
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    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 637
    Points : 14 611
    Points
    14 611
    Par défaut
    Bonjour,
    il manquait la propriété Form du sous-formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!Form_FrmT_Eleve!FrmT_Ass.Form.Controls("IDMaitre").Value = Mavaleur
    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 ?

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    La syntaxe pour accéder aux éléments d'un sous-formulaire est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forms![NomTonFormPrincipal]![NomTonControleSousForm].Form![NomTonControle]
    Un contrôle sous-formulaire est un contrôle qui contient un formulaire.
    Une sorte de boite qui contient le formulaire. Donc pour accéder au formulaire lui-même, il faut utiliser .Form.

    Genralement NomTonControleSousForm est les mêmes que celui du formulaire contenu mais ce n'est pas obligatoire.

    Note que si le sous-formulaire est dans le formulaire qui éxécute le code tu peux aussi utiliser la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.NomTonControleSousForm.Form![NomTonControle]
    ou si tu aimes typer tes données autant que moi;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim f as Form_NomTonFormDansLeSousForm
    set f=me.NomTonControleSousForm.Form
    f.NomTonControle=Ici une valeur
    set f=nothing

    me. designe le formulaire qui éxécute le code.

    L'un des avantages de cette syntaxe c'est que tu bénéficies de l'intellisens et que ton instruction d'affectation est plus simple.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 482
    Points : 46
    Points
    46
    Par défaut Sub ne trouve pas un sous-formulaire
    Bonjour,
    J'aime tout autant le style concis de Tee_grandbois que les développements de marot_r; grand merci à tous les deux. Il manquait "Form"; pourtant j'en ai consulté des exemples de sub événementielles sur le web, mais bref...
    encore merci et bonne soirée
    Cordialement
    Pierre
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  5. #5
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 482
    Points : 46
    Points
    46
    Par défaut Sub ne trouve pas un sous-formulaire
    Bonsoir Tee et marot-r,
    Me revoici parce que je pense que je n'ai rien compris. D'ailleurs je suis au niveau zéro de VBA pour Access et des formulaires. J'ai modifié mon code et j'ai toujours le même message d'erreur. J'ai des questions:
    1) dans le 1er exemple de marot-r est-ce que [NomTonControleSousForm] est la même chose que [NomTonSousForm] ? Ou alors je n'ai donc pas besoin de nommer mon sous-formulaire dans le code ? Sinon qu'est-ce que ça désigne ?
    2) Dans mon explorateur de projet, j'ai Form_Frmt_Eleve alors que mon formulaire s'appelle FrmT_Eleve, pourquoi ?
    3) Le bouton est dans le sous-formulaire FrmT_Ass et mon code dans un module ordinaire, est-ce correct ?
    J'ai sans doute mal interprété vos indications. Mon code est devenu (extrait):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Forms!FrmT_Maitre.Controls("IDMaitre").SetFocus
    Mavaleur = Forms!FrmT_Maitre.Controls("IDMaitre").Value
    Forms!FrmT_Eleve!FrmT_Ass.Form.Controls("IDMaitre").SetFocus
    Forms!FrmT_Eleve!FrmT_Ass.Form.Controls("IDMaitre").Value = Mavaleur
    Merci de votre patience.
    Cordialement
    Pierre
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    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 637
    Points : 14 611
    Points
    14 611
    Par défaut
    bonsoir,
    1) [NomTonControleSousForm] désigne le contrôle du sous-formulaire (IDMaitre) et [NomTonSousForm] est le nom du sous-formulaire (FrmT_Ass), mais cette syntaxe est valable si le Sub est dans le formulaire principal.

    2) Form_Frmt_Eleve est le nom que donne VBA au formulaire Frmt_Eleve, comme tous les objets de la classe formulaire, par ailleurs, VBA en profite pour remplacer les caractères réservés par des underscores "_".
    la syntaxe Form_Frmt_Eleve peut donc très bien être utilisée à la place de Forms!Frmt_Eleve.

    3) Si le code du bouton est dans le sous-formulaire dans ce cas la syntaxe est beaucoup plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.IDMaitre = Forms!FrmT_Maitre.Controls("IDMaitre")
    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 ?

  7. #7
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 482
    Points : 46
    Points
    46
    Par défaut Sub ne trouve pas un sous-formulaire
    Bonsoir marot_r et tee_grandbois,
    Le niveau zéro, comme je disais. Dans un premier temps j'ai essayé la première proposition de marot_r clarifiée par les explications de Tee. J'ai testé 7 rédactions différentes (voir le code) et les 7 donnent l'erreur "ne trouve pas FrmT_Ass". L'événementiel et moi, ça fait deux ! Vous vous adressez à la petite classe, vous qui êtes des experts, n'ayez pas peur de revenir au b, a, ba.
    Mes tests de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Forms!FrmT_Maitre.Controls("IDMaitre").SetFocus
    Mavaleur = Forms!FrmT_Maitre.Controls("IDMaitre").Value
    'modèle marot_r: forms![NomTonFormPrincipal]![NomTonControleSousForm].Form![NomTonControle]
                     Forms!FrmT_Eleve.Form!FrmT_Ass.Form!IDMaitre.Form.SetFocus
    '      variante: Forms!FrmT_Eleve!FrmT_Ass.Form!IDMaitre.Form.SetFocus
    '      variante: Forms!FrmT_Eleve!FrmT_Ass.Form!Controls("IDMaitre").Form.SetFocus
    '      variante: Forms!FrmT_Eleve!FrmT_Ass.Form!IDMaitre.SetFocus
    '      variante: Forms!FrmT_Eleve!FrmT_Ass.Form!Controls("IDMaitre").SetFocus
    '       variante:Forms!FrmT_Ass.Form!IDMaitre.Form.SetFocus
    Forms!FrmT_Eleve!IDMaitre.Form.Controls("IDMaitre").Value = Mavaleur
    Mavaleur = ""
    End Sub
    Merci d'avance
    Cordialement
    Pierre
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  8. #8
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 482
    Points : 46
    Points
    46
    Par défaut Sub ne trouve pas un sous-formulaire
    Bonsoir marot_r,
    J'ai aussi essayé avec ta dernière proposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.IDMaitre = Forms!FrmT_Maitre.Controls("IDMaitre")
    mais chaque fois j'ai eu "Usage illicite de l'expression me". En fait je ne sais pas comment l'intégrer à la procédure. De mon code (post de 15 h 29), qu'est-ce qui est remplacé par cette ligne citée ci-dessus ? Merci de m'éclairer.
    Cordialement
    Pierre
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  9. #9
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 482
    Points : 46
    Points
    46
    Par défaut Sub ne trouve pas un sous-formulaire
    Bonsoir
    Stop !
    Pas de quoi être fier: c'était juste une saloperie d'underscore qui traînait dans mon code, bref une faute de frappe. Rgntudju ! Je suis profondément désolé de vous avoir fait phosphorer à propos d'une c... dont je suis seul responsable. Mille pardons !
    Bonne fin de soirée tout de même !
    Cordialement
    Pierre
    There is always an easy solution to every human problem - neat, plausible. And wrong.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/02/2016, 11h36
  2. [Toutes versions] Code vba ne fonctionne pas pour sous formulaire
    Par 8e8eClo dans le forum IHM
    Réponses: 5
    Dernier message: 23/03/2012, 09h32
  3. [AC-2003] Charger ou pas un sous formulaire
    Par jarod1990 dans le forum IHM
    Réponses: 1
    Dernier message: 04/06/2011, 14h10
  4. [AC-2007] Valeur par défaut n'actualise pas mon sous formulaire
    Par georgesasc dans le forum IHM
    Réponses: 0
    Dernier message: 12/07/2010, 15h56
  5. [AC-2007] Requête SQL qui ne s'applique pas à un sous-formulaire
    Par Nephyline dans le forum IHM
    Réponses: 1
    Dernier message: 24/08/2009, 11h53

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