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 nom de formulaire en variable dans fonction publique


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut Passer nom de formulaire en variable dans fonction publique
    Bonjour à tous,

    Je voudrais pour rendre plus facile à lire mon code passer en variable le nom d'un formulaire qui sert de cadre général à d'autres formulaires.

    J'ai donc mis ce code dans un module :

    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 CreerFacture()
     
    Dim Afrm As String
    Set Afrm = FormCadre()
     
    Afrm.SourceObject = "devis et factures"
     
    Afrm.Caption = "Création d'un nouveau document Facture"
    Afrm.TypeDoc = "FACTURE"
    Afrm.EtatDocument = "Création"
    Afrm.NumDocument = NumAuto(frm.TypeDoc, frm.DateDoc)
    Afrm.BtnGenererAvoir.Visible = True
    Afrm.BtnSolderFacture.Visible = True
    Afrm.BtnImprimer.Caption = "Imprimer Facture"
    Afrm.BtnTransformerenFacture.Visible = False
     
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub FormCadre()
           X = "Forms![menu]![Cadre].Form"
           X.SourceObject = "devis et facture"
           VBA.UserForms.Add(X).Show
       End Sub
    Or, une erreur "nom de fonction ou variable attendue" ressort, comment faire ?

    Nota: j'aimerai que la dite variable soit aussi valide lorsque je suis dans une requête ...
    Merci

  2. #2
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Bonjour.

    La variable X est-elle déclarée quelque part? Dans les déclarations du module? Sinon, il faudrait la déclarer dans le code Sub...
    Je n'ai pas fait d'essai...

    Cordialement.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Merci pour ta réponse RobiPMS, j'ai déclaré la variable comme tu l'as suggéré mais la même erreur est toujours là

  4. #4
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bonjour,

    En complément de la réponse de Robert :

    Etant donné que vous utilisez Sub, cela ne renvoie aucun objet !

    Cela ne serait pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function FormCadre() as Form
    ....
    Set FormCadre=X
    End function
    De plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Afrm As String
    Set Afrm = FormCadre()
    Afrm est une chaine de carcatère ! Cela ne serait pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Afrm as Form
    Set Afrm = FormCadre()
    Cordialement
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Merci pour cette réponse, maintenant il y a un message "utilisation incorrecte de la propriété" pointant vers la ligne 21, cela à avoir apparement avec le formulaire en question dont la syntaxe finit par un "!" or la variable étant devant un point ça ne va peut être pas marcher.

    Faut il plutôt mettre le nom du formulaire tel que le représente Access en VBA dans la collection forms ?

    Je ne sais pas quelle serait sa syntaxe ...



    Voici le nouveau code :

    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
    Public Function CreerFacture()
     
    Dim afrm As Form
    Set afrm = FormCadre()
     
    afrm.SourceObject = "devis et factures"
     
    afrm.Caption = "Création d'un nouveau document Facture"
    afrm.TypeDoc = "FACTURE"
    afrm.EtatDocument = "Création"
    afrm.NumDocument = NumAuto(afrm.TypeDoc, afrm.DateDoc)
    afrm.BtnGenererAvoir.Visible = True
    afrm.BtnSolderFacture.Visible = True
    afrm.BtnImprimer.Caption = "Imprimer Facture"
    afrm.BtnTransformerenFacture.Visible = False
     
     
    End Function
    Public Function FormCadre() As Form
    Dim x As Form
           x = "Forms![menu]![Cadre].Form!"
           VBA.UserForms.Add(x).Show
       End Function
    Je pensais qu'il y aurait un code bcp plus simple, une simple variable à déclarer sur chaque formulaire/bouton qui en aurait besoin...

    Merci beaucoup

  6. #6
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        x = "Forms![menu]![Cadre].Form!"
    Même réflexion que tout à l'heure, x est une variable objet Form et vous lui affecter une chaîne de caractère !

    Cela devrait ressembler ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set x=Application.Forms("Nom de votre formulaire")
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bon, on progresse , merci , mais maintenant il dit ne pas trouver le formulaire !

    Ce formulaire s'appelle "Menu" et contient un cadre container s’appelant "cadre"... j'ai beau essayer toutes les combinaisons, il dit ne pas le trouver !!!!

  8. #8
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bon ok,

    De votre code, j'avais déduit que vous FormCadre devait pointé un objet Form, c'est à dire un formulaire !

    Quel objet, et situé où, doit renvoyé FormCadre ?
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Cette fonction a pour but de remplacer le nom de certains formulaires par une variable courte représentant le nom du formulaire désiré, elle doit être disponible depuis n'importe quel endroit du projet ...

    Je pensais que l'on pouvait mettre le nom du formulaire en string et le déclarer en variable tout simplement mais apparement ce n'est pas possible...

  10. #10
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Donc quelque chose comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function DonneFormulaire (byVal strFormulaire as string) as Form
     
    Set DonneFormulaire=Application.Forms(strFormulaire)
     
    End function
     
    Set afrm=DonneFormulaire("devis et factures")
    ou plus rapide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set afrm=Application.Forms("devis et factures")
    Je ne l'ai pas testé. De plus, si le formulaire n'est pas chargé, je crois que Access provoque une erreur. Le formulaire désigné est-il obligatoirement chargé ?
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Merci pour tout ce boulot mais ça ne marche pas :

    Il ne s'agît pas d'ouvrir le formulaire directement par son titre mais de faire référence à la chaîne (forms!menu.cadre.form!) et ne pas avoir à la recopier à chaque fois...

    Autrement dit :

    Tous les formulaires dans mon application sont affichables dans le container "Cadre" du formulaire "Menu".
    Lorsque je veux faire référence dans mon code ou requêtes à ce container, je suis obligé d'écrire "forms!menu.cadre.form!" et ce que je veux c'est justement me faciliter la tâche en déclarant "Afrm" comme variable contenant la dite chaîne sans avoir à la retaper des centaines de fois ...

  12. #12
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    C'est peut-être possible, quand vous dites "Container" est-ce ce qui contient un sous-formulaire dans un formulaire (SubForm)

    a) Quelle est la nature exacte du contrôle Cadre du formulaire Menu ?

    Mettons que cadre est un contrôle sous-formulaire (il me semble que cela doit être ça) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function DonneFormulaire () as Form
     
    Dim strFormCible as string
     
    strFormCible=Application.Forms("Menu").Controls("Cadre").SourceObject 'Donne la valeur de la propriété Objet Source du contrôle Sous-formulaire Cadre
    Set DonneFormulaire=Application.Forms(strFormCible)
     
    End function
    Mettons que cadre est un groupe d'option qui renvoie bien le nom du formulaire dans sa propriété value

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function DonneFormulaire () as Form
     
    Dim strFormCible as string
     
    strFormCible=Application.Forms("Menu").Controls("Cadre").Value
    Set DonneFormulaire=Application.Forms(strFormCible)
     
    End function
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  13. #13
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    J'ai mis ce code en m'inspirant de ta réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function Afrm() As Form
     
    Dim strFormCible As String
     
    strFormCible = Application.Forms("Menu").Controls("Cadre")
    Set Afrm = Application.Forms(strFormCible)
     
    End Function
    Il me dit "nombre d'arguments incorrect ou affectation de propriété incorrecte en pointant la ligne 5

    Que faire ?

    Je sais qu'on en est pas loin !

  14. #14
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bonjour,


    strFormCible est une chaîne de caractère, donc elle attend bien une chaine de caractère, et là comme plus haut, vous lui affectez un objet !

    Qu'est ce qui ne fonctionne pas dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function DonneFormulaire () as Form
     
    Dim strFormCible as string
     
    strFormCible=Application.Forms("Menu").Controls("Cadre").SourceObject 'Donne la valeur de la propriété Objet Source du contrôle Sous-formulaire Cadre
    Set DonneFormulaire=Application.Forms(strFormCible)
     
    End function
    Et votre contrôle cadre est bien ce qui contient un sous-formulaire dans un formulaire (SubForm) ?
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  15. #15
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Je crois qu'on s'est mal compris.

    Je veux simplement que la référence au container nommé "cadre" et qui s'écrit "Forms!menu!cadre.form" soit inclus dans une variable dont le nom écourté sera beaucoup plus facile à gérer.

    Je n'ai pas besoin de connaître son objectsource, que je peux lui imposer à n'importe quel moment suivant la situation...

    En bref je voudrais tout simplement qu'au lieu d'écrire :

    - "forms!menu!cadre.form" + argument

    Je puisse écrire partout, même dans les requêtes en VBA :

    Afrm + argument

    Afrm étant le nom de la variable remplaçant la chaîne citée plus haut.

    Merci

  16. #16
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par clickandgo Voir le message
    Je crois qu'on s'est mal compris.
    Donc l'objet visé est bien de type SubForm, donc la fonction devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function SousFormulaire() As SubForm
     
    Set SousFormulaire = Application.Forms("Menu").Controls("Cadre") 
     
     
    End Function
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim sfX as SubForm
     
    Set sfX = SousFormulaire()
    Cordialement,
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  17. #17
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Merci Pepito78,

    Ca ne marche toujours pas !

    Je reçois le message d'erreur qui surligne "caption" comme objet introuvable

    voici le code final:
    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
    Public Function CreerFacture()
     
    Dim afrm As SubForm
    Set afrm = FrmCadre()
     
    'AFrm pour formulaire Cadre
     
    afrm.SourceObject = "devis et factures"
     
    afrm.Caption = "Création d'un nouveau document Facture"
    afrm.TypeDoc = "FACTURE"
    afrm.EtatDocument = "Création"
    afrm.NumDocument = NumAuto(afrm.TypeDoc, afrm.DateDoc)
    afrm.BtnGenererAvoir.Visible = True
    afrm.BtnSolderFacture.Visible = True
    afrm.BtnImprimer.Caption = "Imprimer Facture"
    afrm.BtnTransformerenFacture.Visible = False
     
     
    End Function
     
    Function FrmCadre() As SubForm
     
    Set FrmCadre = Application.Forms("Menu").Controls("Cadre")
     
    End Function
    Je n'avais pas cette erreur quand le nom du formulaire n'était pas encore mis en variable ...

    Qu'est -ce qui cloche ?

  18. #18
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Rien !

    Un SubFom n'a pas de propriété Caption.

    Si vous voyez un titre d'un container de sous-formulaire, c'est un contrôle étiquette collé à côté, il n'a pas non plus de propriété DocumentType, ni de propriété ....
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  19. #19
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Si je retire la ligne en question la même erreur se produit sur tous les autres attributs, il y a donc quelque chose qui cloche ...

    Si je remplace la variable par le nom du formulaire tout va bien !

    Donc, que faire ?

  20. #20
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    C'est ce que j'essaye de vous dire depuis un moment !

    Voulez-vous atteindre l'objet qui contient le sous-formulaire (cadre) ou le sous-formulaire contenu dans cadre. A la vue de votre code, vous voulez mixer les deux. Donc je vous ai donné les deux fonctions : Celle qui permet d'atteindre le formulaire contenu et l'objet contenant (Cadre)

    Cordialement,
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

Discussions similaires

  1. [1.x] passer un variable dans fonction configure (symfony)
    Par saberwer dans le forum Symfony
    Réponses: 1
    Dernier message: 30/08/2010, 12h32
  2. Utilisation variable dans fonction
    Par Jiraiya42 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/01/2008, 18h22
  3. passage de variable dans fonction
    Par nicerico dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/12/2006, 00h25
  4. variable dans fonction
    Par pierre371 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2006, 15h24
  5. Réponses: 1
    Dernier message: 25/09/2005, 15h29

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