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 :

exporter un formulaire dans une "bibliothèque" externe


Sujet :

IHM

  1. #1
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut exporter un formulaire dans une "bibliothèque" externe
    J'ai créé un formulaire accompagné d'un module qui lit/met à jour les propriétés personnalisées d'une base Access (contrôlées via une connexion ODBC à Oracle).
    Je voudrais pouvoir réutiliser ce formulaire+module dans toutes les bases de l'entreprise.

    Il y a moyen de faire une sorte de bibliothèque externe utilisable par tout le monde (sans avoir à intégrer formulaire+module dans chacune des bases Access existantes) ? Comment ?
    Même de simple pistes sont les bienvenues.

    PS : J'avais trouvé http://www.info-3000.com/access/complement.php mais ça ne colle pas, j'ai les même problèmes que l'auteur de cette page. En particulier je peux appeler mes fonctions mais pas mon formulaire !

  2. #2
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut encore un contournement
    Si on ne peut pas appeler un formulaire d'un complément .mda, peut-on "décompiler" un formulaire pour récupérer le code servant à le générer ?

    Je pourrais alors l'incorporer dans un module du .mda qui créerait le formulaire dans les bases appelantes avant de s'en servir ?

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Accéder à un formulaire placé dans un fichier MDB "bibliothèque"
    Bonjour,
    Citation Envoyé par Peanut
    Si on ne peut pas appeler un formulaire d'un complément .mda, peut-on "décompiler" un formulaire pour récupérer le code servant à le générer ?

    Je pourrais alors l'incorporer dans un module du .mda qui créerait le formulaire dans les bases appelantes avant de s'en servir ?
    D'abord il ne faut pas confondre un fichier complément et une bibliothèque de fonctions.

    Le complément est un fichier qui est pris en charge par Access pour mettre ses fonctionnalités à la disposition des utilisateurs via l'interface utilisateur.
    La vocation d'un complément n'est pas d'être utilisé directement par des appels au code et aux objets qu'il contient.

    A la place, on utilise un fichier MDA ou MDB (ça n'a aucune importance) auquel on accède au moyen d'une référence.
    Ensuite, il est possible d'accéder aux objets/classes définies à l'intérieur d'un fichier bibliothèque MAIS il y a une astuce (évidemment ).

    Pour ce qui concerne un formulaire stocké dans la bibliothèque, l'Application Access ne peut y accéder directement.
    Par exemple, impossible de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "le nom du formulaire dans la bibliothèque"
    A la place, on crée dans la bibliothèque une fonction qui sait "instancier" un formulaire de la bibliothèque et peut, par exemple, retourner une référence vers l'objet qui correspond à cette instance d'un formulaire.

    Dans l'exemple ci-dessous, le formulaire s'appelle MonFormulaire.
    Une classe est automatiquement créée pour prendre en charge des instances de ce formulaire. Cette classe s'appelle Form_MonFormulaire.

    Dans la bibliothèque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function CréerFormulaire() as Access.Form
        Set CréerFormulaire = New Form_MonFormulaire
    End Function
    Dans l'application Access:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oForm As Access.Form
     
    Set oForm = CréerFormulaire()
    oForm.Visible = True

  4. #4
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Merci pour cet éclairage. Je vais essayer.

    Edit : Ca marche ! Y'a encore quelques adapations à faire, en tout cas il appelle bien mon formulaire.

  5. #5
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Le formulaire appelé contient (par exemple) ce code sur l'évènement "Ouverture" pour le remplissage des champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("IndexingForm")("ztFilename") = GetPropertyFilename()
    IndexingForm est inconnu (erreur 2450), mais si je remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me("ztFilename") = GetPropertyFilename()
    j'ai le message "Utilisation incorrecte de Me".



    Edit : le problème est le même partout, pas juste à l'ouverture.
    Comment dois-je désigner mon formulaire à la palce de Forms("IndexingForm") pour qu'il soit reconnu à l'extérieur de ma bibliothèque ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par Peanut
    Le formulaire appelé contient (par exemple) ce code sur l'évènement "Ouverture" pour le remplissage des champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("IndexingForm")("ztFilename") = GetPropertyFilename()
    IndexingForm est inconnu (erreur 2450), ...
    Oui. Apparemment, dans la collection Forms, seul un n° d'index donne accès à un formulaire ouvert par l'instruction VBA New.
    Par exemple:
    Si on ouvre un formulaire au moyen de la méthode DoCmd.OpenForm, alors le formulaire peut aussi être recherché par son Nom.

    Citation Envoyé par Peanut
    ...mais si je remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me("ztFilename") = GetPropertyFilename()
    j'ai le message "Utilisation incorrecte de Me".
    Si "ztFilename" est un contrôle du formulaire, la syntaxe correcte est tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ztFilename = GetPropertyFilename()
    Dans les modules de code du formulaire tu peux même te contenter d'utiliser le nom du contrôle pour y faire référence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ztFilename = GetPropertyFilename()

  7. #7
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Effectivement quand je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms(1)("ztFilename") = GetPropertyFilename()
    ça fonctionne.

    Mais le "1" n'est pas acceptable, comment connaître la valeur ?

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        strNameForm = "Form_IndexingForm"
        For i = 0 To (Modules.Count - 1)
            MsgBox Modules.Item(i).Name
            If Modules.Item(i).Name = strNameForm Then
                indexForm = i
            End If
        Next
    Mais ça me retourne uniquement les formulaires et objets du .mdb appelant, ainsi que le module de la bibliothèque, mais pas le formulaire de la bibliothèque.
    Donc absolument tout SAUF celui dont j'ai besoin !

    (PS : et ça ne compile pas avec Me)

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par Peanut
    (PS : et ça ne compile pas avec Me)
    De quoi parles-tu ?

    Citation Envoyé par Peanut
    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        strNameForm = "Form_IndexingForm"
        For i = 0 To (Modules.Count - 1)
            MsgBox Modules.Item(i).Name
            If Modules.Item(i).Name = strNameForm Then
                indexForm = i
            End If
        Next
    Mais ça me retourne uniquement les formulaires et objets du .mdb appelant, ainsi que le module de la bibliothèque, mais pas le formulaire de la bibliothèque.
    Donc absolument tout SAUF celui dont j'ai besoin !
    Et là ça se complique...

    La technique de la bibliothèque permet de faire des choses assez poussées.
    En attendant, je ne sais pas quel est ton objectif, et si tu utilises une démarche appropriée.

    Citation Envoyé par Peanut
    J'ai créé un formulaire accompagné d'un module qui lit/met à jour les propriétés personnalisées d'une base Access (contrôlées via une connexion ODBC à Oracle).
    Je voudrais pouvoir réutiliser ce formulaire+module dans toutes les bases de l'entreprise.
    (1) une application Access.
    (2) un fichier bibliothèque qui permet d'afficher un formulaire où sont listées "les propriétés" de l'application Access (lecture/écriture des propriétés).

    Est-ce que j'ai bien compris ?
    (j'ai l'impression qu'il n'est pas nécessaire de se préoccuper d'Oracle pour l'instant)

    Si besoin, précise un peu.
    Une fois l'objectif bien clarifié, on va pouvoir avancer.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/04/2005, 14h22
  2. Réponses: 2
    Dernier message: 11/12/2004, 21h20
  3. Recuperation de formulaire dans une fonction
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 23/06/2004, 15h04

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