{"id":255,"date":"2025-08-15T17:38:09","date_gmt":"2025-08-15T17:38:09","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=255"},"modified":"2025-08-15T17:38:09","modified_gmt":"2025-08-15T17:38:09","slug":"vba-classe-et-gain-de-temps-2","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/08\/15\/vba-classe-et-gain-de-temps-2\/","title":{"rendered":"VBA : Classe et gain de temps"},"content":{"rendered":"\n<p>Le concept de classe en VBA\u00a0a quelques lacunes mais\u00a0il ne doit pas \u00eatre n\u00e9glig\u00e9s pour autant.<\/p>\n\n\n\n<p>En effet,\u00a0gr\u00e2ce \u00e0 elles\u00a0on peut\u00a0gagner un temps pr\u00e9cieux. Voici un petit exemple fonctionnel d\u2019une classe qui g\u00e8re les \u00e9v\u00e8nements\u00a0<strong>DblClick<\/strong>\u00a0et\u00a0<strong>NotInList\u00a0<\/strong>d\u2019une zone de liste d\u00e9roulante. Le\u00a0<strong>DblClick<\/strong>\u00a0permet d\u2019ouvrir un formulaire de saisie\/\u00e9dition avec l\u2019item de la liste, tandis que\u00a0<strong>NotInList\u00a0<\/strong>permet de saisir l\u2019item.<\/p>\n\n\n\n<p><strong>Cr\u00e9er le module de classe<\/strong><\/p>\n\n\n\n<p>Dans VBE faites<strong> Insertion\/Module de classe<\/strong>. En bas \u00e0 gauche dans la fen\u00eatre des propri\u00e9t\u00e9s vous devez renseigner le nom de l\u2019instance : <strong>cComboBox<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"252\" height=\"159\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/07\/classe1.png\" alt=\"\" class=\"wp-image-299\"\/><\/figure>\n<\/div>\n\n\n<p>Saisissir<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Saisissez la premi\u00e8re ligne de code suivante imm\u00e9diatement apr\u00e8s les lignes Option.<\/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 WithEvents LmCombo          As Access.ComboBox<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><code data-enlighter-language=\"visualbasic\" class=\"EnlighterJSRAW\"><\/code><\/code><\/pre>\n\n\n\n<p><strong>WithEvents<\/strong>&nbsp;indique que cet objet pourra lever des \u00e9v\u00e8nements.<\/p>\n\n\n\n<p><strong>Access.ComboBox<\/strong>&nbsp;est le type Liste d\u00e9roulante.<\/p>\n\n\n\n<p>Ensuite nous aurons besoin de&nbsp;variables de type String pour stocker diff\u00e9rents \u00e9l\u00e9ments n\u00e9cessaires \u00e0 l\u2019ouverture du formulaire.<\/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=\"\">'nom du formulaire qui est appel\u00e9 lors du notinlist\nPrivate strFormNameLie     As String       \n   'nom du champ id de la table recevant la nouvelle valeur\nPrivate strIdFieldName     As String       \n   'nom du champ recevant la valeur saisie dans la combo \nPrivate strControlName     As String       \n   'nom de la table recevant la nouvelle valeur\nPrivate strTableFormLie    As String<\/pre>\n\n\n\n<p>En suivant nous \u00e9crivons deux m\u00e9thodes habituelles dans les classes.<\/p>\n\n\n\n<p>La&nbsp;<strong>Class_Initialize<\/strong>&nbsp;est ex\u00e9cut\u00e9e au d\u00e9marrage de la&nbsp;classe. Elle ne contient rien dans cet exemple mais si vous devez initialiser une variable ou une propri\u00e9t\u00e9 c&rsquo;est ici que vous devrez le faire.<\/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 Class_Initialize()\n' Initialise\n\nEnd Sub<\/pre>\n\n\n\n<p>Tandis que&nbsp;<strong>Class_Terminate<\/strong>&nbsp;est ex\u00e9cut\u00e9 lorsqu\u2019on lib\u00e8re la classe, qu\u2019on la d\u00e9charge. Celle-ci est importante car c\u2019est l\u00e0 qu\u2019on d\u00e9charge \u00e9galement toutes nos variables.<\/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 Class_Terminate()\n' lib\u00e8re les variables\n    On Error Resume Next\n    Set LmCombo = Nothing\nEnd Sub<\/pre>\n\n\n\n<p>Pour charger la combo depuis le formulaire il faut utiliser un \u00ab\u00a0Setteur\u00a0\u00bb. Le voici !<\/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=\"\">Public Property Set objComboBox(objCombo As Access.ComboBox)\n    Set LmCombo = objCombo\n    LmCombo.OnDblClick = \"[Event Procedure]\"\n    LmCombo.OnNotInList = \"[Event Procedure]\"\nEnd Property<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<p>On voit qu\u2019on lui passe un objet&nbsp;<strong>combobox<\/strong>&nbsp;et qu\u2019il est charg\u00e9 dans la variable d\u00e9finie pr\u00e9c\u00e9demment. Les 2 lignes suivantes permettent d\u2019activer l\u2019\u00e9coute des \u00e9v\u00e8nements dont nous avons besoin :&nbsp;<strong>DblClick<\/strong>&nbsp;et&nbsp;<strong>NotInList<\/strong>.<\/p>\n\n\n\n<p>Les autres variables ou propri\u00e9t\u00e9s de la classe doivent \u00e9galement \u00eatre valoris\u00e9es toujours \u00e0 l\u2019aide de Setteurs.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Public Property Let frmNameLie(strNomFormulaireLie As String) 'le formulaire de saisie modif \u00e0 ouvrir\n    strFormNameLie = strNomFormulaireLie\nEnd Property\n\nPublic Property Let idFieldName(strNomIdFieldFormulaireLie As String) 'le nom de la colonne id de la source du formulaire\n    strIdFieldName = strNomIdFieldFormulaireLie\nEnd Property\n\nPublic Property Let controlNameLie(strNomControleFormulaireLie As String) 'le nom du controle texte qui recevra la saisie\n    strControlName = strNomControleFormulaireLie\nEnd Property\n\nPublic Property Let tableNameLie(strNomTableFormulaireLie As String) 'le nom de la table du formulaire\n    strTableFormLie = strNomTableFormulaireLie\nEnd Property<\/pre>\n\n\n\n<p>Rien de bien particulier \u00e0 part qu\u2019on utilise un <strong>Let <\/strong>au lieu du <strong>Set <\/strong>qui est r\u00e9serv\u00e9 aux objets.<\/p>\n\n\n\n<p>Nos variables sont devenus des propri\u00e9t\u00e9s de la classe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>M\u00e9thode priv\u00e9e<\/strong><\/h2>\n\n\n\n<p>Une m\u00e9thode priv\u00e9e permettra d\u2019attendre la fermeture du formulaire de saisie avant de poursuivre l\u2019ex\u00e9cution du code.&nbsp;Nous&nbsp;obtiendrons un d\u00e9roulement synchrone du processus.<\/p>\n\n\n\n<p>Ce n&rsquo;est pas la meilleure m\u00e9thode mais pour cet exemple cela suffira.<\/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 pAttendreFermeture(vlFrmRprt As Object)\n'-----------------------------------------------------------\n' Procedure   : pAttendreFermeture\n' Author      : Fabrice CONSTANS\n' Date        : 20\/10\/2011\n' Description : Attend la fermeture de l'objet pour rendre la main\n' Param\u00e8tres  : vlFr est l'objet \u00e0 controler\n'-----------------------------------------------------------\nOn Error GoTo pgAttenteFermeture_Error\n   Do\n      DoEvents\n   Loop While vlFrmRprt.Visible\n\npgAttenteFermeture_Error:\n        On Error GoTo 0\n        Exit Sub\nEnd Sub<\/pre>\n\n\n\n<p><strong>Les \u00e9v\u00e8nements<\/strong><\/p>\n\n\n\n<p>Les \u00e9v\u00e8nements vont \u00eatre g\u00e9r\u00e9s \u00e0 l\u2019aide de proc\u00e9dure qui deviendront de fait des m\u00e9thodes de la classe. La diff\u00e9rence c\u2019est qu\u2019\u00e0 aucun moment nous ne devront les appeler pour qu\u2019elles fonctionnent. Ceci gr\u00e2ce au&nbsp;<strong>WithEvents<\/strong>&nbsp;de la d\u00e9claration et \u00e0 l\u2019activation des \u00e9couteurs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le Notinlist<\/h2>\n\n\n\n<p>On remarque que la signature de la proc\u00e9dure est strictement identique \u00e0 celle qui pourrait \u00eatre g\u00e9n\u00e9r\u00e9e dans un formulaire. Je vous conseille d\u2019ailleurs d\u2019utiliser des signature g\u00e9n\u00e9r\u00e9e et de les copier dans la classe, vous gagnerez un temps pr\u00e9cieux et vous n&rsquo;aurez pas le risque que cela ne fonctionne pas.<\/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=\"\">Public Sub LmCombo_NotInList(NewData As String, Response As Integer) 'signature de la proc\u00e9dure\n'--------------------------------------------------------------------\n' Procedure : LmContact_NotInList\n' Author    : Fabrice CONSTANS (MVP)\n' Date      : 21\/01\/2016\n' Purpose   : Nouveau contact, on appelle le formulaire de saisie.\n'------------------------------------------------------------------\n'\nDim strNouveauNumero As String\n\nOn Error GoTo Errsub\n\n    If vbYes = MsgBox(\"Cette valeur n'existe pas. \" &amp; _\n           \"Souhaitez-vous la cr\u00e9er ?\", vbInformation + vbYesNo, _\n                                      \"classe ccombo\") Then\n      'ouverture du formulaire en mode Ajout  \n      DoCmd.OpenForm strFormNameLie, acNormal, , , acFormAdd\n      'on g\u00e8le le contr\u00f4le reception de la valeur saisie\n      Forms(strFormNameLie).Controls(strControlName).Enabled = False\n      'on ajoute la valeur saisie dans la liste\n      Forms(strFormNameLie).Controls(strControlName).Value = NewData\n      'traitement synchrone\n      pAttendreFermeture Forms(strFormNameLie)\n\n'V\u00e9rification que le valeur existe (peut-\u00eatre que l'utilisateur a\n' chang\u00e9 d'avis et a annul\u00e9 la cr\u00e9ation\n   If dLookUp(\"nz(\" &amp; strIdFieldName &amp; \",-1)\", _\n       strTableFormLie, strControlName &amp; \"=\"\"\" &amp; NewData &amp; \"\"\"\") > 0 Then\n         'la valeur a \u00e9t\u00e9 saisi\n         Response = acDataErrAdded\n      Else\n        'la valeur n'a pas \u00e9t\u00e9 saisi (annulation)  \n        Response = acDataErrContinue\n        LmCombo.Parent.Undo\n     End If\n   Else\n     'il ne souhaite pas la cr\u00e9ation\n     Response = acDataErrContinue\n     LmCombo.Parent.Undo\n   End If\n\nExitsub:\n      On Error GoTo 0\n      Exit Sub\nErrsub:\n       msgbox \"cComboBox.LmCombo_NotInList\", Err, Erl, Err.Description\nEnd Sub<\/pre>\n\n\n\n<p>Vous pouvez constater que nous utilisons bien les constantes habituelles pour ce type d\u2019\u00e9v\u00e8nement :&nbsp;<strong>NewData<\/strong>,&nbsp;<strong>acDataErrContinue<\/strong>,&nbsp;<strong>acDataErrAdded<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le DblClick<\/h2>\n\n\n\n<p>Cet \u00e9v\u00e8nement est plus simple que le pr\u00e9c\u00e9dent puisqu\u2019il ne fait qu\u2019ouvrir le formulaire en mode consultation\/modification.<br>A la sortie on pense \u00e0 rafraichir le contenu de la combo au cas ou l\u2019utilisateur a modifi\u00e9 une valeur.<br>Il va de soit que pour cette derni\u00e8re le traitement doit \u00e9galement \u00eatre synchrone.<\/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=\"\">Public Sub LmCombo_DblClick(Cancel As Integer)\n'------------------------------------------------------------------\n' Procedure : btnEditContact_Click\n' Author    : Fabrice CONSTANS (MVP)\n' Date      : 16\/02\/2016\n' Purpose   : edit et raffraichit la liste au retour\n'------------------------------------------------------------------\n'\nDim Id As Long\n\nOn Error GoTo Errsub\n\n    If IsNull(LmCombo.Column(0)) Then\n        MsgBox \"Pour cr\u00e9er un item vous devez entrer sa valeur.\", _\n               vbInformation + vbOKOnly, \"classe ccombo\"\n        Exit Sub\n    End If\n\n    Id = LmCombo.Column(0)\n\n    DoCmd.OpenForm strFormNameLie, acNormal, , _\n                strIdFieldName &amp; \"=\" &amp; Id, acFormEdit\n\n    pAttendreFermeture Forms(strFormNameLie)\n    LmCombo.Undo\n    LmCombo.Requery\n    LmCombo.value = Id\n\n Exitsub:\n   On Error GoTo 0\n   Exit Sub \n\nErrsub:\n    msgbox (\"cComboBox.LmCombo_DblClick\", Err, Erl, Err.Description)\nEnd Sub<\/pre>\n\n\n\n<p>Voil\u00e0 la Classe <strong>cCombo <\/strong>est pr\u00eate \u00e0 \u00eatre utilis\u00e9e. Voyons cela dans les faits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Utiliser la classe dans un formulaire<\/h2>\n\n\n\n<p>En premier lieu il faut indiquer au formulaire que nous allons utiliser cette classe. Pour cela nous devons utiliser autant de variables qu\u2019il y a de zone de liste \u00e0 impl\u00e9menter. Ces variables doivent \u00eatre globale, donc d\u00e9clarer imm\u00e9diatement apr\u00e8s les 2 lignes d\u2019Options du module de classe du formulaire.<\/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=\"\">Dim cComboClient         As cComboBox<\/pre>\n\n\n\n<p>Dans l\u2019\u00e9v\u00e9nement&nbsp;<strong>Sur Ouverture<\/strong>&nbsp;du formulaire on poursuit la d\u00e9claration.<\/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=\"\">Set cComboClient = New cComboBox\n\ncComboClient.controlNameLie = \"RaisonSociale\"\ncComboClient.frmNameLie = \"fClient\"\ncComboClient.idFieldName = \"id_Client\"\nSet cComboClient.objComboBox = Me.Controls(\"lmClient\")\ncComboClient.tableNameLie = \"tClient\"<\/pre>\n\n\n\n<p><strong>New<\/strong>&nbsp;permet de cr\u00e9er l\u2019instance de la classe et ainsi pouvoir valoriser les propri\u00e9t\u00e9s.<\/p>\n\n\n\n<p>Dans cet exemple la liste d\u00e9roulante se nomme&nbsp;<strong>lmClient<\/strong>. Vous pouvez adapter ce code d\u00e9claratif \u00e0 votre propre cas. Vous ne devez jamais modifier la classe pour y int\u00e9grer des noms propres \u00e0 l\u2019application. Une classe doit rester g\u00e9n\u00e9rique sous peine de ne plus \u00eatre portable.<\/p>\n\n\n\n<p>Il va de soit qu\u2019\u00e0 chaque nouvelle liste d\u00e9roulante \u00e0 instancier, un code similaire devra \u00eatre ajout\u00e9. C&rsquo;est tout l\u2019int\u00e9r\u00eat d&rsquo;une classe.<\/p>\n\n\n\n<p>Une fois sauvegard\u00e9, vous pouvez utiliser le formulaire.<\/p>\n\n\n\n<p>Les tests de comportement&nbsp;\u00e0 faire :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Entrer une nouvelle valeur.<\/li>\n\n\n\n<li>Double cliquer sur la zone de liste.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Classe en VBA, quels avantages ?<\/h2>\n\n\n\n<p><strong>Le poids de l\u2019application :&nbsp;<\/strong>On remplace des centaines de lignes par une partie d\u00e9clarative.<\/p>\n\n\n\n<p><strong>L\u2019uniformit\u00e9 du comportement :<\/strong>&nbsp;Comme on utilise le m\u00eame code pour tous les contr\u00f4les nous sommes s\u00fbr que le comportement sera la m\u00eame.<\/p>\n\n\n\n<p><strong>Maintenance et \u00e9volution :<\/strong>\u00a0Si un bug est constat\u00e9 ou que l\u2019on souhaite faire \u00e9voluer le comportement, on intervient dans la classe. La duplication de code n&rsquo;est plus n\u00e9cessaire on \u00e9vite des heures de test, d&rsquo;erreurs potentielles et de tous les probl\u00e8mes inh\u00e9rent \u00e0 cette pratique.<\/p>\n\n\n\n<p><strong>Rapidit\u00e9 de conception :<\/strong>&nbsp;Une simple d\u00e9claration permet d\u2019exploiter la classe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Classe en VBA, quels inconv\u00e9nients ?<\/h2>\n\n\n\n<p><strong>G\u00e9rer toutes les erreurs de l&rsquo;application :\u00a0<\/strong>En cas d\u2019erreur non trait\u00e9e avec les classes charg\u00e9es se d\u00e9chargent. Il faudra alors ex\u00e9cuter les d\u00e9clarations une nouvelle fois.<\/p>\n\n\n\n<p><strong>Difficult\u00e9 technique : <\/strong>Pour les non programmeurs, appr\u00e9hender le concept de classe peut poser des probl\u00e8mes.<\/p>\n\n\n\n<p><strong>Complexit\u00e9 :<\/strong> Les classes sont plus complexes \u00e0 mettre en \u0153uvre qu\u2019un code proc\u00e9dural et \u00e9v\u00e8nementiel classique. Si vous traiter un formulaire il est conseill\u00e9 de concevoir les traitements dans le formulaire puis de cr\u00e9er la classe \u00e0 partir d&rsquo;un code fonctionnel. Si c&rsquo;est un classe standard cr\u00e9\u00e9 le code dans un module standard, cela vous permettra de tester rapidement votre cr\u00e9ation, ensuite le transformer-la en classe.<\/p>\n\n\n\n<p><strong>Conclusion<\/strong><\/p>\n\n\n\n<p>J\u2019esp\u00e8re que cette incursion dans les classes vous aura plu et qu&rsquo;elle vous donnera des id\u00e9es d\u2019impl\u00e9mentations pour vos d\u00e9veloppements. N&rsquo;h\u00e9sitez pas \u00e0 commenter ce billet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le concept de classe en VBA\u00a0a quelques lacunes mais\u00a0il ne doit pas \u00eatre n\u00e9glig\u00e9s pour autant. En effet,\u00a0gr\u00e2ce \u00e0 elles\u00a0on peut\u00a0gagner un temps pr\u00e9cieux. Voici un petit exemple fonctionnel d\u2019une classe qui g\u00e8re les \u00e9v\u00e8nements\u00a0DblClick\u00a0et\u00a0NotInList\u00a0d\u2019une zone de liste d\u00e9roulante. Le\u00a0DblClick\u00a0permet &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/08\/15\/vba-classe-et-gain-de-temps-2\/\">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-255","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\/255","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=255"}],"version-history":[{"count":5,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/255\/revisions"}],"predecessor-version":[{"id":381,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/255\/revisions\/381"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}