{"id":83,"date":"2025-06-13T22:26:05","date_gmt":"2025-06-13T22:26:05","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=83"},"modified":"2025-06-15T21:37:17","modified_gmt":"2025-06-15T21:37:17","slug":"erreur-3061-trop-peu-de-parametres-1-requis","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/erreur-3061-trop-peu-de-parametres-1-requis\/","title":{"rendered":"ACCESS : Erreur 3061, Trop peu de param\u00e8tres 1 requis"},"content":{"rendered":"\n<p>Ce message est assez commun lorsque vous manipulez des requ\u00eates dans VBA. Nous allons voir pourquoi cela s&rsquo;affiche et quels sont les solutions \u00e0 y apporter. Dans l&rsquo;exemple suivant tout est correct , aucune erreur n&rsquo;est d\u00e9clench\u00e9e.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sub getName() \nDim db As dao.Database \nDim rst As dao.Recordset \n\nSet db = CurrentDb \n\nSet rst = db.OpenRecordset(\"SELECT &#91;Nom] FROM \" &amp; _ \"tCONTACT WHERE Nom='Martin';\", dbOpenSnapshot) \nMsgBox \"Il s\u2019appelle \" &amp; rst.Fields(\"Nom\").Value \n\nrst.Close\ndb.close\nSet rst = Nothing \nSet db = Nothing \nEnd Sub<\/code><\/pre>\n\n\n\n<p>Lorsqu&rsquo;on utilise cette requ\u00eate avec un param\u00e8tre issue d&rsquo;un formulaire comme ci-dessous :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sub getName()\n\n ... \n\nSet rst = db.OpenRecordset(\"SELECT &#91;Nom] FROM \" &amp; _ \"tCONTACT WHERE Nom=forms.fChercher.txt_nom;\", dbOpenSnapshot) \nMsgBox \"Il s\u2019appelle \" &amp; rst.Fields(\"Nom\").Value \n\n... \nEnd Sub<\/code><\/pre>\n\n\n\n<p>Voici le message <strong>Erreur 3061 Trop peu de param\u00e8tres&#8230;<\/strong> qui appara\u00eet :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"392\" height=\"226\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/erreur3061.jpg\" alt=\"\" class=\"wp-image-84\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/erreur3061.jpg 392w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/erreur3061-300x173.jpg 300w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><\/figure>\n\n\n\n<p>La seule solution a ce probl\u00e8me est&nbsp;que les param\u00e8tres de l&rsquo;interface soit interpr\u00e9t\u00e9s non plus par le moteur de base de donn\u00e9es comme avec ce code mais directement par VBA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1\u00e8re Solution : <\/h2>\n\n\n\n<p>La partie IHM est directement interpr\u00e9t\u00e9 par VBA qui n&rsquo;envoie que la valeur au moteur de base de donn\u00e9es.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set rst = db.OpenRecordset(\"SELECT &#91;Nom] FROM tCONTACT \" &amp; _ \n       \"WHERE Nom=\"\"\" &amp; Forms.fChercher.txt_nom &amp; \"\"\";\", dbOpenSnapshot)<\/code><\/pre>\n\n\n\n<p>C&rsquo;est ceci qui est envoy\u00e9 au moteur de base de donn\u00e9es :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT &#91;Nom] FROM tCONTACT WHERE Nom=\"Martin\";<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2\u00e8me Solution :<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Set rst = db.OpenRecordset(\"SELECT &#91;Nom] FROM tCONTACT \" &amp; _ \n          \"WHERE Nom=Eval('Forms.fChercher.txt_nom');\", dbOpenSnapshot)<\/code><\/pre>\n\n\n\n<p>Ici c&rsquo;est un peu diff\u00e9rent, c&rsquo;est la fonction VBA Eval() qui fait la liaison entre le moteur de base de donn\u00e9es et l&rsquo;interface (formulaire). Eval() r\u00e9sout l&rsquo;expression Forms. et renvoi sa valeur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3\u00e8me Solution :<\/h2>\n\n\n\n<p>Celle-ci est un peu plus complexe car elle n\u00e9cessite l&rsquo;\u00e9criture d&rsquo;une fonction utilisateur.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set rst = db.OpenRecordset(\"SELECT &#91;Nom] FROM tCONTACT \" &amp; _ \n         \"WHERE Nom=fDonneNom();\", dbOpenSnapshot)<\/code><\/pre>\n\n\n\n<p>Dans un<strong> module standard<\/strong> \u00e9crivez cette fonction :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Public Function fDonneNom() As Variant\n    fDonneNom = Forms.fChercher.txt_nom \nEnd Function<\/code><\/pre>\n\n\n\n<p>Ce cas est plut\u00f4t \u00e0 envisager lorsque la valeur renvoy\u00e9e est le r\u00e9sultat d&rsquo;une op\u00e9ration complexe comme un calcul, une concat\u00e9nation&#8230;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Public Function fDonneNom() As String \n    fDonneNom = Forms.fChercher.txt_nom \nEnd Function<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4\u00e8me Solution<\/h2>\n\n\n\n<p>Cette solution est \u00e0 envisager surtout si vous avez de nombreux param\u00e8tres \u00e0 passer&nbsp;issue de l&rsquo;IHM&nbsp;ou qu&rsquo;ils sont h\u00e9t\u00e9rog\u00e8nes ; issue de plusieurs sources (VBA, r\u00e9sultat de requ\u00eate, IHM&#8230;).<\/p>\n\n\n\n<p>Commencer par modifier la requ\u00eate en utilisant la clause <strong>PARAMETERS<\/strong>. Vous pouvez utiliser le <strong>QBE<\/strong> (Query By Exemple), autrement dit, l&rsquo;\u00e9diteur de requ\u00eates de Microsoft Access, en <strong>Mode Cr\u00e9ation&nbsp;<\/strong>pour cr\u00e9er cette clause et l&rsquo;alimenter.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"621\" height=\"162\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/parameters.jpg\" alt=\"\" class=\"wp-image-85\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/parameters.jpg 621w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/parameters-300x78.jpg 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/parameters-500x130.jpg 500w\" sizes=\"auto, (max-width: 621px) 100vw, 621px\" \/><\/figure>\n\n\n\n<p>Remplissez le tableau qui appara\u00eet avec un param\u00e8tre par ligne et r\u00e9glez son type (texte, date, entier&#8230;). Une fois ceci effectu\u00e9 placez vos param\u00e8tres sur la ligne de crit\u00e8res. Si vous basculer en <strong>mode SQL<\/strong>, voici ce que vous pourrez observer :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PARAMETERS &#91;txt_nom] Text ( 255 ), &#91;NumSociete] Long; \n\nSELECT tContact.Nom, tContact.Prenom, tContact.IdSociete FROM tContact WHERE (((tContact.Nom) Like &#91;txt_nom]) AND ((tContact.IdSociete)=&#91;NumSociete]));<\/code><\/pre>\n\n\n\n<p>&nbsp;La clause PARAMETERS est ses arguments sont termin\u00e9s par un point-virgule. Cot\u00e9 VBA voici comment utiliser les PARAMETERS de cette requ\u00eate.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sub getName() \nDim db As DAO.Database \nDim qry As DAO.QueryDef \nDim rst As DAO.Recordset \nDim sql As String \n\nSet db = CurrentDb 'composition de la requete SQL \nsql = \"PARAMETERS &#91;txt_nom] Text ( 255 ), &#91;NumSociete] Long; \" \nsql = sql &amp; \" SELECT tContact.Nom, tContact.Prenom, \" \nsql = sql &amp; \" tContact.IdSociete\" \nsql = sql &amp; \" FROM tContact\" \nsql = sql &amp; \" WHERE tContact.Nom Like &#91;txt_nom] \" \nsql = sql &amp; \" AND tContact.IdSociete=&#91;NumSociete];\" \n\n'creation de la requete \nSet qry = db.CreateQueryDef(\"rqtemporaire\", sql) \n'affectation des valeurs aux parametres \nqry.Parameters(\"txt_nom\") = Forms.FChercher.txt_nom \nqry.Parameters(\"NumSociete\") = Forms.FChercher.numSociete \n\n'composition du recordset \nSet rst = qry.OpenRecordset(dbOpenSnapshot) \n'Resultat \nMsgBox \"Il s\u2019appelle \" &amp; rst.Fields(\"Nom\").Value \nrst.Close qry.Close \nSet qry = Nothing \nSet rst = Nothing \nSet db = Nothing \n\nEnd Sub\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Comme vous le voyez il faut passer par un objet <strong>Query<\/strong> pour acc\u00e9der aux <strong>Parameters<\/strong>, puis faire un <strong>recordset<\/strong> \u00e0 partir de ce dernier. C&rsquo;est plus complexe mais lorsque vous avez de nombreuses valeurs \u00e0 passer \u00e0 la requ\u00eate cela fait gagner du temps.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce message est assez commun lorsque vous manipulez des requ\u00eates dans VBA. Nous allons voir pourquoi cela s&rsquo;affiche et quels sont les solutions \u00e0 y apporter. Dans l&rsquo;exemple suivant tout est correct , aucune erreur n&rsquo;est d\u00e9clench\u00e9e. Lorsqu&rsquo;on utilise cette &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/erreur-3061-trop-peu-de-parametres-1-requis\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,6],"tags":[11,7],"class_list":["post-83","post","type-post","status-publish","format-standard","hentry","category-access","category-code-vba","tag-access","tag-code-vba"],"_links":{"self":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/83","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/comments?post=83"}],"version-history":[{"count":4,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/83\/revisions"}],"predecessor-version":[{"id":114,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/83\/revisions\/114"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=83"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=83"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=83"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}