{"id":94,"date":"2025-06-14T16:04:58","date_gmt":"2025-06-14T16:04:58","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=94"},"modified":"2025-08-19T13:45:59","modified_gmt":"2025-08-19T13:45:59","slug":"access-repeter-des-donnees-dans-un-etat","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/14\/access-repeter-des-donnees-dans-un-etat\/","title":{"rendered":"ACCESS : R\u00e9p\u00e9ter des donn\u00e9es dans un \u00e9tat"},"content":{"rendered":"\n<p>La r\u00e9p\u00e9tition de donn\u00e9es dans un \u00e9tat peut \u00eatre une n\u00e9cessit\u00e9, c&rsquo;est souvent le cas pour l&rsquo;\u00e9dition d&rsquo;\u00e9tiquettes, de formulaires en plusieurs exemplaires ou tout simplement pour des codes&nbsp;barres.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Plusieurs solutions<\/h2>\n\n\n\n<p>La premi\u00e8re, qui fait plus office de bricolage consiste \u00e0 dupliquer&nbsp;les enregistrements \u00e0 la source. Cependant cela n\u00e9cessite d&rsquo;avoir une table source&nbsp;d\u00e9vou\u00e9e \u00e0&nbsp;l&rsquo;impression, de pr\u00e9parer l&rsquo;impression en amont et bien s\u00fbr de consacrer&nbsp;du temps&nbsp;SGBD et&nbsp;serveur pour cette t\u00e2che.<\/p>\n\n\n\n<p>La seconde, celle que nous allons mettre en pratique consiste \u00e0 utiliser le moteur d&rsquo;impression des \u00e9tats d&rsquo;ACCESS pour simuler cette duplication.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment proc\u00e9der ?<\/h2>\n\n\n\n<p>Admettons une table compos\u00e9 des 2 colonnes suivantes :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ValeurAImprimer&nbsp;<\/strong>qui contient les donn\u00e9es \u00e0 imprimer. (Texte 255)<\/li>\n\n\n\n<li><strong>FrequenceImpression <\/strong>un code qui d\u00e9termine la fr\u00e9quence d&rsquo;impression. (Texte 50)<\/li>\n<\/ul>\n\n\n\n<p>On commence par cr\u00e9er un \u00e9tat simplement bas\u00e9 sur cette table, on cache la zone de texte Fr\u00e9quenceImpression en mettant sa propri\u00e9t\u00e9 <strong>Visible <\/strong>\u00e0 Non.<\/p>\n\n\n\n<p>Le d\u00e9cors est plant\u00e9, il n&rsquo;y a plus qu&rsquo;\u00e0 ins\u00e9rer le code VBA correspondant.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le code<\/h2>\n\n\n\n<p>Le code exploite les \u00e9v\u00e8nements <strong>Sur Ouverture <\/strong>et <strong>Sur Formatage<\/strong>, une variable globale, une petite fonction qui peut \u00eatre facultative comme nous le verrons plus tard et utilise la propri\u00e9t\u00e9 <strong>NextRecord <\/strong>propre aux \u00e9tats ACCESS.<\/p>\n\n\n\n<p>La variable globale va permettre de compter les occurrences imprim\u00e9es.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Option Compare Database \nOption Explicit \n\nDim cpt As Long<\/code><\/pre>\n\n\n\n<p>Lors de l&rsquo;ouverture de l&rsquo;\u00e9tat la variable est initialis\u00e9e \u00e0 1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Private Sub Report_Open(Cancel As Integer) \n   cpt = 1 \nEnd Sub<\/code><\/pre>\n\n\n\n<p>A chaque pr\u00e9paration de l&rsquo;impression de la zone d\u00e9tail on analyse ce qui doit \u00eatre effectu\u00e9.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Private Sub D\u00e9tail_Format(Cancel As Integer, FormatCount As Integer) \n   cpt = cpt + 1 \n   If cpt &amp;lt;= nbrRepeat(Me.FrequenceImpression) Then \n      Me.NextRecord = False \n   Else \n      cpt = 1 \n   End If \nEnd Sub<\/pre>\n\n\n\n<p>Si le compteur (cpt) n&rsquo;a pas atteint le nombre de r\u00e9p\u00e9tition souhait\u00e9 on r\u00e9imprime le m\u00eame enregistrement.<br>Ce tour de force est effectu\u00e9 gr\u00e2ce \u00e0 la propri\u00e9t\u00e9 <strong>NextRecord <\/strong>qui, si elle est <strong>False<\/strong>, ne charge pas l&rsquo;enregistrement suivant.<\/p>\n\n\n\n<p>Le nombre de r\u00e9p\u00e9tition est d\u00e9termin\u00e9 par la valeur contenue dans <strong>FrequenceImpression<\/strong>.<br>Dans cet exemple on veut imprimer suivant une p\u00e9riodicit\u00e9 une quantit\u00e9 d\u00e9termin\u00e9e d&rsquo;informations.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Function nbrRepeat(period As String) \n    Select Case period \n       Case \"trimestriel\" \n          nbrRepeat = 3 \n       Case \"annuel\" \n          nbrRepeat = 1 \n       Case \"semestriel\" \n          nbrRepeat = 2 \n    End Select \nEnd Function<\/pre>\n\n\n\n<p>Par exemple si <strong>FrequenceImpression<\/strong> contient \u00ab\u00a0trimestriel\u00a0\u00bb l&rsquo;enregistrement sera imprim\u00e9 3 fois.<\/p>\n\n\n\n<p>Notez que cette derni\u00e8re fonction peut \u00eatre param\u00e9tr\u00e9e \u00e0 votre guise, ne pas exister du tout si vous indiquez directement le nombre dans la colonne <strong>FrequenceImpression <\/strong>ou si le nombre d&rsquo;impression est fixe.<\/p>\n\n\n\n<p>Bonne utilisation !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La r\u00e9p\u00e9tition de donn\u00e9es dans un \u00e9tat peut \u00eatre une n\u00e9cessit\u00e9, c&rsquo;est souvent le cas pour l&rsquo;\u00e9dition d&rsquo;\u00e9tiquettes, de formulaires en plusieurs exemplaires ou tout simplement pour des codes&nbsp;barres. Plusieurs solutions La premi\u00e8re, qui fait plus office de bricolage consiste &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/14\/access-repeter-des-donnees-dans-un-etat\/\">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-94","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\/94","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=94"}],"version-history":[{"count":2,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/94\/revisions"}],"predecessor-version":[{"id":433,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/94\/revisions\/433"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=94"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=94"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=94"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}