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

Résolu/Fermé
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 - 18 juin 2008 à 18:49
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 - 19 juin 2008 à 19:58
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

Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
19 juin 2008 à 18:06
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
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
19 juin 2008 à 19:20
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.
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
18 juin 2008 à 20:09
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?

0
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
18 juin 2008 à 20:31
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.
0
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
18 juin 2008 à 23:17
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 ?
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
18 juin 2008 à 23:46
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.
0
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
19 juin 2008 à 00:03
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
19 juin 2008 à 11:15
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)
0
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
19 juin 2008 à 13:35
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 ?
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
19 juin 2008 à 13:46
Ca pourrait venir de là...

Forms!Administration!zl_gg.NoG
0
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
19 juin 2008 à 14:25
Non ça ne marche pas :(... Tu as d'autres suggestions ?
0
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
19 juin 2008 à 14:31
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.
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
19 juin 2008 à 15:00
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.
0
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
19 juin 2008 à 15:23
ça ne fonctionne toujours pas :-(

Sur quoi puis-je t'éclairer pour mon problème ?
0
Azertix > Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017
19 juin 2008 à 15:32
Il faut créer un critère en utilisant la DAO ;)
0
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208 > Azertix
19 juin 2008 à 15:33
D'accord si tu le dis mais comment puis-je le faire s'il te plaît lol ?

Merci
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
19 juin 2008 à 19:58
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?
0