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 :

Alimenter une liste déroulante de formulaire à partir d'une 2ème base [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut Alimenter une liste déroulante de formulaire à partir d'une 2ème base
    Bonjour,

    Je sollicite votre aide pour le problème suivant :

    J'ai disposé une liste déroulante dans un petit formulaire de choix permettant l'ouverture d'un état.
    Cette liste est basée sur une requête, mais la requête porte sur une table située dans une autre base de données access.

    je vous mets le code à l'ouverture du formulaire :

    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
     
    ''Code effectué à l'ouverture du formulaire "Choix du type de VP"
    Private Sub Form_Open(Cancel As Integer)
     
        Dim str_SQL As String
        Dim rst_Liste_Type_VP As Recordset
     
        'Ouverture de la base "gestion des MOP" et affectation à l'objet database "odb" (odb est définie en public dans un autre module)
        Set oDb = OpenDatabase(Application.CurrentProject.Path & "\BDD gestion des MOP", True, True)
     
        'Création du code SQL pour le curseur d'affichage de la liste des types de VP kilométriques
        str_SQL = "SELECT [T_Type_VP].IDTYPEVP, [T_Type_VP].NomTypeVP" & vbCrLf & _
                        "FROM [T_Type_VP]" & vbCrLf & _
                        "WHERE ([T_Type_VP].IDTYPEVP < 20)" & vbCrLf & _
                        "ORDER BY [T_Type_VP].IDTYPEVP"
     
        'Création du curseur qui récupère les données de la requête (pour test)
        Set rst_Liste_Type_VP = oDb.OpenRecordset(str_SQL, dbOpenSnapshot, dbReadOnly)
        Debug.Print rst_Liste_Type_VP(0), rst_Liste_Type_VP(1)
     
        ''Efface la valeur affichée de liste déroulante de choix du type de VP
        Me.Liste_Type_VP.Value = ""
        ''Verrouille le bouton OK
        Me.[Btn_OK].Enabled = False
        ''Affecte le code SQL et déroule la liste du type de VP
        Me.Liste_Type_VP.RowSource = str_SQL
        Me.Liste_Type_VP.SetFocus
        Me.Liste_Type_VP.Dropdown
     
     
    End Sub
    Le problème : La liste (Liste_Type_VP) du formulaire est vide ..... Alors que le recordset (rst_Liste_Type_VP) basé sur la même requête contient bien les bonnes valeurs, j'en perds mon latin .....

    Mais si je copie la table externe ([T_Type_VP]) dans la base de donnée courante, sans ouvrir la 2ème base, la liste est bien alimentée .....

    Qu'est ce qu'il manque ?

    Merci

  2. #2
    Expert éminent

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

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

    Pourquoi faire simple quand on peut faire compliquer ?
    Tu as la réponse dans la FAQ : ICI
    Cela devrait être quelque chose du genre :
    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
    ''Code effectué à l'ouverture du formulaire "Choix du type de VP"
    Private Sub Form_Open(Cancel As Integer)
     
        Dim str_SQL As String
        'Création du code SQL pour le curseur d'affichage de la liste des types de VP kilométriques
        str_SQL = "SELECT [T_Type_VP].IDTYPEVP, [T_Type_VP].NomTypeVP" & vbCrLf & _
                        "FROM [T_Type_VP] IN ' " & vbCrLf & _
                        Application.CurrentProject.Path & "\BDD gestion des MOP" & _
                        "' WHERE ([T_Type_VP].IDTYPEVP < 20)" & vbCrLf & _
                        "ORDER BY [T_Type_VP].IDTYPEVP"
     
        Debug.Print rst_Liste_Type_VP(0), rst_Liste_Type_VP(1)
     
        ''Efface la valeur affichée de liste déroulante de choix du type de VP
        Me.Liste_Type_VP.Value = ""
        ''Verrouille le bouton OK
        Me.[Btn_OK].Enabled = False
        ''Affecte le code SQL et déroule la liste du type de VP
        Me.Liste_Type_VP.RowSource = str_SQL
        Me.Liste_Type_VP.SetFocus
        Me.Liste_Type_VP.Dropdown
     
    End Sub
    J'ai quand même des doutes sur le nom de ton fichier "\BDD gestion des MOP" avec des espaces et sans extensions ??


    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Merci, j'avais essayé, mais j'ai un message d'erreur car la table contient un champ à valeur multiple et access ne veut pas référencer la base .....

    Pour l'extension, c'est encore une chose qui me perturbe, l'ouverture de la database avec DAO fonctionne très bien sans l'extension, mais dans la requête elle est nécessaire .......

    J'ai essayé aussi avec une base attachée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    str_nom_base = Application.CurrentProject.Path & "\BDD gestion des MOP.accdb"
    DoCmd.TransferDatabase acImport, "Microsoft Access", str_nom_base
    Et là j'ai l'erreur d'exécution '3011'
    Le moteur de base de sonnées Microsoft Access n'a pas pu trouver l'objet.

    Je crois que je vais remplir "à la main" ma liste à l'aide du recordset qui contient les bonnes valeurs.

    Mais je vais avoir besoin d'autres tables de cette base pour la suite de mon projet.

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Hum,

    1- Je ne comprends pas pourquoi tu ne peux pas récupérer la table directement avec la première méthode parce qu'il y a un champ multivalué ? Mais bon.

    2- Pour la table attachée, il y a de petites erreurs dans les paramètres que tu utilises :
    - tu fais une liaison et non une importation de table, donc acImport n'a pas sa place.
    - je ne vois pas le nom de ta table à importer
    Refais une recherche avec F1 sur la fonction TransferDatabase pour vérifier les arguments que tu utilises.

    3- Par rapport à ton idée de départ d'utiliser le RecordSet, tu pourrais rajouter les valeurs de ta zone de liste "à la volée" en parcourant le REcordSet avec un AddItem comme proposé ICI sur cette discussion.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Pour la remarque 1, je ne vois pas non plus, c'est ridicule (je reste polie ...), mais c'est le message d'erreur qu'access m'affiche. C'est bête car c'est vraiment la méthode la plus pratique surtout pour la suite.

    Pour la table attachée (remarque 2), j'ai pris un exemple de l'aide sans trop me préoccuper des paramètres (J'en avais marre de lire les petites lignes mal traduites ....). Le nom est compris dans la variable str_nom_base. Je vais me repencher dessus, mais je ne sais pas si ça résoudra le problème de la remarque 1 .....

    Et pour la remarque 3, je vois comment faire. ça ira très bien pour le remplissage de la liste, mais après je veux utiliser la base pour générer un état très complexe avec des requêtes bien sympas.....
    En, fait, j'ai déjà tout programmé dans l'autre base, mais je veux scinder mes 2 bases, car elles n'auront pas les mêmes utilisateurs. Je pensais que récupérer les infos d'une autre base était plus simple que cela.
    A moins qu'il y ait un moyen de faire des requêtes SQL avec les recordset ?

    Merci Madefemere
    Cordialement

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Je ne sais pas qu'est-ce que tu fais ou comptes faire, mais je crois bien que tu as un petit problème de conception (pas de structure de ton modèle, mais de l'installation de ta base).
    D'après ce que je comprends suite à ton dernier message :
    Tu as une Base de données A avec les tables - Requêtes - formulaires - Etats - autres ...
    Problématique : Tu as différents types d'utilisateurs, donc tu veux créer une base B avec des d'autres formulaires et récupérer les informations des tables de la Base A (dynamiquement).

    Je te conseille de lire CE TUTO sur l'utilisation d'une base de données Access en mode multi-utilisateurs qui t'apportera des idées je pense et dont je te résume ci-dessous comment on pourrait faire :
    1- Tu as ta base A actuelle avec les tables - requêtes - formulaires - Etats - autres.
    2- Tu fractionnes cette base en A1 et A2 où :
    - A1 va contenir que les tables
    - A2 va contenir les requêtes - formulaires et Etats et les tables de A1 seront attachées à A2.
    Le tuto explique simplement comment fractionner une base en frontale/dorsale.
    3- Tu crées une base A3 cela pourrait être une copie de A2 mais avec certaines différences dans les formulaires et états et dont les tables sont des tables liées à partir d'A1.

    Et c'est tout.

    J'espère que cela résoudra ton problème.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  7. #7
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Effectivement mon projet est une vraie "usine à gaz". En fait, je ne suis pas informaticienne de formation, je programme surtout par plaisir.

    J'ai commencé de construire cette base de données pour répondre à un besoin personnel dans mon activité. Puis j'ai voulu lui ajouter des fonctionnalités, etc .....

    Donc, j'ai bien regardé le tuto sur le mode multi-utilisateur, je ne vais pas tout utiliser, mais la possibilité d'attacher des tables externes fonctionne à merveille, je vais partir sur cette solution.

    Un grand merci Madefemere, je marque comme résolu.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/09/2014, 22h58
  2. [AC-2013] Filtrer un formulaire à partir d'une liste déroulante
    Par Malick dans le forum VBA Access
    Réponses: 18
    Dernier message: 25/08/2014, 17h57
  3. [AC-2003] afficher un sous formulaire à partir d'une liste déroulante
    Par ojjg49 dans le forum IHM
    Réponses: 1
    Dernier message: 11/06/2010, 19h55
  4. Réponses: 1
    Dernier message: 05/03/2009, 12h26
  5. Réponses: 32
    Dernier message: 22/09/2005, 10h40

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