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

Access Discussion :

Récupérer la valeur rentrées dans une liste déroulante


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut Récupérer la valeur rentrées dans une liste déroulante
    Bonjour,

    Un formulaire possède une liste déroulante dont les données se trouvent dans une table, ma liste affiche les données de la table, ok

    Quand je veux ajouter des données à la table, je clique sur un bouton qui execute une macro m'ouvre la table en mode ajout et réactulise le tout .

    J'aimerais gràce à l'événement notinlist, récupérer les données tapé par l'utilisateur dans la liste, ouvrir le formulaire d'ajout correspondant avec les données tapée dans le champ correspondant .

    Et là ca pose problème c'est de la vrai programmation et je sais pas faire

    edit: bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Prod_nat_NotInList(NewData As String, Response As Integer)
         'Charge la dans la variable "var1" la valeur de la liste Prod_nat
        Var1 = Me.Prod_nat.Value
         ' Ouvre production nationnale en mode ajout, boite de dialogue
        docmd.OpenForm ([Production Nationnale],,,, acformadd,acDialog,)
     
     
    End Sub
    Voila ma commande openform est foireuse, après il me reste à réussir à rentrer ma variable "Var1" dans un champ "Prod_nat" de ma table ou formulaire [Production Nationnale]

    Ca avance je pense

    Edit 2 : Ma table peut être soit modifié par un formulaire de remplissage, soit ouverte pour ajout par un bouton, ou encore par l'option Notinlist,

    Edit 3: En attendant sur notinlist je vais mettre un Msgbox cliquez sur le bouton "ajouter" pour ajouter un nouveau Producteur

    Edit 4: sinon je crée un formulaire de remplissage spécial événement Notinlist, avec une requete sur les données de mon formulaire de base, mais là ca va multiplier le nombre de formulaire vu que des liste j'en ai en pagaille

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    on peut mettre simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenForm "Production Nationnale", acNormal, , , acFormAdd, acWindowNormal, NewData
    La nouvelle donnée est passée en paramètre au formulaire de saisie

    A l'ouverture le second formulaire récupère le paramètre et l'affecte au champ désiré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Form_Load()
     Me!NomChamp = OpenArgs
    End Sub

  3. #3
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser les 2 variables prévues à cet effet (newdata et Response)

    L'aide l'access détaille parfaitement cette manip par un code. Y-a plus qu'à.


    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    Super j'essaye cela demain matin !! Merci à vous deux

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    Je pense ( sans avoir éssayé qu'il va y avoir un problème avec ton code Helas, en effet ton code va bien me rentrer la valeur dans le champ, mais ca le fait à l'ouverture du formulaire, donc dans tout les cas, hors mon formulaire n'est pas seulment ouvert par cette action, donc dans les autres cas, Accez risque de planter si la valeur est à Zéro, ou bien me mettre une valeur erronée car ancienne.

    Je me trompe ?

    dans ce cas à l'ouverture il faudrait mettre une condition, sur une variable général pour vérifier que l'on ouvre le formulaire dans le bon cas .


    sur l'événement notinlist:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    varx=1
    DoCmd.OpenForm "Production Nationnale", acNormal, , , acFormAdd, acWindowNormal,
    ouverture second formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Private Sub Form_Load()
     
    If varx = 1 then  Me!NomChamp = OpenArgs
     
    End if
     
    End Sub
    Tou en remettant à la fermeture de ce formulaire la variable X à 0.

    Je me trompe ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    Rha je tiens le bon Bout !!

    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
     
     
    Private Sub Form_Load()
     
        Public VarX As String
        Public VarY As String
     
     
    End Sub
     
     
    Private Sub Prod_nat_NotInList(NewData As String, Response As Integer)
     
        If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des Producteurs ?", _
                           vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") = vbYes Then
            DoCmd.OpenForm "Production Nationnale", acNormal, , , acFormAdd, acWindowNormal
            Response = acDataErrAdded
            VarX.Value = 1
        Else
            Response = acDataErrContinue
            Prod_nat.Undo
        End If
     
     
    End Sub
    L'erreur , je n'arrive pas à charger ma variable X de la donnée 1 le code est pas bon

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    C'est un peu obscur.

    Une fois le formulaire de saisie ouvert il suffit d'y affecter la valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms.monform.monchamp = newdata
    Dans le cas ou il faut simplement rajouter la valeur sans autres saisies utilise plutot un recordset, tu te dispense de l'ouverture du formulaire.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    J'ai d'autre valeur à rentré dans mon formulaire d'ajout donc le record Set n'est pas possible

    Oui j'avoue je me suis mal expliqué

    Dans mon premier formulaire "A" , lors d'une saisie dans une ZDL, si la saisie ,n'existe pas dans la table de la ZDL, je veux lancer le formulaire d'ajout de cet table "B" avec la valeur déjà rentré dans la ZDL du formualaire A .

    Le Hic, c'est que ce formulaire d'ajout "B" ne s'ouvre pas que comme ca, l'utilisateur peut aussi choisir d'ajouter une nouvelle entrée sans passer par le formulaire A,

    Il faut donc que je mette une condition à l'ouverture pour vérifier " d'où viens la commande d'ouverture.

    Donc en code :

    Dans un module variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Compare Database
     
        Public VarX As String
        Public VarY As String
    Dans mon formulaire A sur l'événement notInList :
    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
     
    Private Sub Prod_nat_NotInList(NewData As String, Response As Integer)
     
        If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des Producteurs ?", _
                           vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") = vbYes Then
            DoCmd.OpenForm "B", acNormal, , , acFormAdd, acWindowNormal
            Response = acDataErrAdded
            VarX = "1"
            VarY = NewData
     
        Else
     
            Prod_nat.Undo
        End If
     
     
    End Sub
    et enfin dans mon formulaire B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Load()
     
        If VarX = "1" Then
            Me.Prod_nat = VarY
     
        End If
     
    End Sub
    Là tout fonctionne, j'ai juste une boite de dialogue m'indiquant " Le texte entré n'est pas un élément de la liste. "

    Il faut que je trouve si cette erreur vient du formulaire A ( qui possède des ZDL ) ou B qui n'a que des champs.

    bon à priori ca vient de la liste du formulaire A, il faudrrait que je vire cette pop-up, je concois qu'elle arrive vu que la donnée rentré dans la ZDL n'est validé que lors de la fermeture du Formulaire B qui ajoute cette données dans la table .

    Edit : Bon il faut que j'ajoute cette commande quelquepart :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Requery "Prod_nat"
    Mais ou

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Le message est conditionné par la valeur de Response. Il faut donc lui affecter la bonne valeur. Voir l'aide pour choisir le bon comportement.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    d'après ce que je lis de l'aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response = acDataErrAdded
    est fonctionnel dans le cas ou on ajoute directemnt la valeur dans la liste, sans passer par un formulaire à plusieur champs .

    C'est donc là que viens le message.

    donc d'après l'aide:
    La plupart du temps, vous ne pouvez pas ajouter simplement un champ dans un nouvel enregistrement : selon la structure des données de la table, vous devrez probablement ajouter un ou plusieurs champs pour vous adapter aux données. Par exemple, un nouvel enregistrement doit inclure des valeurs pour les champs comportant la clé primaire. Si vous avez besoin d'ajouter en temps réel des éléments à une zone de liste modifiable, vous devez demander à l'utilisateur d'entrer des données pour tous les champs requis, d'enregistrer le nouvel enregistrement, puis d'actualiser la zone de liste modifiable pour afficher la nouvelle valeur.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    Donc normalment , dans le SUb de fermeture de mon formulaire B, il faut que je mette un DocmdRequery pour rafraichir ma ZDL du formulaire A.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DocmdRequery Forms.A.ZDL
    le code est bon ?

  12. #12
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms.monform.maliste.requery
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    Avant tout merci des vos réponses . Gràce à vous j'avance, petit à petit dans un language que je ne connaît pas


    Pour ce qui est du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forms.monform.monliste.requery

    si je le mets dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Private Sub Form_Close()
     
        Forms.A.table_nat.Requery
        'remet les variables à 0
        VarY = "0"
        VarX = "0"
     
    End Sub
    Acces me dit Propriété ou méthode non géré par cet objet.

    J'en déduis que le ".requery" n'est pas valide dans le Form_close
    dans ce cas comment dois je faire pour réactualiser ma liste du formulaire A quand je ferme le formulaire B

  14. #14
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    C'est la liste qui est mise à jour pas la table qui la contient.

    Ton controle se nomme Prod_Nat et non Table_Nat !
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    Tin oué me suis gouré en recopiant, mais malheuresment ca bug pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms.Concert.Prod_nat.Requery
    L'écriture du code est bien :

    Forms.nomformulaire.nomobjet.requery ?

    est ce que je ne me crée pas des bug en ayant un "prod_nat" dans un formulaire ( une ZDL) et un champ "Prod_nat" dans une table ?

  16. #16
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Voici comme je procède dans l'une de mes applis :


    Dans Notinlist je met l'appel au formulaire (ici la liste contient des N° de contrats).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Response = acDataErrContinue
    If MsgBox("Ce contrat n'existe pas. Voulez-vous le créer ?", vbYesNo)= vbYes Then
        DoCmd.OpenForm "monform2", , , , acFormAdd
        Forms![monform2].N_CONTRAT = NewData
        Forms![monform2].N_CONTRAT.Locked = True
        AttenteFermeture Forms![monform2], Forms![monform2].N_CONTRAT
        Response = acDataErrAdded
    End If

    fonction à placer 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
    Function AttenteFermeture(ByRef NomForm As Form, valreturn As Control)
    ' attent la fermeture du formulaire pour continuer
     
    ' Ligne d'appel :
    '                  AttenteFermeture Forms!nom du formulaire
    Dim val
    On Error Resume Next                    ' évite le msg d'erreur au test form.visible
                                            ' à mettre le avant le loop
        Do
           DoEvents
           val = NomForm.valreturn
        Loop While NomForm.Visible
     
    AttenteFermeture = val
    End Function
    Pas de requery, pas de code dans form 2 et tant que le form 2 n'est pas fermé le code de form 1 ne s'execute pas.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    Merci Loufab !!

    J'essaye ton code de suite! Bon là j'avoue tu m'a filé direct le code, ce qui fait que c'est plus rapide, mais je perd en recherche/ apprentissage Mais fallait aussi boucler çà pour passer à autre chose

    Merci !!

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Points : 20
    Points
    20
    Par défaut
    Pinaise Yes

    T'est le plus fort !

    J'allais te poser la question de comment faire pour que ta formule devienne " générique" et puissent fonctionner avec toutes mes ZDLm, et ben non elle l'est c'est niquel cà évite de mettre trop de code pour faire la même chose , jolie !

    Merci !

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

Discussions similaires

  1. Récupérer l'indice d'une valeur choisie dans une liste déroulante
    Par winflow dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 06/01/2014, 12h15
  2. Récupérer valeur sélectionnée dans une Liste déroulante
    Par coeurdange dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/08/2008, 15h27
  3. Réponses: 7
    Dernier message: 07/01/2008, 17h50
  4. Réponses: 2
    Dernier message: 29/12/2006, 15h56
  5. Réponses: 1
    Dernier message: 28/07/2006, 09h17

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