[Access VBA] Ajouter élément à zone liste

[Résolu/Fermé]
Signaler
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
-
Messages postés
1712
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
16 janvier 2020
-
Bonjour,

J'ai un problème dans mon formulaire. J'ai une zone de liste qui contient le résultat d'une requête SQL (donc la propriété de RowSourceType est Table/Query et RowSource est la requête SQL).

Je voudrais ajouter à la zone de liste du texte que l'utilisateur doit saisir dans une zone de texte et cliquer sur un bouton pour valider. Est-il possible d'ajouter le texte de la zone de texte à la zone de liste directement alors que la propritété de RowSourceType est une requête ?? ou dois-je donner à RowSourceType la valeur Value List ??

Merci d'avance.

9 réponses

Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
Je reprends mes explications depuis le début :

J'ai 3 tables :
GL(NoGL,NomGL)
GG(NoGG,NomGG,#NoGL)
Utilisateur(NoUtilisateur,NomUtilisateur,#NoGL)

Un GL peut contenir 1 ou plusieurs GG
Un GG peut contenir 1 ou plusieurs Utilisateurs

Dans mon formulaire, j'ai 3 zones de liste :
Une qui s'appelle zl_gl et qui affiche tous les GL de ma table GL.
Une qui s'appelle zl_gg et qui affiche tous les GG de ma table GG.
Une qui s'appelle zl_utilisateur et qui affiche tous les Utilisateurs de ma table Utilisateur.

Quand je clique sur un élément de ma zone de liste zl_gl, l'événement Après MAJ se déclenche et affiche dans la zone de liste zl_gg les éléments correspondants au GL sur lequel j'ai cliqué. Voici le code de l'événement :
Private Sub zl_gl_AfterUpdate()

Dim sql As String

sql = "SELECT GG.NomGG,GG.NoGG FROM GG WHERE GG.NoGL = Forms!Administration.zl_gl;"
Me.zl_gg.RowSourceType = "Table/Query"
Me.zl_gg.RowSource = sql 

End Sub


Quand je clique sur un élément de ma zone de liste zl_gg, l'événement Après MAJ se déclenche et affiche dans la zone de liste zl_utilisateur les utilisateurs correspondants au GG sur lequel j'ai cliqué. Voici le code de l'événement :

Private Sub zl_gg_AfterUpdate()

Dim sql As String
sql = "SELECT Utilisateur.NoUtilisateur,Utilisateur.NomUtilisateur FROM Utilisateur WHERE Utilisateur.NoGG=Forms!Administration.zl_gg;"
Me.zl_utilisateur.RowSourceType = "Table/Query"
Me.zl_utilisateur.RowSource = sql 

End Sub


Jusqu'à la, pas de problème. Voici ou je bloque :

J'ai ajouté une zone de texte nommée zone_texte_aj_utilisateur permettant d'ajouter un utilisateur ainsi qu'un bouton Valider qui exécute l'événement Sur clic. J'arrive à enregistrer un nouvel utilisateur dans la base de donnée avec un noGG définit à l'avance mais voilà ou je bloque :

Je n'arrive pas à récupérer le noGG de l'élément sur lequel j'ai cliqué dans ma zone de liste zl_gg pour l'insérer dans ma requête INSERT quand je clique sur le bouton Valider

Voici le code de l'événement Sur Clic de mon bouton but_commande_aj_enregistrement :
Dim contenu As String
Dim sql As String

contenu = zone_texte_aj_utilisateur.Value
Dim db As DAO.Database
Set db = CurrentDb

db.Execute "INSERT INTO Utilisateur (NomUtilisateur,NoGG) VALUES('" & contenu & "',Forms!Administration.zl_gg.NoGL);" 
db.Close

'Dans le code suivant, je remets à jour ma zone de liste avec les nouvelles valeurs
sql = "SELECT Utilisateur.NoUtilisateur,Utilisateur.NomUtilisateur FROM Utilisateur WHERE Utilisateur.NoGG=Forms!Administration.zl_gg;"
Me.zl_utilisateur.RowSourceType = "Table/Query"
Me.zl_utilisateur.RowSource = sql 


(j'ai mis en gras ou ça ne fonctionne pas).

Pouvez-vous m'aider ??
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
Voilà ça y est, j'ai enfin trouvé. Il suffisait d'utiliser la propriété Column(numColonne) qui permet de récupérer la colonne de l'élément de la zone de liste qui est séléctionnée...

Merci à tous de m'avoir orienté.

A plus tard.
Messages postés
1712
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
16 janvier 2020
536
Ca dépend. D'où viennent les données du SQL? Si c'est d'une table, que le contrôle de la zone de liste contient un champ de la table en question, c'est automatique ou presque.

En d'autres termes, à quoi sert la nouvelle valeur rentrée par l'utilisateur?

Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
Oui les données proviennent d'une table. Et la nouvelle valeur rentrée par l'utilisateur sera insérée dans la base de donnée. Je crois savoir où tu veux en venir : il faut que je crée la requête pour enregistrer la nouvelle valeur dans la base de donnée et réactualiser l'affichage avec la nouvelle valeur n'est-ce pas ? je vais regarder ça...

Merci.
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
C'est bon ça fonctionne maintenant :) . Par contre je voudrais dans ma requête Insert ajouter la clé étrangère d'un élément de la zone de liste sur laquelle j'ai cliqué précédement.

Peux-tu m'aider ?
Messages postés
1712
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
16 janvier 2020
536
Je pense que oui, je peux t'aider, mais sois plus précis. Nom des champs, des tables, nom du formulaire, ce qui se passe exactement etc.
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
Voilà mon problème précisément :

Dans mon formulaire j'ai 2 zones de liste qui correspondent à 2 tables (GG et Utilisateurs). Un GG correspond à 1 ou N utilisateurs. Donc quand je clique sur un élément de la liste GG j'ai dans utilisateurs la liste des utilisateurs correspondants aux GG (grâce à la clé étrangère).

Quand j'ajoute dans ma zone de texte un nouvel utilisateur, quand j'appuie sur le bouton valider la requête s'exécute et je remets à jour ma zone de liste des utlisateurs avec le nouvel utilisateur. Jusqu'à là pas de problème, sauf pour la clé étrangère... en effet, je dois la récupérer pour la mettre dans ma requête Insert.... je ne sais pas trop comment faire pour la récupérer....

En fait, je pensais accéder à l'élément sur lequel j'avais cliqué dans GG et récupérer sa clé primaire (donc clé étrangère pour utilisateur) et la mettre dans mon insert... Je ne sais pas si la technique est bonne... ni si cela est possible...

peux-tu m'aider ?? suis-je assez claire ? redemande-moi si il y a des choses que tu ne comprends pas.

Merci à toi.
Messages postés
1712
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
16 janvier 2020
536
Je pense que j'ai compris, mais tu n'es pas encore assez précise.

A priori ta zone de liste GG contient le NUMERO, qui sert de clé étrangère. Si oui, c'est simple:
Dans ta requête INSERT, tu peux utiliser Forms!NomDuFormulaire!ChoixGG

(C'est là que je dis que tu n'es pas assez précise, parce que tu ne me donnes pas le nom du formulaire ni celui des zones de liste. J'espère que tu sauras transcrire mes réponses dans ta base)
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
Bonjour,

D'accord je vois ce que tu veux dire (et je m'excuse de ne pas être assez précis). Le nom de mon forumulaire est Administration. Celui de ma zone de liste GG est zl_gg. Dans ma requête Insert qui me permet d'ajouter des utilisateurs dans ma zone de liste utilisateurs, j'ai ça :

db.Execute "INSERT INTO Utilisateur (NomUtilisateur,NoGG) VALUES('" & contenu & "', '" & Forms!Administration.zl_gg.NoGL & "');"

Je rencontre une erreur de syntaxte dans la requête (je pense que c'est dû au formulaire). Peux-tu me venir en aide ?
Messages postés
1712
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
16 janvier 2020
536
Ca pourrait venir de là...

Forms!Administration!zl_gg.NoG
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
Non ça ne marche pas :(... Tu as d'autres suggestions ?
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
Je ne sais pas si je m'exprime clairement mais je cherche à récupérer la clé étrangère de l'élément sur lequel j'ai cliqué dans la zone de liste GG pour l'enregistrer dans ma requête INSERT...

Une autre précision également : le code se déclenche après que je clique sur un bouton qui me permet d'ajouter un utilisateur.
Messages postés
1712
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
16 janvier 2020
536
Soit tu t'exprimes mal, soit je comprends mal.... Ca se pourrait que ça soit moi vu que tout à l'heure j'ai corrigé trop vite:

Forms!Administration!zl_gg

Inutile de mettre N°GG puisque c'est précisément ce que contient la liste.
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210
ça ne fonctionne toujours pas :-(

Sur quoi puis-je t'éclairer pour mon problème ?
>
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017

Il faut créer un critère en utilisant la DAO ;)
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
210 > Azertix
D'accord si tu le dis mais comment puis-je le faire s'il te plaît lol ?

Merci
Messages postés
1712
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
16 janvier 2020
536
Juste pour mon info, dans quelle colone de ta zone de liste était le N°GG, et quelle était la colonne liée????
Parce que si tu l'avais mis en tant que colonne liée, il suffisait d'utiliser directement le nom de la zone, sans donner de numéro de colonne, tu vois ce que je veux dire?