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

VBA Access Discussion :

Passer le nom d'un sous-formulaire dans une variable [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut 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 ( ), 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 ?!?!).

    Le code se trouve dans le formulaire principal.

    merci à ceux qui voudront bien se pencher sur ce problème.

    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
    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

  2. #2
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    heu
    tu parles d'un Form_SF_Bureautique et plus bas tu utilises Form_SF_Brtique, est ce bien la même chose

  3. #3
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Tu pourrais rejouer le 3ème essai en corrigeant le "s" manquant au 2 ème "Forms"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SF_EnCours = Application.Forms("Frm_Aptitude").Forms("Form_SF_Bureautique")
    Je crois que même dans un contrôle onglet, les sous-formulaires sont des objets du formulaire principal.

    Cordialement,

    PGZ

  4. #4
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    hello pgz et joyeuses fêtes

    en effet j'avais remarqué, que les objets d'un onglet se retrouvent à deux endroits, sous le formulaire principal et on les retrouve également dépendant de l'onglet...

  5. #5
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut 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

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    A mon avis, si on applique correctement les règles d'appel des sous-formulaires selon le tuto ci-joint, on devrait avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SF_EnCours = Application.Forms("Frm_Aptitude")!Form_SF_Bureautique.Form
    Attention, Form_SF_Bureautique devrait être le nom du sous-formulaire dans le conteneur du formulaire Frm_Aptitude.

    Cordialement,

  7. #7
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SF_EnCours = Application.Forms("Frm_Aptitude").Forms("Form_SF_Bureautique")
    === > Error 2465 (Erreur définie par l'application ou par l'objet)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    1- Quand tu ouvres ton formulaire "Frm_Aptitude".
    2- Tu cliques sur le sous-formulaire indiqué pour le sélectionner.
    3- Ouvres la feuille de propriétés et vérifie ce qui est indiqué dans la propriété "Autres" - "Nom".
    Qu'est-ce qui est marqué ?

    Cordialement,

  9. #9
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Et salut à toi PylouPylou

    Farouk, je crois que tu vas devoir utiliser les noms des contrôles qui servent de containers aux sous-formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Forms("Frm_Aptitude").Controls("NomDuContrôleContainer").Form
    Cordialement,

    PGZ

  10. #10
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Forms("Frm_Aptitude").Controls("NomDuContrôleContainer").Form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Forms("Frm_Aptitude").Controls("CtlTabTransverse").Form
    ===> mais comment indiquer l'onglet en cours ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Forms("Frm_Aptitude").Controls("CtlTabTransverse").Form
    ===> Error 438 (Propriété ou méthode non gérée par cet objet)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Forms("Frm_Aptitude").Controls(CtlTabTransverse.Value).Form
    ===> Error 438 (Propriété ou méthode non gérée par cet objet)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Forms("Frm_Aptitude").Controls(CtlTabTransverse.Value)
    ===> Error 13 (Incompatibilité de type)

    Farouk

  11. #11
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

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

Discussions similaires

  1. sous formulaire dans une JSP
    Par skillipo dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 13/02/2008, 16h21
  2. Sous-formulaire dans une nouvelle fenêtre
    Par Satch dans le forum IHM
    Réponses: 2
    Dernier message: 21/06/2007, 08h40
  3. Réponses: 2
    Dernier message: 27/03/2007, 17h47
  4. Réponses: 4
    Dernier message: 28/12/2006, 17h38
  5. Sous Formulaire dans une fenetre
    Par mycrodom dans le forum IHM
    Réponses: 4
    Dernier message: 24/11/2006, 14h00

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