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 :

Extraire une valeur d'une table en fonction d'une liste deroulante


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 51
    Points : 41
    Points
    41
    Par défaut Extraire une valeur d'une table en fonction d'une liste deroulante
    Bonjour,

    J'ai un petit problème je vous expose ce que je souhaite faire :

    Pour simplifier, j'ai une table "Forage" avec les champs Type_de_forage et Vitesse_de_forage.
    J'ai un formulaire avec une liste deroulante selectionnant la valeur que je souhaite de Type_de_forage, je souhaite que dans la table s'ajoute la vitesse de forage automatiquement en fonction du type de forage séléctionné, donc a partir des données de la table et non d'une zone de texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim sSQL As String
        rs!Vitesse_de_forage = sSQL = "SELECT Forage.Vitesse_de_forage FROM forage WHERE (((forage.Type_de_forage)=[Forms]![Outil]![For11])); "
    Ne fonctionne pas, et c'est du a la ligne de code vu que tout le reste s'affiche bien dans la table donbt le type de forage, For11 est le nom de la liste deroulante basé sur Type_de_forage, Outil le nom du formulaire et Forage le nom de la table.
    Je n'ai aucune erreur mais des valeurs de vitesse de 0 qui ne correspondent pas aux bonnes valeurs.

    Merci d'avance.

  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 as-tu besoin de deux = et du string sSql ?
    Carrément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        rs!Vitesse_de_forage = "SELECT Forage.Vitesse_de_forage FROM forage WHERE forage.Type_de_forage=" & [Forms]![Outil]![For11]
    Et il faut sortir l'expression du contrôle [Forms]![Outil]![For11] du texte SQL.

    Si la colonne liée de For11 est du texte, ne pas oublier de mettre la variable [Forms]![Outil]![For11] entre "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        rs!Vitesse_de_forage = "SELECT Forage.Vitesse_de_forage FROM forage WHERE forage.Type_de_forage=""" & [Forms]![Outil]![For11]  & """"
    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
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    Non mais je copie du code trouvé sur internet et je l'adapte, je débute encore donc c'est pour ca qu'il y a des lignes de code un peu à "l'arache" un peu partout.

    Le problème avec ton code c'est qu'il ne reconnais pas le code sql j'ai l'impression vu qu'il m'inscrit directement la requete en enregistrement pour le champ "Vitesse_de_forage".
    Dans le champ "Vitesse_de_forage" de la table crée j'ai "SELECT Forage.Vitesse_de_forage FROM forage WHERE etc ....".

    C'est surement un probléme basique pour dire d'executer en sql mais je ne trouve pas , avec docmd.runsql ca ne fonctionne pas non plus.

    Merci !

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

    OK, ok nous étions tous débutant mais il faut prendre de bonnes habitudes dès le début (Ex : ne pas laisser des lignes qu'on ne comprend pas dans les codes parce qu'après on ne sait plus ce qui fait bloquer).
    Quand je relis ce que tu dis, je perds le nord :
    J'ai un formulaire avec une liste deroulante selectionnant la valeur que je souhaite de Type_de_forage
    - OK, tu es dans un formulaire (quelle est sa source stp ?
    - Tu as une liste déroulante dont le contenu est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT forage.Type_de_forage et forage.Vitesse_de_forage FROM forage
    Quelles sont ses propriétés Colonne liée, Nombre de colonnes et largeurs colonnes ?
    Ensuite,
    je souhaite que dans la table s'ajoute la vitesse de forage automatiquement en fonction du type de forage séléctionné, donc a partir des données de la table et non d'une zone de texte.
    - Tu parles de quelle table ?

    Un peu plus d'explications ne seraient pas de trop je penses.

    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
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    Bon je vais expliquer ce que fais le formulaire sinon personne ne va rien comprendre.

    Ma db contient 3 tables :

    Table1 avec le seul champ "Lithologie" qui fais office de clé primaire
    Forage avec les champs "Lithologie" "Type_de_forage" et "Vitesse_de_forage"
    Geol qui fais office de table d'accueil pour la constitution du log geologique (voir après)

    Mon formulaire a pour but de constituer un log geologique (evolution de differents parametres geologique en fonction de la profondeur)

    Il contient les zones de texte "De" "à" "Couche" "Type_de_forage" entré par l'utilisateur.
    Exemple : l'utilisateur entre : De "0" à "400" Couche "Argiles" Type_de_forage "Sonique"
    Il y a un bouton déjà crée pour envoyer toutes les données dans la table GEOL en cliquant dessus, en plus de les envoyer j'ai crée une boucle pour que les enregistrements se fasse tout les centimètres et non avoir seulement un enregistrement avec les informations entrée.

    Et donc je souhaiterais que dans cette table initialement présente on m'affiche la vitesse de forage qui dépend de la lithologie et du type de forage.

    Donc la liste déroulante Type_de_forage dépend directement de la liste déroulante couche, le code sql de la liste déroulante Type_de_forage est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT Forage.Type_de_forage FROM forage WHERE (((forage.Lithologie)=[Forms]![Outil]![Modif])); "
    Modif est le nom de la liste deroulante couche
    Outil le nom du formulaire

    j'ai réussi a obtenir la bonne vitesse avec la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Forage.Vitesse_de_forage
    FROM forage
    WHERE (((forage.Type_de_forage)=Forms!Outil!For11)) And (((forage.Lithologie)=Forms!Outil!Modif));
    mais impossible d'inserer la requete également dans le code.

    sinon il aurait été logique de mettre dans mon code comme tu a fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rs!Vitesse_de_forage= ("SELECT Forage.Vitesse_de_forage
    FROM forage
    WHERE (((forage.Type_de_forage)=Forms!Outil!For11)) And (((forage.Lithologie)=Forms!Outil!Modif));")
    Mais ca ne fonctionne pas.

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

    et en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    rs!Vitesse_de_forage= ("SELECT Forage.Vitesse_de_forage
    FROM forage
    WHERE forage.Type_de_forage= """ & Forms!Outil!For11 & """ And forage.Lithologie =""" & Forms!Outil!Modif & """"
    Sinon, peux-tu mettre la totalité du code stp;

    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
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    Avec ton code il m'affiche dans le champ Vitesse_de_forage de la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forage.Vitesse_de_forage FROM forage WHERE forage.Type_de_forage = "Marteau hors de trou" And forage.Lithologie = "Gres"
    Gres et marteau hors de trou sont les valeurs saisie dans les liste déroulantes, il me les a bien affiché du coup mais n'a pas converti le code sql en instruction et a inscrit directement la requete dans la table il ne comprend peut être pas que c'est du code SQL ?


    Le code pour le bouton enregistrer est redondant je vais juste copier le début du coup :


    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
     
    Set db = CurrentDb()
     
     
    If Forms.Outil.Texte7 >= 0 And Forms.Outil.Visible = True Then
     
     
    n = Forms.Outil.Texte7
    I = Forms.Outil.Texte11
    Dim rs As DAO.Recordset   'inscription
    Set rs = CurrentDb.OpenRecordset("Geol", DB_OPEN_DYNASET)
    'Do While i < n
    For I = Forms.Outil.Texte11 To Forms.Outil.Texte7 - 0.5 Step 0.5
        rs.AddNew
        rs!de = I
        rs!à = I + 0.5
        rs!couche = Forms.Outil.Modif
        rs!Type_de_forage = Forms.Outil.For11
     'ici la vitesse de forage a inserer 
     
     
     
        rs.Update
     
        I = I
     
     
    'Debug.Print i, n
     
    Next I
     
    Else
    End If

  8. #8
    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,

    Ouf, enfin un peu clair !
    1- Normalement, ce genre de données n'a pas à être conservée dans une table. Vu que tu peux la récupérer en faisant une requête avec les 2 tables reliées correctement et en affichant les champs des 2 tables.

    2- Si c'est vraiment nécessaire, il faudrait utiliser la fonction de Domaine DLookUp (cela permet de récupérer des valeurs d'une table dans une autre, on l'utilise surtout pour l'affichage). Je te conseille le tuto de références sur les fonctions de domaines ICI.
    Donc le code sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs!Vitesse_de_forage= DLookUp("[Vitesse_de_forage]","[forage]","[Type_de_forage]= """ & Forms!Outil!For11 & """ And [Lithologie] =""" & Forms!Outil!Modif & """")
    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

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par madefemere Voir le message
    Bonsoir,

    Ouf, enfin un peu clair !
    1- Normalement, ce genre de données n'a pas à être conservée dans une table. Vu que tu peux la récupérer en faisant une requête avec les 2 tables reliées correctement et en affichant les champs des 2 tables.

    2- Si c'est vraiment nécessaire, il faudrait utiliser la fonction de Domaine DLookUp (cela permet de récupérer des valeurs d'une table dans une autre, on l'utilise surtout pour l'affichage). Je te conseille le tuto de références sur les fonctions de domaines ICI.
    Donc le code sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs!Vitesse_de_forage= DLookUp("[Vitesse_de_forage]","[forage]","[Type_de_forage= """ & Forms!Outil!For11 & """ And forage.Lithologie =""" & Forms!Outil!Modif & """")
    Cordialement,

    Merci beaucoup ça fonctionne ! par contre je l'ai entré sans les 3 " devant les forms[...] et ça fonctionne quand même. C''est vraiment nécessaire ?
    Je met le sujet en résolu, et a bientôt pour une nouvelle question

  10. #10
    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
    C'est bien si c'est résolu.
    Attention : J'ai corrigé le code du message précédent (certaines coquilles font quand même désordre).
    Les """ sont nécessaires pour que les mots avec apostrophes ne buggent pas le critère.

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

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

Discussions similaires

  1. [9.3] Dupliquer les lignes d'une table en fonction d'une valeur d'un champ
    Par rhinolophus dans le forum Contribuez
    Réponses: 2
    Dernier message: 03/04/2015, 11h44
  2. UPDATE sur table en fonction d'une valeur sur une autre table
    Par jgjeremy01 dans le forum Requêtes
    Réponses: 7
    Dernier message: 03/12/2013, 23h41
  3. Placer une image sur la page en fonction d'une valeur
    Par D4rkArthemis dans le forum BIRT
    Réponses: 3
    Dernier message: 19/04/2011, 16h03
  4. [XL-2007] Extraire des lignes en fonction d'une valeur de cellule dans un autre fichier
    Par MisterTambo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/08/2009, 10h42
  5. Réponses: 2
    Dernier message: 05/03/2008, 22h01

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