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 :

liste déroulante et boutons de commande


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut liste déroulante et boutons de commande
    bonjour,

    j'ai créé une BDD de gestion de stock qui fonctionne bien désormais mais je souhaiterais apporter quand même une petite modification. j'ai un formulaire dans lequel j'ai :
    -nom du produit
    -référence
    -prix
    ...

    j'ai créé des boutons de déplacement, de validation, de création et de suppression d'enregistrement. par contre, comme j'ai beaucoup d'enregistrement, j'ai créé une liste déroulante pour sélectionner mes articles (ça va plus vite). lorsque je sélectionne un article via ma liste déroulante, les autres informations de l'article sélectionné (réf, prix...) s'affichent bien. par contre, dès que j'utilise les boutons de commande indiqués ci-dessus, l'article qui s'affiche dans la liste déroulante ne se modifie pas.

    ex : si dans ma liste déroulante, je sélectionne l'article "lessive X", la référence et le prix s'affichent bien. par contre, si je clique ensuite sur mon bouton créer un autre article, j'ai ma référence et mon prix qui deviennent vierges (ce qui est normal) mais j'ai le nom de l'article "lessive X" qui reste affiché, ce qui est embêtant.

    y-a t'il une solution. merci de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    pour faire ce que tu souhaites, je me sers de deux contrôles :
    - Une liste déroulante pour la sélection
    - Une zone de texte pour la saisie

    Pour mettre à jour la liste déroulante, lorsque tu te déplaces il faut utiliser l'événement Sur Activation du formulaire.
    Exemple : Pour l'exemple j'appelle la liste déroulante LstArticle, et la zone de texte TxtArticle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Private Sub Form_Current()
     If Me.CurrentRecord=NewRec Then
       LstArticle.Visible=False
     Else
      If Not LstArticle.Visible Then LstArticle.visible=True
      LstArticle.Value=[nom du produit] 'ou le champ qui correspond à la liste
     Endif
     TxtArticle.Visible=Not LstArticle.Visible
    End sub
    Lorsque tu souhaites créer un nouvel enregistrement, tu rends la liste déroulante non-visible et tu rends la zone de texte visible pour autoriser la saisie; une fois l'enregistrement créé tu fais l'inverse. Il faut utiliser l'événement AfterInsert du formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_AfterInsert()
     'Mettre à jour la liste des articles 
     LstArticle.Requery
     'Placer la liste sur l'article ajouté
     LstArticle.Value=[nom du produit] 'ou le champ qui correspond à la liste
     LstArticle.SetFocus
     LstArticle.Visible=True
     TxtArticle.Visible=False
    End sub

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    salut,
    je suppose....a confirmer que ta ZLD est indépendante de ton formulaire et qu'elle va simplement rechercher et selectionné l'enregistrement correspondant dans ta table. c'est normal qu'elle conserve ce que tu lui as demandé de sélectionner c'est indépendant de ce que feras par la suite, si tu veux et c'est le plus important qu'elle tienne compte immédiatement de la création du nouvel enregistrement tu dois mettre dans le code par exemple sur ouverture de ton form ou sur le bouton de validation de la création le code suivant :
    et si vraiement ce qu'elle affiche te gène :
    si j'ai pas bien compris précise.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    ci-joint, voici une image de mon formulaire, vous pouvez voir que les deux noms d'articles ne correspondent pas (j'ai d'abord sélectionné alcal fraich pamplemousse, puis je suis allé sur le bouton de commande suivant pour arriver sur balai zébré, par contre alcal fraich est resté).

    ILANK, ta proposition a l'air intéressante par contre je suis désolé mais je n'ai pas tous compris. où mets tu ton code ?

    LE VIEUX, tu as bien compris le problème mais c'est pareil, où dois-je mettre le code ?

    merci de votre aide !

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bah,
    j'ai parlé pour le premier code de l'événement Sur Activation du formulaire
    pour le second, AfertInsert correspond à l'événement Après Insertion du même formulaire.

    Mais puisque tu as créé toi-même les boutons de déplacement
    tu peux dans le code de ces boutons écrire ceci pour la mise à jour de la liste déroulante lorsque tu te déplaces:

    Pour le bouton Suivant : ajouter les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'Mise à jour de la valeur affichée par la liste déroulante
    LstArticle.Value=LstArticle.ItemData(LstArticle.ListIndex+1)
    LstArticle_Afterupdate
    Pour le bouton Précédent : ajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LstArticle.Value=LstArticle.ItemData(LstArticle.ListIndex-1)
    LstArticle_AfterUpdate
    Pour le bouton Dernier : ajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LstArticle.Value=LstArticle.ItemData(LstArticle.ListCount-1)
    LstArticle_AfterUpdate
    Pour le bouton Aller au premier : ajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LstArticle.Value=LstArticle.ItemData(0)
    LstArticle_AfterUpdate
    Pour paraître plus convivial, j'ajoute ces lignes dans le code de l'événement après MAJ de la liste déroulante :
    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
    Private Sub LstArticle_AfterUpdate()
    'Ici le code qui permet d'afficher les bonnes valeurs dans les contrôles
    ....
    'Maintenant un code qui permet juste d'indiquer visuellement à l'utilisateur
    'qu'il a atteint le dernier enregistrement ou le premier
      CmdSuivant.Enabled=True 
      CmdPrecedent.Enabled=True
      If LstArticle.ListIndex=0 Then 
        If (Screen.ActiveControl Is CmdPrecedent) Or (Screen.ActiveControl Is CmdGotoFirst) Then CmdSuivant.SetFocus 
        CmdPrecedent.Enabled=False
      End if
      If LstArticle.ListIndex=LstArticle.ListCount-1 Then 
        If (Screen.ActiveControl Is CmdSuivant) Or (Screen.ActiveControl Is CmdGotoLast) Then CmdPrecedent.SetFocus
        CmdSuivant.Enabled=False
      End if
      CmdGotoFirst.Enabled=CmdPrecedent.Enabled
      CmdGotoLast.Enabled=CmdSuivant.Enabled
    End sub

    et pour le bouton créer, là tu rends visible la zone de texte et non-visible la liste déroulante en ajoutant ces lignes dans le code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LstArticle.Visible=False
    TxtArticle.Visible=True
    TxtArticle.SetFocus

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    salut,
    essayes de mettre le code sur l'évènement sur clic de ton bouton Validation.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    désolé j'ai oublié le code


    ILANK, je viens d'essayer ta proposition.
    j'ai fais comme tu m'as dis (désolé je ne connais pas le vba). j'ai bien sûr remplacé lstarticle et txtarticle par 'Modifiable62' et 'nomarticle'. cependant j'ai un message d'erreur "l'expression sur activation entrée comme paramètre de la propriété de type événement est à l'origine d'une erreur. Nom ambigu détecté : Form_Current

    LE VIEUX : j'ai essayé également mais je le mets où le code exactement. le nom du bouton validation est Commande27

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Commande27_Click()
    On Error GoTo Err_Commande27_Click
     
     
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
     
    Exit_Commande27_Click:
    Exit Sub
     
    Err_Commande27_Click:
    MsgBox Err.Description
    Resume Exit_Commande27_Click
     
    End Sub
    merci

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Oui, pour utilser Form_Current. Il faut aller dans la feuille de propriétés du formulaire, Onglet événement sélectionner l'entrée Sur Activation, choisir la valeur [Procédure événementielle] puis cliquer sur le bouton ... qui se trouve à droite pour enfin accèder à la fenêtre de code VBA.
    Sinon, regarde plus haut, j'utilise tes boutons de déplacements.
    L'erreur "Nom ambigu" signale sûrement que tu as deux procédures portant le même nom dans le module du formulaire.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    re,
    comme le dit ilank il doit y en avoir du code, et a force d'en rajouter sans bien maitriser VBA - ça va courcicuiter.
    il y en a probablement également sur ton bouton de validation que tu appelles
    enfin dont tu as laissé l'appellation commande27.
    pour y accéder
    mode création de ton form
    clic sur commande27
    afficher propriétés
    évènements
    sur clic - tu as donc peut être déjà [procédure évènementiell]
    clic sur les ... tu ouvres le VBE ---> accés au code évènement de ton bouton
    si vide tu mets les codes que je t'ai proposé, s'il y a déjà du code il faut rajouter en principe avant le end sub, si doute copie et poste le code.
    à+

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    ILANK, voici ce que donne le code. par contre j'ai un message d'erreur "erreur d'exécution 2465. impossible de trouver le champ '|' auquel il est fait référence dans votre expression. et j'ai la ligne 'Modifiable62.Value = [nom du produit] 'ou le champ qui correspond à la liste' qui est soulignée en jaune.


    000
    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
    Private Sub Form_AfterInsert()
     'Mettre à jour la liste des articles
     Modifiable62.Requery
     'Placer la liste sur l'article ajouté
     Modifiable62.Value = [nom du produit] 'ou le champ qui correspond à la liste
     Modifiable62.SetFocus
     Modifiable62.Visible = True
     nomarticle.Visible = False
    End Sub
    
    Private Sub Form_Current()
     If Me.CurrentRecord = NewRec Then
       Modifiable62.Visible = False
     Else
      If Not Modifiable62.Visible Then Modifiable62.Visible = True
      Modifiable62.Value = [nom du produit] 'ou le champ qui correspond à la liste
     End If
     nomarticle.Visible = Not Modifiable62.Visible
    End Sub

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    En fait, mon code s'appuie sur le fait que le formulaire à une source; or soit ton formulaire n'a pas de source de données ou nom du produit n'est pas le bon libellé du champ de la table des produits.
    Comment passes-tu d'un enregistrement à un autre, utilises-tu un recordset ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    Tu as raison, le nom du champ était faux. j'ai donc rectifié et ça marche en partie.
    le bouton texte n'apparait plus. le bouton liste déroulante est bien là et fonctionne bien avec tous les boutons de commandes de déplacement, ce qui est super.
    par contre, si je veux créer un enregristrement, je clique sur créer, tous les champs deviennent vierges (ce qui est normal), mais je ne peux pas créer d'enregistrement dans mon bouton liste déroulante (ce qui est normal aussi), mais le bouton texte n'apparaît pas.
    y'a t'il autre chose à faire ?

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Essaie en ajoutant cette ligne à la fin du code du bouton Créer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docmd.GotoRecord acDataForm, Form.Name,AcNewrec

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    non rien ne se passe

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    voici l'image du formulaire. tu vois que le champ texte n'apparait plus.

  16. #16
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Dans ce cas dans le code du bouton Créer tu remplaces la ligne:
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Modifiable62.Visible=False
    NomArticle.Visible=True
    NomArticle.Setfocus
    il faudra voir aussi, le code du bouton Valider pour à nouveau rendre visible la liste déroulante et y faire apparaître le nouvel article créé et rendre non-visible le contrôle Nomarticle.

    pour le bouton valider il faudra ajouter ces lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Modifiable62.Requery
    Modifiable62.Value=NomArticle.Value
    Modifiable62.Visible=True
    Modifiable62.SetFocus
    NomArticle.Visible=False

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    maintenant quand je fais créer, la liste déroulante disparait bien et le bouton texte apparait. par contre je n'arrive pas sur des champs vierges mais sur le premier enregistrement.

  18. #18
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Alors ajoute la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docmd.GotoRecord ,,AcNewRec
    dans le code du bouton Créer.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    MAGNIFIQUE !!!

    ça marche parfaitement. en plus je trouve ça assez sympa l'alternance entre les 2 listes. ça doit être bien (et pratique) de connaître le VBA.

    MERCI BEAUCOUP, c'est très sympa de ta part d'avoir passé autant de temps.

    ps : je ne voudrais pas abuser mais si tu as encore un peu de temps, j'ai posté une autre discussion dans ce même forum à propos d'une question d'affichage de calcul.

    ENCORE MERCI et à bientôt.

    SALUT

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 105
    Points : 38
    Points
    38
    Par défaut
    bonjour,

    j'ai 2 nouveaux problèmes :

    1) quand je veux créer un nouvel article; si je me mets ma tva et que je veux mettre le nom du fournisseur, j'ai le message suivant ""vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table fournisseurs" . à l'inverse si je remplis le fournisseur, j'ai le même message mais pour la table tva "vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table tva"

    2) je ne peux pas modifier LE NOM d'un article déjà enregistré. je m'explique :
    je peux créer un nouvel article (sauf pb ci-dessus) et dans ce cas j'arrive sur mon contrôle texte. par contre si j'appelle un article par mon contrôle liste déroulante, je ne peux pas modifier le nom sauf si je le fais directement dans ma table mais je ne peux pas dans le formulaire (je peux par contre modifier tout le reste). Comment faire ?

    merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Les listes déroulantes et boutons radio
    Par piloupolo dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2008, 08h44
  2. Liste déroulante sans bouton Submit.
    Par RougeCerise dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/09/2008, 10h50
  3. liste déroulante sans bouton "valider"
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 18
    Dernier message: 10/04/2008, 10h44
  4. [MySQL] Rappel de valeurs de liste déroulante et boutons radio
    Par Equinoxe5 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/10/2007, 18h35
  5. [PHP-JS] Liste déroulante et bouton
    Par pymouse dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2006, 10h37

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