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 :

Complétion de zones de texte après sélection dans une liste déroulante [AC-2010]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 52
    Points : 35
    Points
    35
    Par défaut Complétion de zones de texte après sélection dans une liste déroulante
    Bonjour,

    Je travaille sur des formulaires dans Access 2010 et comme expliqué dans l'intitulé, je souhaite compléter des zones de texte après avoir sélectionné un élément dans une liste déroulante. Bien entendu, je suis ici car je n'arrive pas à parvenir à ma fin. J'ai cherché pas mal d'infos sur le net, et j'ai pu comprendre certaines erreurs, mais je suis toujours dans l'incapacité de résoudre mon problème. De même, j'ai réussi à trouver un ou deux sujets traitant cette option mais je n'ai ou bien pas compris la réponse, ou bien pas pu adapter mon code en conséquence. Finalement, je commence à fatiguer de chercher sans trouver, j'espère obtenir une réponse spécifique à mon problème ici.

    De plus, j'apprends le VBA depuis peu et seul. Bien que j'ai déjà suivi nombre de tutos, je reste un pur débutant et je ne connais pas toutes les options qui s'offrent à moi.

    Jusqu'ici mon approche a consisté à utiliser une requête SQL via un SELECT, le but étant de récupérer un RecordSet et de mettre chaque champ dans chaque zone de texte.
    Voici mon code actuel, inspiré de ce sujet:
    Erreur d'exécution 3061 sous Access 2010

    Note: "Accueil" est le nom du formulaire sur lequel je me trouve, "bdua_Agence" le nom de la liste déroulante où j'effectue un changement de valeur. Vous trouverez normalement 4 lettres avant chaque nom de contrôle avant un underscore, c'est normal car il s'agit d'un code personnel pour m'y retrouver.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim q As DAO.QueryDef
    Dim mabase As Database
    Set mabase = CurrentDb
    ' ouvre objet définiton de requête
    Set q = mabase.QueryDefs("SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence.Value;")
    ' fournit valeur du 1er paramètre
    q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
    ' ouvre un recordset à partir de la requête paramétrée
    Set t = q.OpenRecordset
    bdub_DR.Value = rs.Fields(NomDR).Value: bduc_nomAgence.Value = bdua_Agence.Value: bdud_RS.Value = rs.Fields(RaisonSociale).Value: bdue_Ville.Value = rs.Fields(Ville): bduf_Adresse.Value = rs.Fields(Adresse)
    J'obtiens une erreur d'exécution 3265 à la ligne 5, "Élément non trouvé dans cette collection".
    J'en déduis que mon soucis vient de la ligne 3, lors du Set pour définir le CurrentDb. J'ai lu qu'il fallait que la table soit "ouverte" lors du Set, je dois avouer que je ne suis pas sûr de bien comprendre. Lors du Set, la table t_Agence n'est pas ouverte en tant qu'onglet, mais elle fait partie de ma base de donnée active, donc je ne sais pas si ça marche ou pas.

    L'erreur est peut-être toute bête, je ne sais pas, cela fait un moment que je cherche et je vous avoue que je suis perdu, je n'y vois peut-être plus très clair.

    Merci de m'avoir lu.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Est-ce que tu as essayé de taper cette requête sur Access(dans ta bdd) en mode SQL?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 219
    Points : 336
    Points
    336
    Par défaut
    L'erreur ne viendrais pas plutot de cette ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set q = mabase.QueryDefs("SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence.Value;")
    Essaie ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set q = mabase.QueryDefs("SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = "& bdua_Agence.Value &" ;")
    Si débugger est l'art de corriger les bugs, alors programmer est l'art d'en créer.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    Bonjour, merci de vos réponses.

    @Baapt: Je ne suis pas sûr de bien comprendre ta question. Je ne sais pas si tu parles du DoCmd.RunSQL (qui ne fonctionne pas avec le SELECT) ou non. Si c'est le cas, je viens d'expliquer pourquoi je ne l'ai pas utilisé, si ce n'est pas le cas peux-tu me préciser plus en détail comment faire?

    @arthur57: Cette ligne ne fonctionne pas, malheureusement. J'ai abandonné l'idée d'utiliser les " & Controle.Value & " car toutes mes tentatives avec cette syntaxe ne compilent pas. C'était aussi pour cela que j'ai utilisé un QueryDef, qui me semble n'en a pas besoin, mais je ne suis pas sûr. Il y a plus d'infos à ce sujet dans le lien hypertexte de mon premier message.
    J'ai cependant essayé la ligne de code que tu me proposes, l'erreur reste la même.

    EDIT: J'ai oublié de poster un peu plus d'information.
    Quand je passe en mode débogage, j'obtiens dans la fenêtre "Variables Locales" quelque chose du style:
    Me
    q -> Nothing
    mabase
    t -> Vide
    NomDR -> Vide
    rs -> Vide
    RaisonSociale -> Vide
    Ville -> Vide
    Adresse -> Vide

  5. #5
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    essaye comme ca

    Set q = mabase.CreateQueryDef("", ""SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence.Value;"")
    Set t = q.openrecordset()

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    Bonjour fmvgld,

    La ligne du Set que tu me proposes est directement affichée rouge lorsque je la colle dans le VBA, et ne compile pas.
    J'ai tenté de la modifier pour obtenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set q = mabase.CreateQueryDef("", "SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence.Value;")
    Et j'ai obtenu l'erreur 3061 "Trop peu de paramètres, 1 attendu".
    J'ai ensuite tenté d'effectuer ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set q = mabase.CreateQueryDef("", "SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence.Value;")
    q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
    Set t = q.OpenRecordset()
    Mais j'obtiens une erreur d'exécution 424, "Objet requis" sur la ligne en gras ci dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set q = mabase.CreateQueryDef("", "SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence.Value;")
    q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
    Set t = q.OpenRecordset()
    bdub_DR.Value = rs.Fields(NomDR).Value: bduc_nomAgence.Value = bdua_Agence.Value: bdud_RS.Value = rs.Fields(RaisonSociale).Value: bdue_Ville.Value = rs.Fields(Ville): bduf_Adresse.Value = rs.Fields(Adresse)
    EDIT: Rectification, j'avais oublié de changer "rs" en t.
    Mais j'ai toujours une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bdub_DR.Value = t.Fields(NomDR).Value
    bduc_nomAgence.Value = bdua_Agence.Value
    bdud_RS.Value = t.Fields(RaisonSociale).Value
    bdue_Ville.Value = t.Fields(Ville)
    bduf_Adresse.Value = t.Fields(Adresse)
    L'erreur est toujours 3265 "Élément non trouvé dans cette collection", sur la première ligne du code ci-dessus.

    Je tiens au passage à vous remercier de votre aide.

  7. #7
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Set q = mabase.CreateQueryDef("", "SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence;")
    q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
    Set t = q.OpenRecordset()

    et comme cela

    test chez qui fonctionne



    Set q = mabase.CreateQueryDef("", "select * from mvt1 where [sr mvt]=r")
    q.Parameters(0).Value = 1
    Set t = q.openrecordset()

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    L'exécution de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set q = mabase.CreateQueryDef("", "select * from t_Agence where NomAgence = bdua_Agence.Value;")
    q.Parameters(0).Value = 1
    Set t = q.OpenRecordset()
    Me rend l'erreur 3265 encore et toujours.

    Je note au passage une chose, l'erreur 3265 apparait, que je tente d'appeler bdua_Agence.value ou bdua_Agence.

  9. #9
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    c normal l'erreur que tu obtient cette requete etait une requete de test sur ma propre base. Aussi tu n'a pas les tables que j'ai.

    Ta requete doit etre

    Set q = mabase.CreateQueryDef("", "SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence;")
    q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
    Set t = q.OpenRecordset()

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    Mes excuses, je m'en suis rendu compte juste après, et j'ai tenté de corriger le tir.

    Le copier coller du code que tu me proposes me rend invariablement l'erreur 3265, avec ou sans .Value, avec ou sans point virgule à la fin de la requête.

    Je précise cependant que depuis quelques essais l'erreur se situe en dessous, sur cette portion de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bdub_DR.Value = t.Fields(NomDR).Value
    bduc_nomAgence.Value = bdua_Agence.Value
    bdud_RS.Value = t.Fields(RaisonSociale).Value
    bdue_Ville.Value = t.Fields(Ville)
    bduf_Adresse.Value = t.Fields(Adresse)

  11. #11
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    je t'est envoyer un MP privé.

    de plus peut tu mettre l'ensemble de ta SUB() stp

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    Ma sub complète:

    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
    Private Sub bdua_Agence_Change()
        'Lors de la modification d'une agence
        'la sélection d'une agence pré-remplit les autres champs
     
        Dim q As DAO.QueryDef
        Dim mabase As Database
        Set mabase = CurrentDb
     
        'Test1
        ' ouvre objet définiton de requête
        'Set q = mabase.QueryDefs("SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = " & bdua_Agence.Value & " ;")
        ' fournit valeur du 1er paramètre
        'q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
        ' ouvre un recordset à partir de la requête paramétrée
        'Set t = q.OpenRecordset
     
        'Test2
        'Set q = mabase.CreateQueryDef("", "SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence.Value;")
        'q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
        'Set t = q.OpenRecordset()
     
        'Test3
        'Set q = mabase.CreateQueryDef("", "select * from t_Agence where NomAgence = bdua_Agence.value;")
        'q.Parameters(0).Value = 1
        'Set t = q.OpenRecordset()
     
        Set q = mabase.CreateQueryDef("", "SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence;")
        q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
        Set t = q.OpenRecordset()
     
        bdub_DR.Value = t.Fields(NomDR).Value
        bduc_nomAgence.Value = bdua_Agence.Value
        bdud_RS.Value = t.Fields(RaisonSociale).Value
        bdue_Ville.Value = t.Fields(Ville).Value
        bduf_Adresse.Value = t.Fields(Adresse).Value
    End Sub
    Erreur 3265 sur la ligne 31.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    Mise à jour du sujet:

    Après conversation par MP avec fmvgld, et grâce à lui, mon problème a pu être résolu. Je poste ci-après ma Sub finale, qui pré-remplit bien mes champs avec le code VBA:

    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
    Private Sub bdua_Agence_Change()
        'Lors de la modification d'une agence
        'la sélection d'une agence pré-remplit les autres champs
     
        Dim q As DAO.QueryDef
        Dim mabase As Database
        Set mabase = CurrentDb
     
        'Récupération de l'enregistrement sélectionné
        Set q = mabase.CreateQueryDef("", "SELECT NomDR, RaisonSociale, Ville, Adresse FROM t_Agence WHERE NomAgence = bdua_Agence;")
        q.Parameters(0).Value = [Forms]![Accueil]![bdua_Agence]
        Set t = q.OpenRecordset()
     
        'Remplissage des champs de modification avec les valeurs actuelles de l'enregistrement
        [Forms]![Accueil]!bdub_DR = t!NomDR
        [Forms]![Accueil]!bduc_nomAgence = bdua_Agence
        [Forms]![Accueil]!bdud_RS = t!RaisonSociale
        [Forms]![Accueil]!bdue_Ville = t!Ville
        [Forms]![Accueil]!bduf_Adresse = t!Adresse
    End Sub
    Un grand merci à ceux qui m'ont répondu, je n'y croyais plus.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/09/2009, 03h40
  2. Réponses: 4
    Dernier message: 22/06/2009, 12h12
  3. [ODBC] Garder une saisie après sélection dans une liste déroulante
    Par nawak.seb dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 27/08/2008, 14h48
  4. Affichage dans un input text suivant sélection dans une liste
    Par baggie dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 21/05/2008, 15h55
  5. obliger sélection dans une liste déroulante
    Par doyle01 dans le forum Access
    Réponses: 4
    Dernier message: 15/05/2006, 15h31

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