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 :

Modifier une liste dont l'origine source est une Table/Requête [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut Modifier une liste dont l'origine source est une Table/Requête
    RererereBonjour User ou toute autre personne

    Je me construit une BdD qui présente un formulaire dictionnaire d'anglais.
    La table s'appelle Anglais, elle contient les champs Mot et Définition.
    Le formulaire s'appelle SousForm et contient 2 zones de liste délirante nommées respectivement ZoneDéroulante et Liste2 et une zone de texte, Texte14, dont la source est le champs Définition de la table Anglais.
    ZoneDéroulante comprends les lettres A à Z et Liste2 contient les mots qui commence par la lettre sélectionnée dans ZoneDéroulante via ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ListeDéroulante_Click()
    Me.Texte14 = ""
    Me.Liste2 = ""
    Me.Liste2.RowSource = " Select Mot, Définition From Anglais Where Mot like '" & Me.ListeDéroulante & "*'"
    Me.Refresh
    End Sub
    J'aimerais savoir s'il y a un moyen d'ajouter un nouveau Mot (et Définition) dans Liste2 (et Texte14)? Car l' "Origine source" des données de Liste2 est définie sur "Table/Requête", du coup ça n'enregistre pas les modifications que je peux faire.

    EDIT: j'essaye avec un bouton "Nouvel enregistrement" mais Access n'accepte pas.

    Merci par avance

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 386
    Points : 19 809
    Points
    19 809
    Billets dans le blog
    66
    Par défaut
    ReBonjour,

    Le formulaire contenant les listes va te permettre d'afficher une sélection de mots dans une liste, après il te faut prévoir un 2ème formulaire pour ajouter un mot et une définition que tu ouvres sur le clic d'1 bouton situé dans le 1er formulaire.

    Tu peux afficher le 2ème formulaire en mode feuille de données pour faciliter la saisie d'1 nouveau mot à la fin.

    Après une fois le nouveau mot saisi tu rafraîchis ta liste2 sur fermeture du formulaire 2 avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!SousForm!Liste2.requery
    Ici je suppose que le formulaire contenant la liste2 se nomme "sousForm".

    A+

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Re User,

    Je te prie de m'excuser de te redemander encore une fois qlqchose mais je me tire les cheveux depuis ta dernière réponse (pourtant depuis j'ai pu lire un paquet d'articles...moi qui ne connaissait rien à Access il y a encore 2 semaines^^).

    Voici mon code pour le SOUS-formulaire qui me permet d'ajouter des nouvelles définitions à la table Anglais:
    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
    Private Sub Form_Load()
     
    'Empêche les demande de confirmation de s'afficher
    DoCmd.SetWarnings False
     
    DoCmd.RunSQL "INSERT INTO Anglais (Mot) VALUES ('Ajouter ou modifier');"
     
    Me.Mot = "Ajouter ou modifier"
    Me.Définition = ""
     
    DoCmd.RunSQL "INSERT INTO Anglais (Mot) VALUES (Mot);"
     
    End Sub
     
    Private Sub Commande5_Click()
     
    'Efface le contenu de la table
    DoCmd.RunSQL "Delete Anglais.Mot, Anglais.Définition FROM Anglais WHERE (((Anglais.Mot)= 'Ajouter ou modifier'));"
     
    'mise à jour de la zone de liste déroulante Liste2:
    Forms!AnglaisSousFormulaireIndépendant!Liste2.Requery
     
    DoCmd.Close
     
    'Retablit les confirmations
    DoCmd.SetWarnings True
     
    End Sub
    Mon problème vient du fait que je n'arrive pas à ajouter plus de 2 enregistrements, le troisième remplace à chaque fois le 2nd.
    Où ais je commis une erreur/des erreurs?

    EDIT: je suis obligé de passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO Anglais (Mot) VALUES ('Ajouter ou modifier');"
    car sinon le sous-formulaire écrase la valeur présentement affichée dans Liste2 du formulaire AnglaisSousFormulaireIndépendant.

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 386
    Points : 19 809
    Points
    19 809
    Billets dans le blog
    66
    Par défaut
    Désolé, mais je ne saisis pas trop ce que tu veux faire :

    Pour ajouter un mot tu n'as pas besoin de sql, il te suffit d'utiliser par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.GoToRecord , , acNewRec
    Sur un bouton de commande situé sur le formulaire de saisie lié à la table "Anglais" et contenant les zones de texte "Mot" et "définition" eux même liés aux champs du même nom (propriété Source Contrôle).

    tu saisie les données dans ces zones de texte et le tour ai joué,

    il ne te reste plus qu'à mettre à jour la liste de l'autre form par 1 requery ...

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Génialissime! C'est exactement ce que je cherchais à faire! En plus ça m'écrit automatiquement "New" dans la zone Mot et Définition: c'est juste parfait

    Merci merci merci User

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    C'est encore moi...décidément

    Plus aucun problème pour ajouter un nouvel enregistrement au dictionnaire, effectivement, mais par contre je n'arrive pas à modifier les enregistrements déjà existants.
    J'ai créé un sous-formulaire qui s'ouvre sur clic d'un bouton "Modifier MotOuDéfinition" et dont le code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Load()
    Me.Mot = Forms![LeToutEnUn]![AnglaisSousFormulaireIndépendant]![Liste2]
    Me.Définition = Forms![LeToutEnUn]![AnglaisSousFormulaireIndépendant]![Texte14]
    End Sub
     
    Private Sub Commande5_Click()
    DoCmd.RunCommand acCmdSaveRecord
    Forms!LeToutEnUn!AnglaisSousFormulaireIndépendant!Liste2.Requery
    Forms!LeToutEnUn!AnglaisSousFormulaireIndépendant!Texte14.Requery
    DoCmd.Close
    End Sub
    Pour info, mon sous-formulaire "Modifier MotOuEnregistrement" est en fait un sous-sous-formulaire. Le formulaire principal est "LeToutEnUn", ensuite il y a le formulaire "AnglaisSousFormulaireIndépendant" qui contient les zones de liste (qui permettent la sélection de la première lettre et des mots du dico) et 2 boutons ("enregistrer", qui marche bien thx to you ; et "modifier" qui me pose problème). C'est donc le bouton "Modifier" qui permet d'ouvrir le sous-sous-formulaire "Modifier MotOuEnregistrement" qui contient 2 champs texte: "Mot" et "Définition".
    J'ai défini la source de ce ss-ss-form sur ma table "Anglais", la zone de texte "Mot" sur le champ Mot de la table Anglais (idem avec le champ Définition pour la zone Définition).

    J'espère que c'est suffisamment clair?
    Mon problème est que lorsque je modifie un enregistrement et que je clique sur le bouton "Commande5" du ss-ss-form, j'ai une erreur: risque de doublon.

    Je ne comprends pas pourquoi, car dans mes test je ne modifie même pas la clé primaire (=champ "Mot"), je modifie seulement la Définition. En fait, c'est comme ci Access me réenregistrait le même mot avec une définition différente au lieu de mettre à jour le couple Mot-Définition déjà existant.

    Merci d'avance!

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Quelqu'un a t-il une idée? ...User??

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/09/2014, 22h58
  2. Réponses: 2
    Dernier message: 25/04/2007, 12h11
  3. VB6 Connection à une base de données dont la source est une adresse url
    Par yangoal25 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/11/2006, 18h47
  4. la source d'une liste modifiable
    Par polianita dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2006, 08h35
  5. Réponses: 5
    Dernier message: 10/05/2006, 21h39

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