Récupérer la valeur d'une liste déroulante dans une requête SQL
Random Dude
Messages postés
24
Date d'inscription
Statut
Membre
Dernière intervention
-
blux Messages postés 27147 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27147 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
Je viens ici solliciter votre aide pour une question qui ne parait pas très difficile en apparence mais qui s'avère être assez technique.
Le titre est assez explicite mais voilà mon problème : je n'arrive pas à inclure la valeur sélectionnée d'une liste déroulante de mon formulaire, dans une requête SQL que je lance via du code VBA.
Le code permettant de récupérer cette valeur est le suivant : Me.liste.Column(0)
or, si inclus dans une requête du style :
ça ne fonctionne pas, Access me sort une Table vide, alors que le mois sélectionné correspond à plusieurs enregistrements dans ma Table.
Avec le code suivant :
( ou même avec Me.liste.Value )
Access me sort une fenêtre et me demande d'entrer une valeur pour " Me.liste.valeur" et si je tape n'importe quel mois, il me sort ce que je souhaite, c'est à dire les lignes de ma Table qui correspondent au mois tapé à la main
Même résultat avec le code :
à la différence que le message sorti par Access contient maintenant la mention " Février" ou celle du mois que j'ai sélectionné.
J'ai vérifié en récupérant dans un messageBox la valeur de Me.liste.Column(0) et il contient bien le mois sélectionné.
Je précise également 2 choses :
1) Mon code est inclus dans un If qui vérifie qu'on a bien sélectionné un mois
2) Le code que j'utilise pour sortir une Table qui contient le résultat de ma requête fonctionne bien sur une autre base de données et même sur celle-ci avec tout autre code ne contenant pas de liste déroulante.
Afin d'y voir plus clair, je vous fournis le code entier de l'événement clic sur mon bouton censé ce sortir ma requête :
Comme vous le voyez j'ai 3 SQL, dont 2 sous commentaires, c'était pour les essais.
Autre petite indication, si je n'ai rien sélectionné, le compilo me met une erreur " erreur de syntaxe (opérateur absent) dans mois = " donc il ne rentre pas dans le
Voilà, j'ai pas mal cherché pour cette question, et suis arrivé dans une impasse .... j'ai même essayé ce que j'ai vu sur un message contenant une question similaire :
" Bonjour
Oui effectivement les requêtes avec le Qbe n'ont pas l'air de prendre la colonne en compte. Il prend en fait la colonne liée.
Il faut donc contourner le problème.
- Dans le formulaire avoir une zone de texte masquée qui aura comme source la colonne de la ListBox et qui sera mise à jour sur l'évènement "Après mise à jour" de la ListeBox. La requête aura donc la Zone de texte en critère.
- Ou alors créer une fonction qui te renvoie la valeur de ta colonne et appeler cette fonction dans ta requête (plus élégant). "
Mais sans résultat ...la zone de texte contient bien ma valeur, mais même résultat qu'avant dans la requête ...
Voilà je pense vous avoir tout expliqué, merci d'avoir pris le temps de me lire, et je suis preneur de n'importe quelle solution à ce problème :P
Merci ;)
Je viens ici solliciter votre aide pour une question qui ne parait pas très difficile en apparence mais qui s'avère être assez technique.
Le titre est assez explicite mais voilà mon problème : je n'arrive pas à inclure la valeur sélectionnée d'une liste déroulante de mon formulaire, dans une requête SQL que je lance via du code VBA.
Le code permettant de récupérer cette valeur est le suivant : Me.liste.Column(0)
or, si inclus dans une requête du style :
SQL = " SELECT * FROM Tb_congés WHERE mois = ' " & Me.liste.Column(0) & "'"
ça ne fonctionne pas, Access me sort une Table vide, alors que le mois sélectionné correspond à plusieurs enregistrements dans ma Table.
Avec le code suivant :
SQL = " SELECT * FROM Tb_congés WHERE mois = liste.Value "
( ou même avec Me.liste.Value )
Access me sort une fenêtre et me demande d'entrer une valeur pour " Me.liste.valeur" et si je tape n'importe quel mois, il me sort ce que je souhaite, c'est à dire les lignes de ma Table qui correspondent au mois tapé à la main
Même résultat avec le code :
SQL = " SELECT * FROM Tb_congés WHERE mois =" & Me.mois_etat.Column(0)
à la différence que le message sorti par Access contient maintenant la mention " Février" ou celle du mois que j'ai sélectionné.
J'ai vérifié en récupérant dans un messageBox la valeur de Me.liste.Column(0) et il contient bien le mois sélectionné.
Je précise également 2 choses :
1) Mon code est inclus dans un If qui vérifie qu'on a bien sélectionné un mois
2) Le code que j'utilise pour sortir une Table qui contient le résultat de ma requête fonctionne bien sur une autre base de données et même sur celle-ci avec tout autre code ne contenant pas de liste déroulante.
Afin d'y voir plus clair, je vous fournis le code entier de l'événement clic sur mon bouton censé ce sortir ma requête :
Private Sub bouton_Etat_Click() Dim SQL As String Dim dbs As Database Dim qdf As QueryDef Set dbs = CurrentDb() If Me.liste.Column(0) = "" Then MsgBox " Choississez un mois " Else '--SQL = " SELECT * FROM Tb_congés WHERE mois = ' " & Me.liste.Column(0) & "'" SQL = " SELECT * FROM Tb_congés WHERE mois =" & Me.liste.Column(0) '--SQL = " SELECT * FROM Tb_congés WHERE mois = Me.liste.Value " With dbs Set qdf = .CreateQueryDef("congés_du_mois", SQL) DoCmd.OpenQuery "congés_du_mois" .QueryDefs.Delete "congés_du_mois" End With dbs.Close qdf.Close End If End Sub
Comme vous le voyez j'ai 3 SQL, dont 2 sous commentaires, c'était pour les essais.
Autre petite indication, si je n'ai rien sélectionné, le compilo me met une erreur " erreur de syntaxe (opérateur absent) dans mois = " donc il ne rentre pas dans le
If Me.liste.Column(0) = "" Then
Voilà, j'ai pas mal cherché pour cette question, et suis arrivé dans une impasse .... j'ai même essayé ce que j'ai vu sur un message contenant une question similaire :
" Bonjour
Oui effectivement les requêtes avec le Qbe n'ont pas l'air de prendre la colonne en compte. Il prend en fait la colonne liée.
Il faut donc contourner le problème.
- Dans le formulaire avoir une zone de texte masquée qui aura comme source la colonne de la ListBox et qui sera mise à jour sur l'évènement "Après mise à jour" de la ListeBox. La requête aura donc la Zone de texte en critère.
- Ou alors créer une fonction qui te renvoie la valeur de ta colonne et appeler cette fonction dans ta requête (plus élégant). "
Mais sans résultat ...la zone de texte contient bien ma valeur, mais même résultat qu'avant dans la requête ...
Voilà je pense vous avoir tout expliqué, merci d'avoir pris le temps de me lire, et je suis preneur de n'importe quelle solution à ce problème :P
Merci ;)
A voir également:
- Récupérer la valeur d'une liste déroulante dans une requête SQL
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Recuperer message whatsapp supprimé - Guide
- Comment recuperer une video sur youtube - Guide
- Liste déroulante google sheet - Accueil - Guide bureautique
4 réponses
Bonjour,
Je suis confrontée au même problème que Random Dude.
Je veux faire la même chose que lui, je me suis donc inspirée de son code.
Cependant, j'obtiens un Run time error 3270.. Apparemment cela viendrait du problème que mes champs dont j'ai besoin dans ma requête soient en type nombre et pas texte.
comment puis-je modifier ce code pour faire en sorte que la requête fonctionne?
Mon code :
Quand je clique sur le bouton que j'ai créé pour générer le formulaire j'obtiens donc une fenetre avec ce run time error, et quand je clique sur debug, la ligne surligné est :
Merci d'avance pour votre aide :)
Je suis confrontée au même problème que Random Dude.
Je veux faire la même chose que lui, je me suis donc inspirée de son code.
Cependant, j'obtiens un Run time error 3270.. Apparemment cela viendrait du problème que mes champs dont j'ai besoin dans ma requête soient en type nombre et pas texte.
comment puis-je modifier ce code pour faire en sorte que la requête fonctionne?
Mon code :
Private Sub CreateProjectConsolidation_Click() Dim SQL As String Dim dbs As Database Dim qdf As QueryDef Set dbs = CurrentDb() SQL = " SELECT * FROM T_Weeklys WHERE ProjectName = '" & Me.ProjectName.Value & "'" With dbs Set qdf = .CreateQueryDef("Project_Consolidation", SQL) DoCmd.OpenQuery "Project_Consolidation" .QueryDefs.Delete "Project_Consolidation" End With dbs.Close qdf.Close End Sub
Quand je clique sur le bouton que j'ai créé pour générer le formulaire j'obtiens donc une fenetre avec ce run time error, et quand je clique sur debug, la ligne surligné est :
DoCmd.OpenQuery "Project_Consolidation"
Merci d'avance pour votre aide :)
Bonjour,
le champ "mois" est en type texte ?
Si oui
SQL = " SELECT * FROM Tb_congés WHERE mois = '" & Me.liste.value & "'"
ATTENTION A l'ESPACE entre le ' et le "
Cordialement
le champ "mois" est en type texte ?
Si oui
SQL = " SELECT * FROM Tb_congés WHERE mois = '" & Me.liste.value & "'"
ATTENTION A l'ESPACE entre le ' et le "
Cordialement
Un MsgBox SQL avant le .openquery peut permettre d'y voir plus clair.
Pourrais tu m'expliquer ton éventuelle solution avec le MsgBox? Qu'est ce que à me permettrait de faire?
Valeur que l'on peut avoir en faisant un msgbox Me.Project.Value, ça doit afficher un résultat dont on pourra regarder s'il est cohérent avec la requête...
Pour plus d'infos, voir ici.
Il te suffit donc de paramétrer correctement ta zone de liste et ça devrait aller...