<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://grenier.self-access.com/?feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Le grenier Access</title>
  <link>http://grenier.self-access.com/?</link>
  <description>Trucs et astuces pour Microsoft Access</description>
  <language>fr</language>
  <pubDate>Wed, 16 May 2012 06:36:39 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Auto-complétion</title>
    <link>http://grenier.self-access.com/?post/2011/12/14/Auto-completion</link>
    <guid isPermaLink="false">urn:md5:4723b8ddbc16f749b3bc3f292ace50af</guid>
    <pubDate>Wed, 14 Dec 2011 10:13:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Le saviez-vous ?</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>vba</category><category>vbe</category>    
    <description>    &lt;h3&gt;Le saviez-vous ?&lt;/h3&gt;
&lt;p&gt;Lorsque vous tapez du code VBA, Visual Basic Editor vous suggère automatiquement les paramètres de procédures ou fonctions, les valeurs d'énumérations, etc.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/vb/autocomplete.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Saviez-vous qu'on peut aussi utiliser l'auto-complétion manuellement ? Exemple : vous devez taper le bout de code suivant, qui fait appel à une variable... très longue :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; BoutDeCode&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strUneVariableTresLongue &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; strUneVariableTresLongue = &lt;span class=&quot;st0&quot;&gt;&amp;quot;Bonjour&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; strUneVariableTresLongue, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Sur la ligne de déclaration (&lt;code&gt;Dim&lt;/code&gt;), vous ne pouvez pas gagner beaucoup de temps, parce qu'il faut bien nommer la variable au départ.&lt;/p&gt;
&lt;p&gt;Mais à partir de la ligne suivante, vous pouvez taper seulement &lt;code&gt;strU &lt;/code&gt;puis la combinaison &lt;code&gt;Ctrl &lt;/code&gt;+ &lt;code&gt;Espace&lt;/code&gt; ; la variable s'écrira automatiquement. Pratique, non ? &lt;/p&gt;
&lt;p&gt;La majuscule n'est même pas utile (tapez seulement &lt;code&gt;stru&lt;/code&gt; puis &lt;code&gt;Ctrl &lt;/code&gt;+ &lt;code&gt;Espace&lt;/code&gt;, pour voir). Et cela fonctionne pour les variables, les noms de procédures ou de fonctions, les instructions VB, etc. Lorsqu'il y a plusieurs choix possibles (plusieurs variables ou instructions démarrant par les lettres tapées), VBE affiche une liste déroulante pour vous aider à choisir.&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/14/Auto-completion#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/14/Auto-completion#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/388</wfw:commentRss>
      </item>
    
  <item>
    <title>Liste déroulante limitée à 255 caractères</title>
    <link>http://grenier.self-access.com/?post/2011/12/13/Liste-deroulante-limitee-a-255-caracteres</link>
    <guid isPermaLink="false">urn:md5:e341c13e999abb0ac04bfd21b594d3b8</guid>
    <pubDate>Tue, 13 Dec 2011 20:34:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Formulaires - Listes</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>dlookup</category><category>formulaire</category><category>liste</category><category>table</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;J'extrais des valeurs Texte d'une liste déroulante, par exemple par la méthode &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?q=column&quot;&gt;Column(x)&lt;/a&gt;. Mais lorsque certains textes sont longs, Access n'affiche que 255 caractères. Comment faire ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Exemple&lt;/h3&gt;
&lt;p&gt;Effectivement, les textes des listes déroulantes sont limités à 255 caractères, même si le champ de table est un Mémo qui contiendrait 2000 caractères.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dans l'exemple ci-dessous, la liste déroulante extrait des informations de la table &lt;code&gt;tbl Environnement&lt;/code&gt; dont il était question dans l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/07/Nom-dutilisateur-et-autres-informations-utiles-%3A-le-retour&quot;&gt;Nom d'utilisateur et autres informations&lt;/a&gt;. Pour mémoire, cette table contient 3 champs : &lt;code&gt;Id &lt;/code&gt;(&lt;em&gt;NuméroAuto&lt;/em&gt;), &lt;code&gt;Variable &lt;/code&gt;(&lt;em&gt;Texte&lt;/em&gt;) et &lt;code&gt;Valeur &lt;/code&gt;(&lt;em&gt;Mémo&lt;/em&gt;). La liste a donc pour source la requête suivante :&lt;/p&gt;
&lt;div class=&quot;sql&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SELECT&lt;/span&gt; Id, Variable, Valeur&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;tbl Environnement&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;BY&lt;/span&gt; Variable;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;La liste s'appelle &lt;code&gt;cmbEnvironnement&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La zone de texte de gauche (&quot;Valeur extraite de la liste&quot;) a pour source cette formule :&lt;br /&gt;&lt;code&gt;=[cmbEnvironnement].[Column](2)&lt;/code&gt;&lt;br /&gt;comme vous avez pu le voir dans &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?q=column&quot;&gt;ces articles&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il se trouve que la variable d'environnement &lt;code&gt;PATH &lt;/code&gt;sélectionnée ici fait 432 caractères. Mais la valeur extraite de la liste par la fonction &lt;code&gt;Column()&lt;/code&gt; n'en renvoie que 255.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/forms/lists/liste255.jpg&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Une solution&lt;/h3&gt;
&lt;p&gt;La solution pour palier ce problème consiste à extraire les données par un autre moyen que la liste, par exemple directement de la table. Voici la source de la zone de droite :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;=RechDom&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;[Valeur]&amp;quot;&lt;/span&gt;;&lt;span class=&quot;st0&quot;&gt;&amp;quot;tbl Environnement&amp;quot;&lt;/span&gt;;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Id = &amp;quot;&lt;/span&gt; &amp;amp; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;cmbEnvironnement&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Nous utilisons la fonction &lt;code&gt;RechDom()&lt;/code&gt; - ou &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?tag/dlookup&quot;&gt;DLookup()&lt;/a&gt; en anglais, qui effectue une recherche dans une table. La fonction est traitée en détail dans &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/09/06/Utiliser-la-fonction-DLookup&quot;&gt;cet article&lt;/a&gt;. Cette fonction nous sert à chercher...&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;le champ &lt;code&gt;Valeur&lt;/code&gt;...&lt;/li&gt;
&lt;li&gt;dans la table &lt;code&gt;tbl Environnement&lt;/code&gt;...&lt;/li&gt;
&lt;li&gt;sur la ligne dont la clef &lt;code&gt;Id &lt;/code&gt;est égale au choix fait dans la liste &lt;code&gt;cmbEnvironnement&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et cette fois, on extrait bien tous les caractères !&lt;/p&gt;
&lt;h3&gt;Petit détail cosmétique&lt;/h3&gt;
&lt;p&gt;La zone de droite affiche la mention &lt;code&gt;#Erreur&lt;/code&gt; lorsque le formulaire s'ouvre et qu'aucun choix n'est encore fait dans la liste déroulante &lt;code&gt;cmbEnvironnement&lt;/code&gt;. La raison est que, dans ce cas, le filtre de la fonction &lt;code&gt;RechDom()&lt;/code&gt; devient : &lt;code&gt;&quot;Id=&quot;&lt;/code&gt; (rien après le signe &quot;=&quot;). Ajoutez un traitement de ce vide par la fonction &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?tag/nz&quot;&gt;Nz()&lt;/a&gt;, et ce sera réglé :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;=RechDom&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;[Valeur]&amp;quot;&lt;/span&gt;;&lt;span class=&quot;st0&quot;&gt;&amp;quot;tbl Environnement&amp;quot;&lt;/span&gt;;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Id = &amp;quot;&lt;/span&gt; &amp;amp; Nz&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;cmbEnvironnement&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;Ah, j'oubliais...&lt;/h3&gt;
&lt;p&gt;Le nombre de caractères est calculé par la fonction &lt;code&gt;Len()&lt;/code&gt; - ou &lt;code&gt;NbCar()&lt;/code&gt; en français. Donc si les 2 zones d'affichage s'appellent &lt;code&gt;txtValeur1 &lt;/code&gt;et &lt;code&gt;txtValeur2&lt;/code&gt;, les 2 tailles se calculent par :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;=Len(txtValeur1)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;=Len(txtValeur2)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/13/Liste-deroulante-limitee-a-255-caracteres#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/13/Liste-deroulante-limitee-a-255-caracteres#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/387</wfw:commentRss>
      </item>
    
  <item>
    <title>Imbriquer les procédures et les fonctions</title>
    <link>http://grenier.self-access.com/?post/2011/12/12/Imbriquer-les-procedures-et-les-fonctions</link>
    <guid isPermaLink="false">urn:md5:af6999f6640131c4f195193a43331700</guid>
    <pubDate>Mon, 12 Dec 2011 16:47:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Le saviez-vous ?</category>
        <category>access 2</category><category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>vba</category>    
    <description>    &lt;h3&gt;Le saviez-vous ?&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;(pas tout le monde, si j'en crois un message récent sur le blog)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;En VBA, il n'est pas possible (et pas utile, en fait)  d'&lt;strong&gt;imbriquer&lt;/strong&gt; les blocs de procédures et de fonctions. Vous pouvez seulement les disposer les uns à la suite des autres. Donc ceci est correct :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; Procedure1&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ...&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; Procedure2&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ...&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; Fonction1&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ...&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Par contre, ça c'est interdit :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; Procedure1&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; Procedure2&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' ...&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; Fonction1&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' ...&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/12/Imbriquer-les-procedures-et-les-fonctions#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/12/Imbriquer-les-procedures-et-les-fonctions#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/386</wfw:commentRss>
      </item>
    
  <item>
    <title>self-access.com référencé par Microsoft !</title>
    <link>http://grenier.self-access.com/?post/2011/12/09/self-accesscom-reference-par-Microsoft</link>
    <guid isPermaLink="false">urn:md5:4f4914d8ca2bbb7793d7feb292493407</guid>
    <pubDate>Fri, 09 Dec 2011 10:23:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Le Grenier</category>
            
    <description>    &lt;p&gt;&lt;img style=&quot;float: left; margin-right: 10px; margin-bottom: 10px;&quot; alt=&quot;&quot; src=&quot;http://www.self-access.com/cms/uploads/pics/lgoMVPVertical.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Tout est dans le titre : les sites &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.self-access.com&quot;&gt;www.self-access.com&lt;/a&gt; et &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/09/&quot;&gt;grenier.self-access.com&lt;/a&gt; sont désormais référencés par le &lt;a hreflang=&quot;fr&quot; href=&quot;http://support.microsoft.com/ph/915/fr&quot;&gt;Centre de Solutions Access&lt;/a&gt; de &lt;strong&gt;Microsoft&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/common/logos/microsoft_gray.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;D'autres ressources Access (et autres) sont également présentées là-bas, pensez à y faire un tour ! :-)&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/09/self-accesscom-reference-par-Microsoft#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/09/self-accesscom-reference-par-Microsoft#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/385</wfw:commentRss>
      </item>
    
  <item>
    <title>Lecture de flux RSS - Episode 5</title>
    <link>http://grenier.self-access.com/?post/2011/12/08/Lecture-de-flux-RSS-Episode-5</link>
    <guid isPermaLink="false">urn:md5:d54b825fee7daae0c803a8ef8aed7bc1</guid>
    <pubDate>Thu, 08 Dec 2011 19:33:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>formulaire</category><category>internet</category><category>table</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Suite de la saga &quot;&lt;strong&gt;Lecture de flux RSS&lt;/strong&gt;&quot; : maintenant que les flux s'affichent correctement dans la fenêtre &lt;strong&gt;Exécution&lt;/strong&gt;, nous allons préparer leur stockage dans la base de données. Cet article traite principalement de la mise en place des tables, la mise à jour des flux sera ajoutée ultérieurement.&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Si vous avez manqué le début...&lt;/h3&gt;
&lt;p&gt;La saga &quot;Lecture de flux RSS&quot; a commencé par ces articles :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/08/?post/2011/05/09/Lecture-de-flux-RSS-Episode-1&quot;&gt;Lecture de flux RSS - Episode 1&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/08/?post/2011/05/10/Lecture-de-flux-RSS-Episode-2&quot;&gt;Lecture de flux RSS - Episode 2&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/08/?post/2011/05/11/Lecture-de-flux-RSS-Episode-3&quot;&gt;Lecture de flux RSS - Episode 3&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/05/28/Lecture-de-flux-RSS-Episode-4&quot;&gt;Lecture de flux RSS - Episode 4&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Mise en place des tables&lt;/h3&gt;
&lt;p&gt;Notre système repose sur 2 tables : &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;une table des flux, qui stocke principalement l'URL et le titre en clair de chaque flux ;&lt;/li&gt;
&lt;li&gt;une table des articles, qui stocke l'URL et le titre d'un article de flux.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il y a une relation &lt;strong&gt;1:plusieurs&lt;/strong&gt; entre les flux et leurs articles (1 flux / plusieurs articles).&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/flux_rss_relations.png&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;Structure de la table des flux&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Numéro Flux&lt;/code&gt; : &lt;em&gt;NuméroAuto &lt;/em&gt;(clef primaire)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;URL &lt;/code&gt;: &lt;em&gt;Texte&lt;/em&gt;, 255 caractères&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Titre &lt;/code&gt;: &lt;em&gt;Texte&lt;/em&gt;, 255 caractères&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Structure de la table des articles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Numéro Article&lt;/code&gt; : &lt;em&gt;NuméroAuto &lt;/em&gt;(clef primaire)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Numéro Flux&lt;/code&gt; : &lt;em&gt;Numérique / Entier long&lt;/em&gt; (clef étrangère reliée à la clef primaire de la table des flux)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Indice &lt;/code&gt;: &lt;em&gt;Numérique / Entier long&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Titre Article&lt;/code&gt; : &lt;em&gt;Texte&lt;/em&gt;, 255 caractères&lt;/li&gt;
&lt;li&gt;&lt;code&gt;URL Article&lt;/code&gt; : &lt;em&gt;Texte&lt;/em&gt;, 255 caractères&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le formulaire&lt;/h3&gt;
&lt;p&gt;Les flux doivent être ajoutés manuellement dans la table... des flux. Pour faciliter la saisie, créez un formulaire basé sur cette table. Le nôtre est en mode Tabulaire (ou &quot;formulaires continus&quot;).&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/flux_rss_formulaire.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Au prochain épisode, nous verrons comment alimenter la table des articles automatiquement.&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/08/Lecture-de-flux-RSS-Episode-5#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/08/Lecture-de-flux-RSS-Episode-5#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/384</wfw:commentRss>
      </item>
    
  <item>
    <title>Nom d'utilisateur et autres informations utiles : le retour !</title>
    <link>http://grenier.self-access.com/?post/2011/12/07/Nom-dutilisateur-et-autres-informations-utiles-%3A-le-retour</link>
    <guid isPermaLink="false">urn:md5:a18aefc4845b6e2272e9903322f9a3df</guid>
    <pubDate>Wed, 07 Dec 2011 12:04:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Fichiers</category>
        <category>access 2000</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>fichier</category><category>table</category><category>vba</category><category>windows</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Suite à l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2008/05/08/Nom-dutilisateur-et-autres-informations-utiles&quot;&gt;Nom d'utilisateur et autres informations utiles&lt;/a&gt;, un lecteur du blog a souhaité savoir comment stocker les variables d'environnement dans une table, plutôt que de les afficher à l'écran. Voici la solution.&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Mise en place&lt;/h3&gt;
Créez une table &lt;code&gt;tbl Environnement&lt;/code&gt;, avec 3 champs : &lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Id &lt;/code&gt;(&lt;em&gt;NuméroAuto&lt;/em&gt;, clef primaire)&lt;br /&gt;Un numéro attribué automatiquement pour différencier les valeurs (inutile dans le scénario d'aujourd'hui).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Variable &lt;/code&gt;(Texte / 255 caractères)&lt;br /&gt;Colonne pour stocker le nom de la variable d'environnement (&lt;code&gt;USERNAME&lt;/code&gt;, &lt;code&gt;PATH&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Valeur &lt;/code&gt;(&lt;em&gt;Mémo&lt;/em&gt;)&lt;br /&gt;Colonne pour stocker la valeur de la variable d'environnement. Certaines variables d'environnement (comme &lt;code&gt;PATH&lt;/code&gt;) peuvent être plutôt longues, d'où le type &lt;em&gt;Mémo&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/files/.environnement_table_m.jpg&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
&lt;p&gt;Voici le code, à recopier comme d'habitude dans un &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2008/11/12/Modules-standard&quot;&gt;module standard&lt;/a&gt; de votre base de données :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' VARIABLE D'ENVIRONNEMENT - TABLE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; VariablesEnvironnementTable&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; varEnv &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; v &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; rst &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; DAO.&lt;span class=&quot;kw1&quot;&gt;Recordset&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On vide au préalable la table&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; CurrentDb.&lt;span class=&quot;me1&quot;&gt;Execute&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;DELETE * FROM [tbl Environnement];&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On ouvre un Recordset sur la table&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; rst = CurrentDb.&lt;span class=&quot;me1&quot;&gt;OpenRecordset&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;tbl Environnement&amp;quot;&lt;/span&gt;, dbOpenDynaset&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Liste des variables d'environnement&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; varEnv = &lt;span class=&quot;kw1&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;ALLUSERSPROFILE&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;APPDATA&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;COMPUTERNAME&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;HOMEDRIVE&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;HOMEPATH&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;LOGONSERVER&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;NUMBER_OF_PROCESSORS&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;OS&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;PATH&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;PATHEXT&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;PROCESSOR_ARCHITECTURE&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;PROCESSOR_IDENTIFIER&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;PROCESSOR_LEVEL&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;PROCESSOR_REVISION&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;PROMPT&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;SYSTEMDRIVE&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;SYSTEMROOT&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;TEMP&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;TMP&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;USERDOMAIN&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;USERNAME&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;USERPROFILE&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Lecture de toutes les valeurs&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each v In varEnv&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Stockage de la valeur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; rst.&lt;span class=&quot;me1&quot;&gt;AddNew&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; rst&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Variable&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = v&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; rst&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Valeur&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;Environ&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;v&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; rst.&lt;span class=&quot;me1&quot;&gt;Update&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Next&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On ferme !&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; rst.&lt;span class=&quot;kw1&quot;&gt;Close&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; rst = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Affichage final&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Opération terminée !&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbInformation&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;warning-header&quot;&gt;Important&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;L'exemple de code ci-dessus fait appel à la bibliothèque DAO (&lt;em&gt;Microsoft DAO Object Library&lt;/em&gt;). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;
Pour plus de détails sur les références, consultez &lt;a href=&quot;http://grenier.self-access.com/?post/2007/08/26/References&quot; hreflang=&quot;fr&quot;&gt;cette page&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;infotip-header&quot;&gt;A savoir...&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Notre bout de code vide systématiquement la table avant de l'alimenter, pour éviter de &quot;doublonner&quot; les variables d'environnement.&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/07/Nom-dutilisateur-et-autres-informations-utiles-%3A-le-retour#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/07/Nom-dutilisateur-et-autres-informations-utiles-%3A-le-retour#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/383</wfw:commentRss>
      </item>
    
  <item>
    <title>Banque d'images : ouvrir l'aperçu Windows</title>
    <link>http://grenier.self-access.com/?post/2011/12/06/Banque-dimages-%3A-ouvrir-lapercu-Windows</link>
    <guid isPermaLink="false">urn:md5:59a42a1af7c0fff9857380987e6d8a3c</guid>
    <pubDate>Tue, 06 Dec 2011 11:40:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Formulaires - Images</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>formulaire</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Une question posée par un lecteur du blog, dans la saga &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/06/?category/Formulaires-Images&quot;&gt;Banque d'images&lt;/a&gt; : comment déclencher, à partir d'Access, l'aperçu Windows ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le principe&lt;/h3&gt;
&lt;p&gt;En fait, pour être plus précis, on ne va pas nécessairement déclencher l'aperçu Windows, on va plutôt &quot;ouvrir l'application associée aux images&quot;. En d'autres termes, si votre Windows est d'origine, ce sera bien l'aperçu qui s'ouvrira. Mais si vous avez associé un autre logiciel aux extensions de type JPG, par exemple, ce sera cette application qui s'ouvrira.&lt;/p&gt;
&lt;p&gt;On va utiliser pour ça la commande &lt;code&gt;ShellExec &lt;/code&gt;(et sa base &lt;code&gt;ShellExecute&lt;/code&gt;), qui a été présentée dans l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2009/03/13/Ouvrir-ou-imprimer-un-fichier-quelconque-a-partir-de-son-nom&quot;&gt;Ouvrir ou imprimer un fichier quelconque à partir de son nom&lt;/a&gt;. Le code qui suit utilise aussi la fonction &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2009/02/18/Ajouter-un-backslash-en-fin-de-chemin&quot;&gt;AddBackslash()&lt;/a&gt;, que vous avez déjà dû recopier dans un module standard de votre base !&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/forms/.banque_images_apercu_m.jpg&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;Ajoutez un bouton sur votre formulaire d'images, sans assistant (le mien s'appelle &lt;code&gt;btnApercuWindows&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Faites apparaître les propriétés du bouton, onglet &lt;strong&gt;Evénement&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choisissez &lt;code&gt;Propriété événementielle&lt;/code&gt; pour l'événement &lt;code&gt;Sur clic&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cliquez sur les points de suspension à droite de l'événement, et recopiez le code suivant :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' APERCU WINDOWS&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; btnApercuWindows_Click&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strChemin &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; strChemin = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &amp;amp; AddBackslash&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;txtRepBase&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Nom_Fichier&lt;/span&gt; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ShellExec strChemin, &lt;span class=&quot;st0&quot;&gt;&amp;quot;open&amp;quot;&lt;/span&gt;, vbNormalFocus&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/06/Banque-dimages-%3A-ouvrir-lapercu-Windows#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/06/Banque-dimages-%3A-ouvrir-lapercu-Windows#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/382</wfw:commentRss>
      </item>
    
  <item>
    <title>Banque d'images : ouvrir le dossier des images</title>
    <link>http://grenier.self-access.com/?post/2011/12/05/Banque-dimages-%3A-ouvrir-le-dossier-des-images</link>
    <guid isPermaLink="false">urn:md5:9b78af1a59cb6822fd363fdd22dc9d4c</guid>
    <pubDate>Mon, 05 Dec 2011 11:22:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Formulaires - Images</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>dossier</category><category>formulaire</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Un nouvel épisode de notre saga &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?category/Formulaires-Images&quot;&gt;Banque d'images&lt;/a&gt; : comment ouvrir, à partir d'Access, le dossier qui contient les images d'origine ?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/forms/images_echantillons.jpg&quot; /&gt;&lt;/p&gt;    &lt;h3&gt;Le principe&lt;/h3&gt;
&lt;p&gt;En fait, il suffit d'adapter le code traité dans l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/10/20/Ouvrir-un-dossier-Windows&quot;&gt;Ouvrir un dossier Windows&lt;/a&gt;, qui repose sur l'instruction &lt;code&gt;Shell&lt;/code&gt; (vous pouvez consulter, en passant, &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/10/20/Ouvrir-un-dossier-Windows&quot;&gt;tous les autres articles&lt;/a&gt; qui exploitent cette instruction !).&lt;/p&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;Ajoutez un bouton sur votre formulaire d'images, sans assistant (le mien s'appelle &lt;code&gt;btnOuvrirDossier&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Faites apparaître les propriétés du bouton, onglet &lt;strong&gt;Evénement&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choisissez &lt;code&gt;Propriété événementielle&lt;/code&gt; pour l'événement &lt;code&gt;Sur clic&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cliquez sur les points de suspension à droite de l'événement, et recopiez le code suivant :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' OUVERTURE DU DOSSIER IMAGES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; btnOuvrirDossier_Click&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IsNull&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;txtRepBase&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Le dossier n'est pas renseigné !&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Shell&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;explorer &amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;txtRepBase&lt;/span&gt; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;, vbNormalFocus&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/05/Banque-dimages-%3A-ouvrir-le-dossier-des-images#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/05/Banque-dimages-%3A-ouvrir-le-dossier-des-images#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/381</wfw:commentRss>
      </item>
    
  <item>
    <title>Evernote et VBA - Episode 5</title>
    <link>http://grenier.self-access.com/?post/2011/12/02/Evernote-et-VBA-Episode-5</link>
    <guid isPermaLink="false">urn:md5:fc2a766c8724b743132eac0d5c7c096c</guid>
    <pubDate>Fri, 02 Dec 2011 08:34:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>automation</category><category>cloud</category><category>internet</category><category>table</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Déjà la fin de notre semaine Evernote... Pour clôturer cette série d'articles, il est temps de revenir un peu à Access ! Dans cet article, il sera question de transmettre le contenu d'une table sous forme d'&lt;em&gt;evernote&lt;/em&gt;.&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote-logo-ombre.png&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Résumé des épisodes précédents&lt;/h3&gt;
&lt;p&gt;Tout ce qui suit dépend des articles précédents. Pensez à les consulter si vous passez pour la première fois par ici :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/02/?post/2011/11/25/Evernote-et-VBA-Episode-1&quot;&gt;Evernote et VBA - Episode 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/02/?post/2011/11/29/Evernote-et-VBA-Episode-2&quot;&gt;Evernote et VBA - Episode 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/02/?post/2011/11/30/Evernote-et-VBA-Episode-3&quot;&gt;Evernote et VBA - Episode 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/01/Evernote-et-VBA-Episode-4&quot;&gt;Evernote et VBA - Episode 4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le principe&lt;/h3&gt;
&lt;p&gt;On dispose d'une table simple, avec des personnes (Nom, Prénom, Email). L'objectif est de lister toutes les personnes de cette table dans une &lt;em&gt;evernote&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/hyperlink_table.png&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
&lt;p&gt;Je suppose que votre base de données contient la classe &lt;code&gt;EvernoteClient &lt;/code&gt;qui a été décrite dans les précédents épisodes de la série. Aucun rajout n'est nécessaire sur cette classe, nous pouvons l'exploiter en l'état.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Créez un module standard dans votre base de données.&lt;/li&gt;
&lt;li&gt;Recopiez-y la procédure suivante, puis exécutez-la. Vous devriez obtenir ceci dans le classeur par défaut de Evernote :&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote_personnes.png&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;'---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ENVOI DE DONNEES ACCESS DANS EVERNOTE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; Access2Evernote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; rst &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; DAO.&lt;span class=&quot;kw1&quot;&gt;Recordset&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strNote &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; ec &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; EvernoteClient&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Début de la note&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strNote = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;h1&amp;gt;Liste des personnes&amp;lt;/h1&amp;gt;&amp;quot;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Voici la liste des &amp;lt;b&amp;gt;personnes à inviter&amp;lt;/b&amp;gt; !&amp;quot;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Obtenir la liste des personnes à partir&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' d'une table Access&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; rst = CurrentDb.&lt;span class=&quot;me1&quot;&gt;OpenRecordset&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;tbl Destinataires&amp;quot;&lt;/span&gt;, dbOpenSnapshot&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;While&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Not&lt;/span&gt; rst.&lt;span class=&quot;kw1&quot;&gt;EOF&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Corps de la note&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; strNote = strNote _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp; StringFormat&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;li&amp;gt;{0} {1} - &amp;lt;a href=&amp;quot;&lt;/span&gt;http://grenier.&lt;span class=&quot;me1&quot;&gt;self&lt;/span&gt;-access.&lt;span class=&quot;me1&quot;&gt;com&lt;/span&gt;/?post/&lt;span class=&quot;nu0&quot;&gt;2011&lt;/span&gt;/&lt;span class=&quot;nu0&quot;&gt;12&lt;/span&gt;/&lt;span class=&quot;nu0&quot;&gt;02&lt;/span&gt;/&lt;span class=&quot;st0&quot;&gt;&amp;quot;{2}&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;gt;{3}&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rst&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Nom&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rst&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Prénom&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rst&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetHyperlink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;rst&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, mailto&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Personne suivante&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; rst.&lt;span class=&quot;me1&quot;&gt;MoveNext&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Wend&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Fin de la note&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strNote = strNote &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Une instance du client EvernoteNote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ec = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; EvernoteClient&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Identifiants&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;Utilisateur&lt;/span&gt; = EN_UTILISATEUR&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;MotDePasse&lt;/span&gt; = EN_MOTDEPASSE&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Création de la note dans le&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' classeur par défaut&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; ec.&lt;span class=&quot;me1&quot;&gt;CreerNote&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Access Personnes&amp;quot;&lt;/span&gt;, strNote&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Note créée !&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbInformation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Impossible de créer la note !&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On ferme !&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; rst.&lt;span class=&quot;kw1&quot;&gt;Close&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; rst = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ec = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;warning-header&quot;&gt;Important&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;L'exemple de code ci-dessus fait appel à la bibliothèque DAO (&lt;em&gt;Microsoft DAO Object Library&lt;/em&gt;). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;
Pour plus de détails sur les références, consultez &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/08/26/References&quot;&gt;cette page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Le code utilise également des fonctions VBA traitées dans des articles précédents : &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/03/20/Marre-des-concatenations&quot;&gt;StringFormat()&lt;/a&gt; pour formater les chaînes plus clairement, et &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/21/Nettoyer-des-liens-hypertexte-a-la-volee&quot;&gt;GetHyperlink()&lt;/a&gt; pour extraire les e-mails bruts d'un champ Lien hypertexte.&lt;/div&gt;
&lt;h3&gt;Explications&lt;/h3&gt;
&lt;p&gt;Voici les points importants à noter dans la procédure d'exemple :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;On utilise un Recordset DAO pour parcourir toute la table et obtenir les nom, prénom et e-mail de chaque personne. Ça, c'est pour la partie Access.&lt;/li&gt;
&lt;li&gt;Le corps de la note est créé au format ENML,&amp;nbsp; par concaténation de portions de code HTML. Si vous avez suivi l'article précédent, on crée seulement le corps de la note (la classe &lt;code&gt;EvernoteClient &lt;/code&gt;rajoute l'en-tête et le pied de note automatiquement).&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;&lt;li&gt;Le titre de la note est créé comme en HTML, par les balises &lt;code&gt;&amp;lt;h1&amp;gt;&amp;lt;/h1&lt;/code&gt;&amp;gt;.&lt;/li&gt;
&lt;li&gt;Le reste de la note est une liste de personnes (balises &lt;code&gt;&amp;lt;ul&amp;gt;&amp;lt;/ul&lt;/code&gt;&amp;gt;)&lt;/li&gt;
&lt;li&gt;Chaque personne est un élément de liste (balises &lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;/li&lt;/code&gt;&amp;gt;).&lt;/li&gt;
&lt;li&gt;Chaque email est un lien &lt;code&gt;mailto:&lt;/code&gt; (balise &lt;code&gt;&amp;lt;a href=&quot;http://grenier.self-access.com/?post/2011/12/02/...&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce qui équivaut à générer le corps de note ci-dessous :&lt;/p&gt;
&lt;div style=&quot;font-family: monospace;&quot;&gt;&amp;lt;h1&amp;gt;Liste des personnes&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;li&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Zeblouze Agathe - &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;a href=&amp;quot;http://grenier.self-access.com/?post/2011/12/02/mailto:agathe.zeblouze@free.fr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; agathe.zeblouze@free.fr&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;lt;li&amp;gt;...&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/02/Evernote-et-VBA-Episode-5#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/02/Evernote-et-VBA-Episode-5#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/380</wfw:commentRss>
      </item>
    
  <item>
    <title>Evernote et VBA - Episode 4</title>
    <link>http://grenier.self-access.com/?post/2011/12/01/Evernote-et-VBA-Episode-4</link>
    <guid isPermaLink="false">urn:md5:cf77814ee8e8ee81eb52591bec46970d</guid>
    <pubDate>Thu, 01 Dec 2011 09:21:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>automation</category><category>cloud</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Dans le dernier épisode, il était question de créer un classeur Evernote à partir de VBA. Suite logique, il ne nous reste plus qu'à &lt;strong&gt;inscrire une note&lt;/strong&gt; dans ce classeur... ou dans n'importe quel classeur, d'ailleurs !.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote-logo-ombre.png&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Résumé des épisodes précédents&lt;/h3&gt;
&lt;p&gt;Tout ce qui suit dépend des articles précédents. Pensez à les consulter si vous passez pour la première fois par ici :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/01/?post/2011/11/25/Evernote-et-VBA-Episode-1&quot;&gt;Evernote et VBA - Episode 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/12/01/?post/2011/11/29/Evernote-et-VBA-Episode-2&quot;&gt;Evernote et VBA - Episode 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/30/Evernote-et-VBA-Episode-3&quot;&gt;Evernote et VBA - Episode 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
&lt;p&gt;Reprenez une nouvelle fois le module de classe &lt;code&gt;EvernoteClient &lt;/code&gt;des articles précédents. Ajoutez-y tout ceci :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' EVERNOTE - CREATION D'UNE NOTE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; CreerNote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal strTitre &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; ByVal strContenu &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; Optional ByVal strClasseur &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Boolean&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Quelques variables&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; nb &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Notebook&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; nt &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;note&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Instance d'Evernote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Not&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Connecter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; CreerNote = &lt;span class=&quot;kw1&quot;&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Obtenir le classeur, s'il a été spécifié&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; strClasseur &amp;lt;&amp;gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; nb = &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;ExtraireClasseur&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strClasseur&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; nb Is &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; nb = &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;DefaultNotebook&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Encapsuler le contenu de la note&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' par les balises XML nécessaires&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strContenu = EnteteNote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &amp;amp; strContenu &amp;amp; PiedNote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On crée la note&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; nt = &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;CreateNote&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTitre, strContenu&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; nt.&lt;span class=&quot;me1&quot;&gt;Notebook&lt;/span&gt; = nb&lt;br /&gt;
&amp;nbsp; CreerNote = &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Number&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Un peu de ménage...&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; nt = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; nb = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
NouvelleNoteErr:&lt;br /&gt;
&amp;nbsp; CreerNote = &lt;span class=&quot;kw1&quot;&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' EN-TETE DE NOTE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; EnteteNote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; EnteteNote = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;?xml version=&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot; encoding=&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;?&amp;gt;&amp;quot;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;!DOCTYPE en-note SYSTEM &amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;http://xml.evernote.com/pub/enml2.dtd&amp;quot;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;en-note&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' PIED DE NOTE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; PiedNote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; PiedNote = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;/en-note&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;Explications&lt;/h3&gt;
&lt;p&gt;La méthode &lt;code&gt;CreerNote()&lt;/code&gt; doit recevoir 2 paramètres obligatoires, et un paramètre optionnel :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Le premier paramètre est le &lt;strong&gt;titre de la note&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Le second paramètre est le &lt;strong&gt;corps de la note&lt;/strong&gt; (voir plus loin).&lt;/li&gt;
&lt;li&gt;Le troisième paramètre est le &lt;strong&gt;nom du classeur&lt;/strong&gt; dans lequel créer la note. Si ce paramètre est omis, la note est créée dans le classeur Evernote par défaut.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Format des notes&lt;/h3&gt;
&lt;p&gt;Une &quot;evernote&quot; est créée dans un format XML qui doit respecter un certain nombre de balises. Ces balises sont un sous-ensemble des balises HTML, appelé &quot;ENML&quot; (&lt;em&gt;EverNote Markup Language&lt;/em&gt;). La définition du format est disponible sous forme de DTD (&lt;em&gt;Document Type Definition&lt;/em&gt;), &lt;a hreflang=&quot;fr&quot; href=&quot;http://xml.evernote.com/pub/enml2.dtd&quot;&gt;à cette adresse&lt;/a&gt; (il vous faut un éditeur de texte pour lire cette DTD).&lt;/p&gt;
&lt;p&gt;Comme il s'agit de XML, l'ensemble de la note doit démarrer par en-tête précis et se terminer par un pied précis. Pour simplifier la gestion, ces 2 parties sont gérées par des fonctions dédiées &lt;code&gt;EnteteNote()&lt;/code&gt; et &lt;code&gt;PiedNote()&lt;/code&gt;. Du coup, lorsque vous créerez une note à partir d'Access, vous n'aurez plus à fournir l'en-tête et le pied de note ; il suffira de renseigner le corps de la note.&lt;/p&gt;
&lt;div class=&quot;warning-header&quot;&gt;Attention&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;Si le corps de la note ne respecte pas le format ENML, la note ne pourra pas être stockée.&lt;/div&gt;
&lt;h3&gt;Tester le code&lt;/h3&gt;
&lt;p&gt;Vous savez que les modules de classe ne peuvent pas être testés directement : il faut un bloc de code, dans un module standard, pour les &quot;mettre en scène&quot;. Par conséquent, créez (ou reprenez) un module standard, et recopiez-y ce bout de code, qui crée 2 notes, l'une dans le classeur par défaut, l'autre dans un classeur nommé :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' EVERNOTE - CREATION DE NOTES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; TestEvernoteClient&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; ec &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; EvernoteClient&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Une instance du client EvernoteNote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ec = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; EvernoteClient&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Identifiants&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;Utilisateur&lt;/span&gt; = EN_UTILISATEUR&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;MotDePasse&lt;/span&gt; = EN_MOTDEPASSE&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Création d'une note dans le classeur par défaut&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;CreerNote&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Evernote, Hello World!&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot; Ceci est ma première evernote postée par Access...&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Création d'une note dans un classeur précis&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;CreerNote&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Evernote, note 2&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Et hop, une deuxième note !&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;SelfAccess&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On ferme !&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ec = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Le format ENML reprend un certain nombre de balises HTML. Si vous connaissez la mise en page Web, vous ne serez pas dépaysé ! Par exemple, pour obtenir une note avec du gras et de l'italique, vous écrirez :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;ec.&lt;span class=&quot;me1&quot;&gt;CreerNote&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Evernote, note 3, _&lt;br /&gt;
&amp;nbsp; &amp;quot;&lt;/span&gt;Voici une &amp;lt;b&amp;gt;evernote&amp;lt;/b&amp;gt; avec de &amp;lt;i&amp;gt;l&lt;span class=&quot;co1&quot;&gt;'italique&amp;lt;/i&amp;gt;.&amp;quot; &lt;/span&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/12/01/Evernote-et-VBA-Episode-4#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/12/01/Evernote-et-VBA-Episode-4#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/379</wfw:commentRss>
      </item>
    
  <item>
    <title>Evernote et VBA - Episode 3</title>
    <link>http://grenier.self-access.com/?post/2011/11/30/Evernote-et-VBA-Episode-3</link>
    <guid isPermaLink="false">urn:md5:35908f59de456770537bcdaa3e642e66</guid>
    <pubDate>Wed, 30 Nov 2011 22:21:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>automation</category><category>cloud</category><category>evernote</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Suite de la semaine Evernote ! Dans les épisodes précédents, nous avons d'abord testé Evernote en direct, puis mis en place une classe VBA qui encapsule l'accès à Evernote. Aujourd'hui, nous allons enrichir cette classe pour permettre la &lt;strong&gt;création de classeurs&lt;/strong&gt; dans Evernote.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote-logo-ombre.png&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Si vous avez manqué le début&lt;/h3&gt;
&lt;p&gt;Tout ce qui suit dépend des articles précédents. Pensez à les consulter si vous passez pour la première fois par ici :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/25/Evernote-et-VBA-Episode-1&quot;&gt;Evernote et VBA - Episode 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/29/Evernote-et-VBA-Episode-2&quot;&gt;Evernote et VBA - Episode 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
&lt;p&gt;Reprenez le module de classe créé dans l'article Evernote et VBA - Episode 2, et ajoutez-y le bloc de code suivant, par exemple sous la fonction &lt;code&gt;Connecter()&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' EVERNOTE - CREATION D'UN CLASSEUR&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; CreerClasseur&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal strNomClasseur &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; ByVal ntTypeClasseur &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;NotebookType_t&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Boolean&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Quelques variables&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; nb &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Notebook&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Instance d'Evernote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Not&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Connecter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; CreerClasseur = &lt;span class=&quot;kw1&quot;&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Classeur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;On&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Error&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Resume&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Next&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; nb = &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;CreateNotebook&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; ntTypeClasseur, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; strNomClasseur&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; CreerClasseur = &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Number&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Un peu de ménage...&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; nb = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' OBTENIR UN CLASSEUR PAR SON NOM&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Note : On suppose que la connexion est établie&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; ExtraireClasseur&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal strClasseur &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Notebook&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Le classeur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; nb &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Notebook&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On parcourt les classeurs&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' jusqu'à trouver une concordance&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' sur le nom&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each nb In &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Notebooks&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;LCase&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;nb.&lt;span class=&quot;kw1&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;LCase&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strClasseur&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ExtraireClasseur = nb&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Next&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ExtraireClasseur = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Globalement, la fonction &lt;code&gt;CreerClasseur()&lt;/code&gt; encapsule la méthode &lt;code&gt;Evernote.CreateNotebook()&lt;/code&gt;.&lt;br /&gt;Vous devez lui fournir :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;le &lt;strong&gt;nom du classeur&lt;/strong&gt; à créer&lt;/li&gt;
&lt;li&gt;le &lt;strong&gt;type de classeur&lt;/strong&gt; ; dans Evernote, un classeur peut être synchronisé dans le cloud (&lt;code&gt;SynchronizedNotebook&lt;/code&gt;) ou seulement stocké sur votre ordinateur (&lt;code&gt;LocalNotebook&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La fonction &lt;code&gt;CreerClasseur()&lt;/code&gt; renvoie &lt;code&gt;True &lt;/code&gt;si la création s'est bien effectuée. Sinon, elle renvoie... devinez ! :-)&lt;/p&gt;
&lt;p&gt;Une deuxième fonction, &lt;code&gt;ExtraireClasseur()&lt;/code&gt; permet de récupérer une instance de classeur à partir de son nom. Elle ne sert pas pour l'instant, mais elle sera utilisée dans les prochains articles.&lt;/p&gt;
&lt;h3&gt;Tester !&lt;/h3&gt;
&lt;p&gt;Pour tester tout ça, recopiez le code qui suit dans un module standard, et exécutez-le. Vous devriez obtenir 2 nouveaux classeurs dans votre Evernote (l'un local, l'autre synchronisé dans le nuage).&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote_classeurs.png&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' EVERNOTE - CREATION DE CLASSEURS&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; TestEvernoteClient&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; ec &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; EvernoteClient&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Une instance du client EvernoteNote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ec = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; EvernoteClient&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Identifiants&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;Utilisateur&lt;/span&gt; = EN_UTILISATEUR&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;MotDePasse&lt;/span&gt; = EN_MOTDEPASSE&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Création d'un classeur local&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;CreerClasseur&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Classeur LOCAL&amp;quot;&lt;/span&gt;, LocalNotebook&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Création d'un classeur synchronisé&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;CreerClasseur&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Classeur CLOUD&amp;quot;&lt;/span&gt;, SynchronizedNotebook&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On ferme !&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ec = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Information&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Les classeurs créés par code n'apparaissent pas immédiatement dans l'application Evernote. Si vous avez un doute, quittez Evernote et rouvrez-le.&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/11/30/Evernote-et-VBA-Episode-3#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/11/30/Evernote-et-VBA-Episode-3#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/378</wfw:commentRss>
      </item>
    
  <item>
    <title>Evernote et VBA - Episode 2</title>
    <link>http://grenier.self-access.com/?post/2011/11/29/Evernote-et-VBA-Episode-2</link>
    <guid isPermaLink="false">urn:md5:68def667358a2831e1694b4278a8f3cb</guid>
    <pubDate>Tue, 29 Nov 2011 07:59:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>automation</category><category>cloud</category><category>evernote</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Semaine spéciale &lt;strong&gt;Evernote&lt;/strong&gt; dans le Grenier &lt;strong&gt;self-access.com&lt;/strong&gt; ! Cet article fait suite à celui intitulé &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/25/Evernote-et-VBA-Episode-1&quot;&gt;Evernote et VBA - Episode 1&lt;/a&gt; qui affichait des vos classeurs et vos notes Evernote.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote-logo-ombre.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Aujourd'hui, pas grand chose de spectaculaire : nous allons préparer une classe VBA pour &quot;encapsuler&quot; l'accès à l'application Evernote, et pour éviter de réécrire 30 fois les mêmes choses plus tard.&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Objectif&lt;/h3&gt;
&lt;p&gt;L'objectif de notre classe &lt;code&gt;EvernoteClient &lt;/code&gt;est pour l'instant :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;De stocker (le temps d'une exécution) les identifiants de connexion à Evernote.&lt;/li&gt;
&lt;li&gt;De gérer la connexion.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;Dans votre base de données, créez un module de classe (attention : pas un module standard).&lt;/li&gt;
&lt;li&gt;Recopiez-y le code suivant :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Option&lt;/span&gt; Compare &lt;span class=&quot;kw1&quot;&gt;Database&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Option&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Explicit&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Variables de classe&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; m_strUtilisateur &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; m_strMotDePasse &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; m_enApp &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' CONSTRUCTEUR / DESTRUCTEUR&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; Class_Initialize&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; m_enApp = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; Class_Terminate&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; m_enApp = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' PROPRIETES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Let&lt;/span&gt; Utilisateur&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ByVal strUtilisateur &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; m_strUtilisateur = strUtilisateur&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Get&lt;/span&gt; Utilisateur&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Utilisateur = m_strUtilisateur&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Let&lt;/span&gt; MotDePasse&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ByVal strMotDePasse &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; m_strMotDePasse = strMotDePasse&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Get&lt;/span&gt; MotDePasse&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; MotDePasse = m_strMotDePasse&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Get&lt;/span&gt; Evernote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; Evernote = m_enApp&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Property&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' METHODES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' CONNEXION&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; Connecter&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Boolean&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Est-on déjà connecté ?&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Not&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt; Is &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Connecter = &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Connexion&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;On&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Error&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Resume&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Next&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; m_enApp = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; m_enApp.&lt;span class=&quot;me1&quot;&gt;Login&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Utilisateur&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;MotDePasse&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Valeur de retour&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Connecter = &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Number&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;Explications&lt;/h3&gt;
&lt;p&gt;Comme vous le voyez, cette classe ne fait pas encore grand chose :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;La partie haute de la classe déclare les &lt;strong&gt;variables privées&lt;/strong&gt; qui serviront à la gestion interne.&lt;/li&gt;
&lt;li&gt;Vient ensuite une série de &lt;strong&gt;propriétés &lt;/strong&gt;&lt;code&gt;Get/Let&lt;/code&gt; qui permettent l'accès aux variables privées.&lt;/li&gt;
&lt;li&gt;Et enfin, une méthode &lt;code&gt;Connecter()&lt;/code&gt; pour ouvrir la connexion. La fonction renvoie &lt;code&gt;True &lt;/code&gt;si tout s'est bien passé.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tester&lt;/h3&gt;
&lt;p&gt;Voici une petite procédure (à recopier cette fois dans un module standard), pour tester si tout marche bien :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' TEST DE CONNEXION EVERNOTE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; TestEvernoteSimple&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; ec &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; EvernoteClient&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Instance d'Evernote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ec = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; EvernoteClient&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Identifiants&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;Utilisateur&lt;/span&gt; = EN_UTILISATEUR&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ec.&lt;span class=&quot;me1&quot;&gt;MotDePasse&lt;/span&gt; = EN_MOTDEPASSE&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On teste !&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Résultat de la connexion : &amp;quot;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp; ec.&lt;span class=&quot;me1&quot;&gt;Connecter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbInformation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Et on libère... ;-)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ec = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez l'exécuter en plaçant le curseur à l'intérieur du bloc &lt;code&gt;Sub / End Sub&lt;/code&gt;, puis en cliquant sur l'icône &lt;em&gt;Exécuter Sub/UserForm&lt;/em&gt;. Vous devriez obtenir ceci :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;CAPT&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote_ok.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Apuka patienter jusqu'au prochain épisode !&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/11/29/Evernote-et-VBA-Episode-2#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/11/29/Evernote-et-VBA-Episode-2#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/377</wfw:commentRss>
      </item>
    
  <item>
    <title>Evernote et VBA - Episode 1</title>
    <link>http://grenier.self-access.com/?post/2011/11/25/Evernote-et-VBA-Episode-1</link>
    <guid isPermaLink="false">urn:md5:da2adcc682c748972af8be76382c5e7c</guid>
    <pubDate>Mon, 28 Nov 2011 21:29:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>automation</category><category>cloud</category><category>evernote</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Vous connaissez certainement &lt;strong&gt;Evernote&lt;/strong&gt; (&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.evernote.com&quot;&gt;www.evernote.com&lt;/a&gt;), le logiciel de prise de notes avec synchronisation dans le &quot;nuage&quot;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote-logo-ombre.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt; Evernote est à la fois une application de bureau (Windows et Mac), une application pour mobiles et tablettes (iPhone, Android, BlackBerry, Windows Phone) et une extension pour navigateur. Rien que ça ! Les notes que vous prenez sur n'importe lequel de ces supports sont transférées automatiquement sur le site Evernote, et peuvent être retrouvées sur les autres supports.&lt;/p&gt;
&lt;p&gt;Dans cette nouvelle série, nous allons voir comment Access mais aussi Excel, Word... peuvent lire des données Evernote, ou envoyer des notes dans cette application.&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Mise en place&lt;/h3&gt;
&lt;p&gt;Pour que votre connexion Evernote fonctionne, voici ce que vous devez préparer :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Créez-vous un compte sur le site Evernote, si ce n'est pas déjà le cas.&lt;/li&gt;
&lt;li&gt;Installez le &lt;strong&gt;client Evernote&lt;/strong&gt; (l'application de bureau) sur votre ordinateur. Celle-ci fournit les bibliothèques nécessaires pour interfacer efficacement Access et Evernote.&lt;/li&gt;
&lt;li&gt;Dans votre base de données Access (ou dans votre classeur Excel, votre document Word), ouvrez Visual Basic Editor (&lt;code&gt;[Alt]&lt;/code&gt; + &lt;code&gt;[F11]&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Cliquez sur le menu &lt;strong&gt;Outils / Références&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Cochez la bibliothèque &lt;em&gt;Evernote APi (enapi)&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Les portions de VBA à venir font également appel à la fonction &lt;code&gt;StringFormat()&lt;/code&gt; (voir &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/25/?post/2010/03/20/Marre-des-concatenations&quot;&gt;cette page&lt;/a&gt; du blog).&lt;/p&gt;
&lt;h3&gt;Quelques classes à connaître&lt;/h3&gt;
&lt;p&gt;L'API Evernote (&lt;em&gt;enapiLib&lt;/em&gt;) permet d'attaquer l'application du même nom à partir de VBA. Pour cela, elle expose un certain nombre d'objets dont :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;L'application Evernote (&lt;code&gt;Evernote&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Le classeur (&lt;code&gt;Notebook&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;La note (&lt;code&gt;Note&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et quelques collections utiles comme :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;La liste des classeurs (&lt;code&gt;Evernote.Notebooks&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;La liste des notes d'un classeur donné (&lt;code&gt;Notebook.Notes&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Exemple pratique&lt;/h3&gt;
&lt;p&gt;Dans ce premier exemple, nous allons tâcher d'afficher le contenu de votre base Evernote, à savoir : la liste des classeurs, le nombre de notes qui s'y trouvent, le titre et la date de création de chaque note (vous noterez le format curieux des dates pour l'instant).&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/cloud/evernote_info.png&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Créez un module standard dans votre base de données.&lt;/li&gt;
&lt;li&gt;Ajoutez les 2 constantes et la procédure qui suit dans le module (les constantes servent à centraliser vos identifiants Evernote).&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Const&lt;/span&gt; EN_UTILISATEUR &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;identifiant_evernote&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Const&lt;/span&gt; EN_MOTDEPASSE &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;mot_de_passe_evernote&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' DETAIL DES CLASSEURS EVERNOTE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; EvernoteInfo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; en &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; nb &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Notebook&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; nt &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;note&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Instance d'Evernote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; en = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; enapiLib.&lt;span class=&quot;me1&quot;&gt;Evernote&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Connexion&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; en.&lt;span class=&quot;me1&quot;&gt;Login&lt;/span&gt; EN_UTILISATEUR, EN_MOTDEPASSE, &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Nombre de classeurs&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Classeurs : &amp;quot;&lt;/span&gt; &amp;amp; en.&lt;span class=&quot;me1&quot;&gt;Notebooks&lt;/span&gt;.&lt;span class=&quot;kw1&quot;&gt;Count&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Classeur par défaut&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; nb = en.&lt;span class=&quot;me1&quot;&gt;DefaultNotebook&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Classeur par défaut : &amp;quot;&lt;/span&gt; &amp;amp; nb.&lt;span class=&quot;kw1&quot;&gt;Name&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Liste des classeurs&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each nb In en.&lt;span class=&quot;me1&quot;&gt;Notebooks&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Infos sur le classeur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; StringFormat&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;{0} - {1} ({2})&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nb.&lt;span class=&quot;me1&quot;&gt;Id&lt;/span&gt;, nb.&lt;span class=&quot;kw1&quot;&gt;Name&lt;/span&gt;, nb.&lt;span class=&quot;me1&quot;&gt;Notes&lt;/span&gt;.&lt;span class=&quot;kw1&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Détail des notes du classeur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each nt In nb.&lt;span class=&quot;me1&quot;&gt;Notes&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; StringFormat&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;nbsp; &amp;gt; {0} - {1}&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nt.&lt;span class=&quot;me1&quot;&gt;DateCreated&lt;/span&gt;, nt.&lt;span class=&quot;me1&quot;&gt;Title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Next&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Next&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Un peu de ménage...&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; en = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;warning-header&quot;&gt;Attention&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;Le mot de passe ne devrait pas être stocké &quot;en dur&quot; dans la base. Vous devriez le demander à l'utilisateur à chaque session Access.&lt;/div&gt;
&lt;h3&gt;Explications&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;La variable &lt;code&gt;en &lt;/code&gt;pointe une instance de l'application Evernote. Les instructions principales sont appelées à partir de cette variable.&lt;/li&gt;
&lt;li&gt;Parmi elles, la méthode &lt;code&gt;Login &lt;/code&gt;sert à ouvrir la connexion (vous lui fournissez logiquement votre identifiant et votre mot de passe).&lt;/li&gt;
&lt;li&gt;On affiche ensuite le nombre de classeurs disponibles (&lt;code&gt;en.Notebooks.Count&lt;/code&gt;), et le nom du classeur par défaut (&lt;code&gt;en.DefaultNotebook.Name&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Enfin, on parcourt par une boucle la collection des classeurs (&lt;code&gt;en.Notebooks&lt;/code&gt;) pour afficher le code (&lt;code&gt;ID&lt;/code&gt;), le nom (&lt;code&gt;Name&lt;/code&gt;) et le nombre de notes (&lt;code&gt;Notes.Count&lt;/code&gt;) de chaque classeur.&lt;/li&gt;
&lt;li&gt;A l'intérieur de la boucle &quot;Classeurs&quot;, une boucle &quot;Notes&quot; affiche la date de création (&lt;code&gt;DateCreated&lt;/code&gt;) et le titre (&lt;code&gt;Title&lt;/code&gt;) de chaque note.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tester le code&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;Affichez la fenêtre Exécution (&lt;code&gt;CTRL&lt;/code&gt; + &lt;code&gt;G&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Placez le curseur dans la portion de code précédente.&lt;/li&gt;
&lt;li&gt;Cliquez sur l'icône &lt;em&gt;Exécuter Sub/UserForm&lt;/em&gt;, en haut de votre écran.&lt;/li&gt;
&lt;li&gt;Exécutez la procédure, les résultats s'affichent dans la fenêtre &lt;strong&gt;Exécution&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/11/25/Evernote-et-VBA-Episode-1#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/11/25/Evernote-et-VBA-Episode-1#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/376</wfw:commentRss>
      </item>
    
  <item>
    <title>Vérifier l'intersection de dates - Episode 2</title>
    <link>http://grenier.self-access.com/?post/2011/11/25/Verifier-lintersection-de-dates-Episode-2</link>
    <guid isPermaLink="false">urn:md5:cbe746c588ef0bb5aad1c7c6b6fc74ae</guid>
    <pubDate>Fri, 25 Nov 2011 12:26:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Dates et heures</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>dlookup</category><category>formulaire</category><category>table</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;L'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/24/Verifier-lintersection-de-dates&quot;&gt;Vérifier l'intersection de dates&lt;/a&gt; nous a permis de mettre en place une fonction VBA capable de vérifier si 2 créneaux de temps se chevauchent. Aujourd'hui, nous allons voir une application pratique de cette fonction, au travers d'un mini système de réservation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/dates/formulaire_reservation.png&quot; /&gt;&lt;/p&gt;    &lt;h3&gt;Le principe&lt;/h3&gt;
&lt;p&gt;Dans ce scénario, vous gérez un hôtel de plusieurs chambres (un hôtel, quoi !). Les réservations sont stockées dans une table (dans le modèle complet, on peut imaginer d'autres tables : Clients, Chambres, etc.).&lt;/p&gt;
&lt;p&gt;L'idée consiste à vérifier, avant d'ajouter de nouvelles données dans la table, qu'une nouvelle réservation ne rentre pas en conflit avec une réservation existante. On n'est pas le Carlton de Lille non plus ;-)&lt;/p&gt;
&lt;h3&gt;La table&lt;/h3&gt;
&lt;p&gt;On dispose d'une table qui contient les informations suivantes (et d'autres encore, inutiles ici) :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Numéro Réservation&lt;/code&gt; (un &lt;em&gt;NuméroAuto&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Date Arrivée &lt;/code&gt;(Date/Heure)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Date Départ &lt;/code&gt;(Date/Heure)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Numéro Chambre &lt;/code&gt;(Numérique)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Numéro Client &lt;/code&gt;(Numérique)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;CAPT&quot; src=&quot;http://grenier.self-access.com/public/dates/table_reservations.png&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Le formulaire&lt;/h3&gt;
&lt;p&gt;Le formulaire est constitué :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;D'un champ &lt;code&gt;txtDateArrivee&lt;/code&gt;, au format &lt;code&gt;jj/mm/aaaa hh:nn&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;D'un champ &lt;code&gt;txtDateDepart&lt;/code&gt;, au format &lt;code&gt;jj/mm/aaaa hh:nn&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;D'une liste déroulante &lt;code&gt;cmbChambre &lt;/code&gt;qui permet de choisir les numéros de chambres.&lt;/li&gt;
&lt;li&gt;D'un bouton &lt;code&gt;btnVerifier &lt;/code&gt;qui va s'occuper de la vérification des disponibilités pour la chambre choisie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/dates/formulaire_reservation_depart.png&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Le code VBA du formulaire&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;Faites apparaître les propriétés du bouton, onglet &lt;strong&gt;Événements&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Renseignez l'événement &lt;code&gt;Sur clic&lt;/code&gt; sur &lt;code&gt;Procédure événementielle&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cliquez sur les points de suspension à droite de l'événement.&lt;/li&gt;
&lt;li&gt;Recopiez le code VBA suivant :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; btnVerifier_Click&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strSQL &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strCritere &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Vérifier que toutes les infos sont renseignées&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IsNull&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;txtDateArrivee&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Or&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IsNull&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;txtDateDepart&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Or&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IsNull&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;cmbChambre&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Toutes les informations doivent être renseignées !&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Chaîne SQL de base&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strSQL = _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;(DatesIntersect({0}, {1}, [Date Arrivée], [Date Départ]) = True)&amp;quot;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot; AND ([Numéro Chambre] = {2})&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Critère final&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strCritere = StringFormat&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strSQL, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; DateHeureUS&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;txtDateArrivee&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; DateHeureUS&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;txtDateDepart&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;cmbChambre&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Si au moins 1 enregistrement répond au critère,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' la période est déjà réservée...&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; DCount&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;*&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;tbl Réservations&amp;quot;&lt;/span&gt;, strCritere&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Une réservation existe déjà sur cette période !&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;La période est disponible pour cette chambre.&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;vbInformation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;warning-header&quot;&gt;Important&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;Le code VBA du bouton fait appel à 2 autres fonctions traitées sur ce blog : la fonction &lt;code&gt;DateHeureUS()&lt;/code&gt; et la fonction &lt;code&gt;StringFormat()&lt;/code&gt;. Consultez les articles &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/08/24/Dates-anglo-saxonnes&quot;&gt;Dates anglo-saxonnes&lt;/a&gt; et &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/03/20/Marre-des-concatenations&quot;&gt;Marre des concaténations ?&lt;/a&gt; pour récupérer ces fonctions dans votre propre base de données.&lt;/div&gt;
&lt;h3&gt;Explications&lt;/h3&gt;
&lt;p&gt;Le bouton procède en 3 temps :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Dans un premier temps, on vérifie que les 3 informations ont bien été renseignées par l'utilisateur. Il est inutile de continuer si ce n'est pas le cas !&lt;/li&gt;
&lt;li&gt;Ensuite, on construit le filtre SQL qui va chercher - pour la chambre concernée - une intersection entre les dates souhaitées et les dates de la table de réservations. J'ai décomposé la construction du critère en 2 chaînes pour que vous voyiez mieux le processus. C'est à ce niveau que la fonction &lt;code&gt;StringFormat()&lt;/code&gt; nous épargne des concaténations laborieuses...&lt;/li&gt;
&lt;li&gt;Enfin, on utilise la fonction &lt;code&gt;DCount()&lt;/code&gt; pour compter les réservations répondant au critère (donc les réservations en conflit avec la période cherchée). On aurait pu aussi utiliser &lt;code&gt;DLookup()&lt;/code&gt; pour trouver la première réservation en conflit (au lieu de compter toutes les réservations).&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/11/25/Verifier-lintersection-de-dates-Episode-2#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/11/25/Verifier-lintersection-de-dates-Episode-2#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/375</wfw:commentRss>
      </item>
    
  <item>
    <title>Vérifier l'intersection de dates - Episode 1</title>
    <link>http://grenier.self-access.com/?post/2011/11/24/Verifier-lintersection-de-dates</link>
    <guid isPermaLink="false">urn:md5:41bd8b67b07f7dee0e6be38110b3c4d1</guid>
    <pubDate>Thu, 24 Nov 2011 10:56:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Dates et heures</category>
        <category>access 2</category><category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;J'ai une réservation de dates (du tant au tant). Comment vérifier si cette réservation tombe sur une période déjà réservée ? En d'autres termes : comment tester l'intersection de 2 fenêtres de temps ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le code&lt;/h3&gt;
&lt;p&gt;Comme ce type de vérification revient assez souvent, nous allons en faire une fonction VBA qui sera utilisable plus rapidement ensuite dans Access. La fonction recevra 4 dates :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;les 2 dates du premier créneau temps (on suppose que date1 est inférieure ou égale à date2)&lt;/li&gt;
&lt;li&gt;les 2 dates du deuxième créneau temps (la fenêtre de temps à comparer).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour mettre en place la fonction :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Démarrez Visual Basic Editor (touches &lt;code&gt;ALT&lt;/code&gt; + &lt;code&gt;F11&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Ouvrez un module standard, sinon cliquez sur le menu &lt;strong&gt;Insertion / Module&lt;/strong&gt;, pour en créer un nouveau.&lt;/li&gt;
&lt;li&gt;Recopiez dans le module le code suivant :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' INTERSECTION DE CRENEAUX DE DATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Entrée : dtDate1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;- Première date&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dtDate2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;- Deuxième date (&amp;gt;= dtDate1)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dtFenetreDebut &amp;lt;- Départ du créneau temps&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dtFenetreFin&amp;nbsp; &amp;nbsp;&amp;lt;- Fin du créneau temps&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Sortie : True si les 2 créneaux se chevauchent.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; DatesIntersect&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ByVal dtDate1 &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Date&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ByVal dtDate2 &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Date&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ByVal dtFenetreDebut &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Date&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ByVal dtFenetreFin &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Boolean&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; DatesIntersect = &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;dtDate2 &amp;gt;= dtFenetreDebut&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;And&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;dtDate1 &amp;lt;= dtFenetreFin&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;/div&gt;&lt;h3&gt;Explications&lt;/h3&gt;
&lt;p&gt;La fonction renvoie &lt;code&gt;True &lt;/code&gt;(Vrai) si le premier créneau temps chevauche le deuxième, et &lt;code&gt;False &lt;/code&gt;sinon.&lt;/p&gt;
&lt;p&gt;Vous pouvez la tester directement dans la fenêtre &lt;strong&gt;Exécution &lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Faites apparaître la fenêtre &lt;strong&gt;Exécution &lt;/strong&gt;(&lt;code&gt;CTRL &lt;/code&gt;+ &lt;code&gt;G&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Tapez quelque chose comme :&lt;br /&gt;&lt;code&gt;? DatesIntersect(#1/1/2012#, #1/15/2012#, #2/1/2012#, #2/10/2012#)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Appuyez sur &lt;code&gt;[Entrée]&lt;/code&gt; pour valider.&lt;br /&gt;Vous devriez obtenir &lt;code&gt;False&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cette variante devrait par contre donner &lt;code&gt;True &lt;/code&gt;:&lt;br /&gt;&lt;code&gt;? DatesIntersect(#1/1/2012#, #1/15/2012#, #1/15/2012#, #2/10/2012#)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Note&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Pour les tests dans VBE, les dates sont écrites au format anglo-saxon &lt;code&gt;#mm/jj/aaaa#&lt;/code&gt;. La fonction marchera bien sûr dans des requêtes ou des formulaires Access, avec des dates françaises.&lt;/div&gt;
&lt;p&gt;Prochainement sur le blog, un article pour mettre cette fonction en application. Stay tuned!&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/11/24/Verifier-lintersection-de-dates#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/11/24/Verifier-lintersection-de-dates#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/374</wfw:commentRss>
      </item>
    
  <item>
    <title>Transmettre des données Access via HTTP</title>
    <link>http://grenier.self-access.com/?post/2011/11/23/Transmettre-des-donnees-Access-via-HTTP</link>
    <guid isPermaLink="false">urn:md5:66308bbcb987323c4136fd6d1f4fa76a</guid>
    <pubDate>Wed, 23 Nov 2011 09:49:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;A partir d'Access, je souhaiterais remplir un formulaire Web via le protocole HTTP. Comment faire ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Scénario&lt;/h3&gt;
&lt;p&gt;Dans cet article, on part d'un scénario simple, pour poser les bases. Je dispose :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;D'un serveur HTTP de test Apache, avec quelques bouts de code en PHP. En pratique, il s'agit d'un serveur WAMP installé sur une machine de test (WAMP = Windows, Apache, MySQL et PHP, plus quelques outils supplémentaires).&lt;/li&gt;
&lt;li&gt;Les serveurs Apache et MySQL sont supposés en cours d'exécution.&lt;/li&gt;
&lt;li&gt;Sur ce serveur, un dossier &lt;code&gt;access_tests&lt;/code&gt;. Sur une installation standard de WAMP, ce dossier est physiquement situé dans &lt;code&gt;C:\wamp\www\access_tests&lt;/code&gt;. Son adresse HTTP est par conséquent : &lt;code&gt;http://SERVEUR/access_tests&lt;/code&gt;, où &lt;code&gt;SERVEUR &lt;/code&gt;est soit le nom du serveur, soit son adresse IP.&lt;/li&gt;
&lt;li&gt;Dans le dossier, un formulaire HTML a été créé. La page qui contient ce formulaire s'appelle &lt;code&gt;formulaire.html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Le formulaire est lui-même transmis à une page de traitement appelée &lt;code&gt;resultat.php&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le formulaire HTML&lt;/h3&gt;
&lt;p&gt;La construction du formulaire n'est pas le sujet de cet article. Voici simplement à quoi ressemble le formulaire :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/formulaire_html.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Les champs, de haut en bas, s'appellent (attribut &lt;code&gt;name&lt;/code&gt; de la balise &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;, en HTML) : &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;nom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prenom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;email&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce sont ces noms de champs qui vont servir à la transmission de données.&lt;br /&gt;Le formulaire HTML a pour méthode &lt;code&gt;POST&lt;/code&gt;, et pour action &lt;code&gt;resultat.php&lt;/code&gt; (la page qui traitera les résultats).&lt;/p&gt;
&lt;h3&gt;La page de traitement de résultats&lt;/h3&gt;
&lt;p&gt;La page de traitement des résultats s'appelle donc &lt;code&gt;resultat.php&lt;/code&gt;. Voici le code simplifié de cette page (le code gagnerait à être amélioré et sécurisé, mais nous irons à l'essentiel pour la démo, puisque l'exemple tourne sur un serveur fermé).&lt;/p&gt;
&lt;div class=&quot;php&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;a href=&quot;http://www.php.net/header&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;header&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'Content-Type: text/html; charset=UTF-8'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;'NOM = '&lt;/span&gt; . &lt;span class=&quot;re0&quot;&gt;$_POST&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'nom'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; . &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;'PRENOM = '&lt;/span&gt; . &lt;span class=&quot;re0&quot;&gt;$_POST&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'prenom'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; . &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;'EMAIL = '&lt;/span&gt; . &lt;span class=&quot;re0&quot;&gt;$_POST&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'email'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; . &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;kw2&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;Si vous êtes habitué à PHP, vous voyez que ce code affiche les champs &lt;code&gt;nom&lt;/code&gt;, &lt;code&gt;prenom &lt;/code&gt;et &lt;code&gt;email &lt;/code&gt;transmis par la méthode &lt;code&gt;POST&lt;/code&gt;. J'ai supposé que ces champs étaient vraiment transmis (qu'il n'en manque pas lors de la transmission). On pourra ajouter des vérifications plus fines plus tard.
&lt;p&gt;A ce stade, si vous remplissez le formulaire et cliquez sur le bouton &lt;strong&gt;Envoyer&lt;/strong&gt;, le formulaire est transmis à la page de traitement, et les résultats bruts sont affichés dans le navigateur.&lt;/p&gt;
&lt;h2&gt;Envoi des données à partir d'Access&lt;/h2&gt;
&lt;p&gt;Maintenant que tout est en place et que l'enchaînement formulaire / traitement a pu être testé, nous souhaitons transférer les mêmes données à partir d'Access. En d'autres termes : le formulaire HTML ne sert plus, c'est Access qui va transmettre directement les résultats à la page &lt;code&gt;resultat.php&lt;/code&gt;. De retour à votre base de données Access :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Démarrez Visual Basic Editor (touches &lt;code&gt;ALT&lt;/code&gt; + &lt;code&gt;F11&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Commencez par établir une référence à &lt;em&gt;Microsoft XML&lt;/em&gt;, dans le menu &lt;strong&gt;Outils / Références&lt;/strong&gt; (si vous avez plusieurs bibliothèques de même nom, prenez la plus récente).&lt;/li&gt;
&lt;li&gt;Cliquez sur le menu &lt;strong&gt;Insertion / Module&lt;/strong&gt;, puis recopiez dans le module le code suivant :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' REMPLISSAGE DE FORMULAIRE VIA HTTP&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; RemplissageFormulaire&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strURL &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strParams &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; http &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; MsXML2.&lt;span class=&quot;me1&quot;&gt;ServerXMLHTTP&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' URL du flux à lire&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; strURL = &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://192.168.1.8/access_tests/resultat.php&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; strParams = &lt;span class=&quot;st0&quot;&gt;&amp;quot;nom=Inisan&amp;amp;prenom=Hervé&amp;amp;email=webmaster@self-access.com&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Objet XMLHTTP&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; http = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; MsXML2.&lt;span class=&quot;me1&quot;&gt;ServerXMLHTTP&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Ouverture de l'URL&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; http.&lt;span class=&quot;kw1&quot;&gt;Open&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;, strURL, &lt;span class=&quot;kw1&quot;&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' En-tête de la requête&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; http.&lt;span class=&quot;me1&quot;&gt;setRequestHeader&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Content-encoding&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; http.&lt;span class=&quot;me1&quot;&gt;setRequestHeader&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;application/x-www-form-urlencoded&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; http.&lt;span class=&quot;me1&quot;&gt;setRequestHeader&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Content-Length&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;Str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Len&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strParams&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Envoi&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; http.&lt;span class=&quot;me1&quot;&gt;Send&lt;/span&gt; strParams&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' En cas de réussite, le code renvoyé est 200&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;http.&lt;span class=&quot;me1&quot;&gt;Status&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Afficher la réponse du serveur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' dans la fenêtre Exécution&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;REPONSE HTTP : &amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; http.&lt;span class=&quot;me1&quot;&gt;responseText&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;ERREUR : &amp;quot;&lt;/span&gt; &amp;amp; http.&lt;span class=&quot;me1&quot;&gt;Status&lt;/span&gt; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot; - &amp;quot;&lt;/span&gt; &amp;amp; http.&lt;span class=&quot;me1&quot;&gt;statusText&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On libère les objets&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; http = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt;&lt;/div&gt;&lt;h3&gt;Quelques explications&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Le code repose principalement sur l'objet &lt;code&gt;ServerXMLHTTP &lt;/code&gt;déjà abordé dans la série &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/05/09/Lecture-de-flux-RSS-Episode-1&quot;&gt;Lecture de flux RSS&lt;/a&gt;. D'où la référence faite plus haut, et la variable &lt;code&gt;http&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La variable &lt;code&gt;strURL&lt;/code&gt; contient l'adresse de la page PHP de traitement (encore une fois : le formulaire HTML ne joue plus aucun rôle ici, on transmet directement les résultats à la page finale).&lt;/li&gt;
&lt;li&gt;La chaîne &lt;code&gt;strParams &lt;/code&gt;contient la liste des valeurs à transmettre (celles qui au départ étaient renseignée dans le formulaire HTML). Les valeurs sont écrites sous la forme &quot;&lt;code&gt;champ1=valeur1&amp;amp;champ2=valeur2&lt;/code&gt;&quot;. Les noms de champs doivent respecter ceux traités par la page PHP (&lt;code&gt;nom&lt;/code&gt;, &lt;code&gt;prenom &lt;/code&gt;et &lt;code&gt;email&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;L'adresse est ensuite ouverte par l'instruction &lt;code&gt;http.Open&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Quelques paramètres sont ensuite définis pour préciser le type de demande : encodage des caractères, type de contenu et taille des données (il s'agit de la taille de la chaîne de paramètres). Dans un exemple simple, le code devrait fonctionner même si ces paramètres sont manquants.&lt;/li&gt;
&lt;li&gt;Une fois la communication paramétrée, on peut envoyer les paramètres via la commande &lt;code&gt;http.Send&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Les résultats sont cette fois affichés dans Access, et plus dans le navigateur. Le serveur répond par un statut de 200 si tout s'est bien passé, auquel cas on peut afficher sa réponse (&lt;code&gt;http.responseText)&lt;/code&gt;. Dans le cas contraire, on affiche les valeurs d'erreur.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/http_resultat.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Il y a bien d'autres améliorations à prévoir par la suite, mais vous avez déjà les principes pour tester !&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/11/23/Transmettre-des-donnees-Access-via-HTTP#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/11/23/Transmettre-des-donnees-Access-via-HTTP#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/373</wfw:commentRss>
      </item>
    
  <item>
    <title>Transformer un champ Lien hypertexte en champ Texte</title>
    <link>http://grenier.self-access.com/?post/2011/11/22/Transformer-un-champ-Lien-hypertexte-en-champ-Texte</link>
    <guid isPermaLink="false">urn:md5:df0f596bc8fcf275c6ff54f3b11e1644</guid>
    <pubDate>Tue, 22 Nov 2011 14:11:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>excel</category><category>internet</category><category>table</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Dans une table, j'ai un champ de type &lt;em&gt;Lien hypertexte&lt;/em&gt;. Mais ce champ me pose
régulièrement des soucis lors d'exportation de données vers des
logiciels externes (comme Excel). Je souhaiterais remplacer ce champ par
un champ &lt;em&gt;Texte &lt;/em&gt;simple... en conservant bien sûr tous les données déjà
saisies. Comment faire ?&lt;/p&gt;
&lt;/blockquote&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/hyperlink_excel.png&quot; /&gt;    &lt;h3&gt;Avant de démarrer...&lt;/h3&gt;
&lt;p&gt;Nous allons ici effectuer une modification de structure sur votre table. Anodine, mais quand même... Du coup, pensez à tous les effets que cela pourrait avoir sur votre base de données, si toute votre logique actuelle repose sur les liens hypertexte.&lt;br /&gt;En vous reportant à l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/21/Nettoyer-des-liens-hypertexte-a-la-volee&quot;&gt;Nettoyer des liens hypertexte à la volée&lt;/a&gt;, vous pouvez conserver votre champ &lt;em&gt;Lien hypertexte&lt;/em&gt;, sans modifier l'application, et tout en l'exportant correctement vers Excel.&lt;/p&gt;
&lt;h3&gt;Modification de la table&lt;/h3&gt;
Si vous êtes arrivé jusqu'ici, c'est que vous avez finalement décidé de modifier votre table. Soit !&lt;ol&gt;
&lt;li&gt;Ouvrez votre table en mode Création.&lt;/li&gt;
&lt;li&gt;Positionnez-vous sur le champ de type &lt;em&gt;Lien hypertexte&lt;/em&gt; à modifier.&lt;/li&gt;
&lt;li&gt;Changez le type en : &lt;em&gt;Texte&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Définissez une taille assez grande pour le champ (les 50 caractères proposés par Access seront-il suffisants ?)&lt;/li&gt;
&lt;li&gt;Enregistrez la table. Access vous prévient que des données pourraient être perdues suite à la transformation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On pourrait imaginer que cela se termine là. En fait, Access a bien transformé le champ, mais il a repris tout le contenu du lien hypertexte d'origine, avec ses signes # parasites (voir l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/21/Nettoyer-des-liens-hypertexte-a-la-volee&quot;&gt;Nettoyer des liens hypertexte à la volée&lt;/a&gt; pour plus de détails). J'imagine que les données obtenues ne vous intéressent pas : seules les adresses pures doivent être conservées. Dans ce cas, faites encore ceci :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Prévoyez peut-être une sauvegarde de votre base avant de lancer les hostilités !&lt;/li&gt;
&lt;li&gt;Recopiez dans un module standard tout le code donnée dans l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2011/11/21/Nettoyer-des-liens-hypertexte-a-la-volee&quot;&gt;Nettoyer des liens hypertexte à la volée&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Créez une nouvelle requête basée sur la table concernée.&lt;/li&gt;
&lt;li&gt;Sur le ruban d'Access 2007/2010 (ou les icônes d'Access 2003), cliquez sur l'icône &lt;em&gt;Mise à jour&lt;/em&gt;, pour transformer votre requête... en requête de Mise à jour.&lt;/li&gt;
&lt;li&gt;Déposez le champ &lt;code&gt;Email &lt;/code&gt;sur la grille de requête.&lt;/li&gt;
&lt;li&gt;Dans la case &lt;em&gt;Mise à jour&lt;/em&gt;, tapez comme formule :&lt;br /&gt;&lt;code&gt;GetHyperlink([Email])&lt;/code&gt;&lt;br /&gt;Entre crochets, le nom de votre champ (adaptez si nécessaire).&lt;/li&gt;
&lt;li&gt;Cliquez sur le bouton &lt;strong&gt;Exécuter &lt;/strong&gt;pour déclencher la mise à jour.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L'opération est terminée, la table actualisée. Vous n'êtes pas obligé de conserver la requête de mise à jour...&lt;/p&gt;
&lt;h3&gt;Version SQL&lt;/h3&gt;
&lt;p&gt;En SQL, vous auriez obtenu le même résultat en tapant :&lt;/p&gt;
&lt;div class=&quot;sql&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;UPDATE&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;Nom de votre &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;Email&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; = GetHyperlink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;Email&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/11/22/Transformer-un-champ-Lien-hypertexte-en-champ-Texte#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/11/22/Transformer-un-champ-Lien-hypertexte-en-champ-Texte#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/372</wfw:commentRss>
      </item>
    
  <item>
    <title>Nettoyer des liens hypertexte à la volée</title>
    <link>http://grenier.self-access.com/?post/2011/11/21/Nettoyer-des-liens-hypertexte-a-la-volee</link>
    <guid isPermaLink="false">urn:md5:df8c74e18cf0493a2b11c8efbe3f476a</guid>
    <pubDate>Mon, 21 Nov 2011 13:47:00 +0100</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Internet/Intranet</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>access 97</category><category>excel</category><category>internet</category><category>table</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Dans une table, j'ai un champ de type &lt;em&gt;Lien hypertexte&lt;/em&gt;. Ça marche très
bien dans Access, mais lorsque j'exporte la table vers Excel ou Word,
les liens sont réécrits différemment et deviennent inexploitables.
Comment faire ?
&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le problème&lt;/h3&gt;
Les liens hypertextes permettent de stocker des adresses de sites Web (&lt;code&gt;http://&lt;/code&gt;), des adresses e-mail (&lt;code&gt;mailto:&lt;/code&gt;), ou des fichiers de votre réseau informatique, et de les rendre cliquable dans l'interface d'Access (dans une table, une requête, un formulaire par exemple). Très pratique...&lt;br /&gt;&lt;img alt=&quot;Capture0&quot; src=&quot;http://grenier.self-access.com/?post/2011/11/21/public/network/hyperlink_table.png&quot; /&gt;&lt;br /&gt;Le problème est que, lorsque ces liens sont exportés sous forme de données brutes, ils s'affichent de cette manière : &lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/hyperlink_excel.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Cette forme empêche certains types d'exploitations, comme l'envoi de mails, puisque le lien complet n'est pas une adresse e-mail valide. Ce qui est un comble, puisque c'était l'objectif de départ !&lt;br /&gt;&lt;h3&gt;Structure des liens hypertexte&lt;/h3&gt;
En fait, un lien hypertexte peut être découpé en 3 parties, séparées par un signe &lt;code&gt;#&lt;/code&gt; (certaines parties étant facultatives).&lt;br /&gt;&lt;code&gt;Partie affichée#Adresse#Sous-adresse&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;De gauche à droite :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La &lt;strong&gt;partie affichée&lt;/strong&gt; (lisible par l'utilisateur) ;&lt;/li&gt;
&lt;li&gt;L'&lt;strong&gt;adresse du lien&lt;/strong&gt; proprement dite ; elle débute par &lt;code&gt;mailto:&lt;/code&gt; dans le cas d'un e-mail ;&lt;/li&gt;
&lt;li&gt;La &lt;strong&gt;sous-adresse&lt;/strong&gt;, si l'adresse du lien doit être complétée par d'autres informations. Par exemple, si le lien pointe vers un fichier Excel, la sous-adresse peut être une feuille et une plage de cellules. Dans le cas d'un fichier Word, la sous-adresse peut-être un signet dans le document. La sous-adresse n'est pas utilisée dans le cas d'un e-mail.&lt;/li&gt;
&lt;/ul&gt;
Quelques exemples :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;herve.inisan@provider.com#mailto:herve.inisan@provider.com#&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Le site Self-Access.com#http://www.self-access.com#&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CV#C:\Users\Hervé\Documents\CV.docx#&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Statistiques 2011#stats.xlsx#Feuil3!B5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Solution 1&lt;/h3&gt;
La première solution pour éviter ce problème serait finalement de ne plus utiliser les liens hypertexte, et de les remplacer par des champs &lt;em&gt;Texte&lt;/em&gt;. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Avantage : un champ &lt;em&gt;Texte &lt;/em&gt;ne contient que ce que vous y tapez ; plus de codes parasites !&lt;/li&gt;
&lt;li&gt;Inconvénient : vous perdez le côté &quot;cliquable&quot; des liens hypertexte. (Vous pouvez cependant obtenir des équivalent grâce à la méthode &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/08/09/Access-et-le-web&quot;&gt;FollowHyperlink&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Solution 2&lt;/h3&gt;
Vous souhaitez peut être conserver le meilleur des 2 mondes : garder les liens hypertextes cliquables, et pouvoir les exploiter correctement. C'est ce que nous allons faire ici.&lt;br /&gt;Dans le cas d'un e-mail, seule la partie &lt;strong&gt;Adresse &lt;/strong&gt;nous intéresse. Cette partie est toujours située après le premier signe &lt;code&gt;#&lt;/code&gt; (et avant le second &lt;code&gt;#&lt;/code&gt;). Il suffit d'extraire cette portion de chaîne pour obtenir l'e-mail. Autre précaution à prendre, quand même : il faut pouvoir enlever le &lt;code&gt;mailto:&lt;/code&gt; dans certains cas (il sera généralement inutile).&lt;br /&gt;&lt;h3&gt;Le code VBA&lt;/h3&gt;
Voici un bout de code VBA à recopier dans un module standard de votre base de données. L'énumération (le bloc &lt;code&gt;Enum / End Enum&lt;/code&gt;) sera placé en haut du module.&lt;br /&gt;&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Enum&lt;/span&gt; HyperlinkPrefix&lt;br /&gt;
&amp;nbsp; &amp;nbsp; none = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; all = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; http = &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; mailto = &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Enum&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' EXTRACTION DE L'ADRESSE D'UN LIEN HYPERTEXTE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; GetHyperlink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ByVal strLink &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Optional ByVal hlpClearPrefix &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; HyperlinkPrefix _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = HyperlinkPrefix.&lt;span class=&quot;me1&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Quelques variables&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strTemp &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; intI &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Integer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; intJ &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Integer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Position du premier #&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; strTemp = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; intI = &lt;span class=&quot;kw1&quot;&gt;InStr&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;, strLink, &lt;span class=&quot;st0&quot;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbTextCompare&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; intI &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Position du second #&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; intJ = &lt;span class=&quot;kw1&quot;&gt;InStr&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;intI + &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;, strLink, &lt;span class=&quot;st0&quot;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbTextCompare&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; intJ &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Partie Adresse&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strTemp = &lt;span class=&quot;kw1&quot;&gt;Trim&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Mid&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strLink, intI + &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;, intJ - intI - &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Suppression du mailto: si nécessaire&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;hlpClearPrefix = HyperlinkPrefix.&lt;span class=&quot;me1&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Or&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;hlpClearPrefix = HyperlinkPrefix.&lt;span class=&quot;me1&quot;&gt;mailto&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;And&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;LCase&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Left&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTemp, &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;mailto:&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strTemp = &lt;span class=&quot;kw1&quot;&gt;Mid&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTemp, &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Suppression du http:// si nécessaire&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;hlpClearPrefix = HyperlinkPrefix.&lt;span class=&quot;me1&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Or&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;hlpClearPrefix = HyperlinkPrefix.&lt;span class=&quot;me1&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;And&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;LCase&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Left&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTemp, &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strTemp = &lt;span class=&quot;kw1&quot;&gt;Mid&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTemp, &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; GetHyperlink = strTemp&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;/div&gt;&lt;h3&gt;Explications&lt;/h3&gt;
La fonction &lt;code&gt;GetHyperlink()&lt;/code&gt; reçoit 2 paramètres :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Une chaîne qui donne le lien hypertexte d'origine (avec ses signes #), et de laquelle nous allons extraire l'adresse véritable ;&lt;/li&gt;
&lt;li&gt;Une valeur qui indique s'il faut &quot;nettoyer&quot; l'adresse obtenue. Par &quot;nettoyer&quot;, il faut entendre :&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;&lt;li&gt;Supprimer le &lt;code&gt;mailto:&lt;/code&gt; à gauche de l'adresse (utilisez la valeur &lt;code&gt;HyperlinkPrefix.mailto&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Supprimer le &lt;code&gt;http://&lt;/code&gt; à gauche de l'adresse (utilisez la valeur &lt;code&gt;HyperlinkPrefix.http&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Supprimer les &lt;code&gt;mailto:&lt;/code&gt; et les &lt;code&gt;http://&lt;/code&gt; (utilisez la valeur &lt;code&gt;HyperlinkPrefix.all&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Ne rien supprimer (utilisez la valeur &lt;code&gt;HyperlinkPrefix.none&lt;/code&gt;, ou n'alimentez pas le second paramètre).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Pour tester...&lt;/h4&gt;
&lt;ol&gt;&lt;li&gt;Ouvrez la fenêtre &lt;strong&gt;Exécution &lt;/strong&gt;(&lt;code&gt;CTRL &lt;/code&gt;+ &lt;code&gt;G&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Tapez dans cette fenêtre :&lt;br /&gt;&lt;code&gt;? GetHyperlink(&quot;inisan@provider.com#mailto:inisan@provider.com#&quot;)&lt;/code&gt;&lt;br /&gt;puis &lt;code&gt;Entrée&lt;/code&gt;.&lt;br /&gt;Vous obtenez comme résultat : &lt;code&gt;mailto:herve.inisan@provider.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tapez : &lt;br /&gt;&lt;code&gt;? GetHyperlink(&quot;herve.inisan@provider.com#mailto:herve.inisan@provider.com#&quot;, mailto)&lt;/code&gt;&lt;br /&gt;puis &lt;code&gt;Entrée&lt;/code&gt;.&lt;br /&gt;Vous obtenez : &lt;code&gt;herve.inisan@provider.com&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
Vous auriez pu aussi utiliser &lt;code&gt;all&lt;/code&gt; à la place de &lt;code&gt;mailto&lt;/code&gt;, ou leurs valeurs numériques : 1 pour &lt;code&gt;all&lt;/code&gt;, 3 pour &lt;code&gt;mailto &lt;/code&gt;(cf. l'énumération en début de listing). En VBA, passez plutôt par l'énumération. Par contre, dans un objet graphique d'Access comme une requête, vous devrez taper les valeurs numériques.&lt;br /&gt;&lt;h3&gt;Un exemple pratique&lt;/h3&gt;
L'objectif de départ, rappelez-vous, était d'exporter une requête Access et ses liens hypertexte vers Excel, en ne transmettant que l'adresse du lien. Voici comment faire :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Créez une nouvelle requête basée sur la table à exporter.&lt;/li&gt;
&lt;li&gt;Placez les champs à exporter sur la grille de requête, sauf l'e-mail d'origine (sa syntaxe avec signes # le rend inutile).&lt;/li&gt;
&lt;li&gt;Ajoutez le champ calculé suivant sur la grille de requête :&lt;br /&gt;&lt;code&gt;Email réel: GetHyperlink([Email]; 3)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/hyperlink_query.png&quot; /&gt;&lt;br /&gt;Une fois exécutée, la requête devrait donner ceci :&lt;br /&gt;&lt;img alt=&quot;Capture2&quot; src=&quot;http://grenier.self-access.com/public/network/hyperlink_query_result.png&quot; /&gt;&lt;br /&gt;Vous pouvez maintenant exporter cette requête vers Excel (entre autres) : le lien hypertexte obtenu est enfin exploitable !&lt;br /&gt;&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/11/21/Nettoyer-des-liens-hypertexte-a-la-volee#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/11/21/Nettoyer-des-liens-hypertexte-a-la-volee#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/371</wfw:commentRss>
      </item>
    
  <item>
    <title>Requête UNION dans Excel</title>
    <link>http://grenier.self-access.com/?post/2011/07/22/Requete-UNION-dans-Excel</link>
    <guid isPermaLink="false">urn:md5:e118bb38e3f28b9a39719b27a76b825e</guid>
    <pubDate>Fri, 22 Jul 2011 10:26:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Liaisons Office</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>excel</category><category>requête</category><category>word</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;J'ai créé une requête &lt;code&gt;UNION &lt;/code&gt;(simple association de deux
tables avec champs &lt;code&gt;Nom &lt;/code&gt;et &lt;code&gt;Prénom&lt;/code&gt;). Le fonctionnement est normal dans Access sauf
qu'il ne m'est pas possible d'importer la requête sur Excel. La requête n'apparaît
pas sur la liste lors de l'exécution de la procédure d'importation de
Données Externes. Comment faire ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Rappel&lt;/h3&gt;
&lt;p&gt;Une requête &lt;code&gt;UNION &lt;/code&gt;est une requête qui permet de joindre les enregistrements de plusieurs tables. Vous trouverez un exemple sur la page &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/08/31/Requete-UNION&quot;&gt;Requête UNION&lt;/a&gt; du blog. Et en voici un autre (simple) dans une base Access 2010 :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;CAPT&quot; src=&quot;http://grenier.self-access.com/public/queries/requete_union.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Et effectivement, ce type de requête n'apparaît ni dans Excel (en importation de données externes), ni dans Word (en publipostage par exemple). Voici ce qu'on voit dans Excel, après avoir cliqué sur &lt;strong&gt;Données externes / Depuis Access&lt;/strong&gt;. La requête &lt;code&gt;rqt Union&lt;/code&gt; est invisible :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;CAPT&quot; src=&quot;http://grenier.self-access.com/public/queries/requete_union_invisible.jpg&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Astuce rapide&lt;/h3&gt;
&lt;p&gt;Une petite astuce devrait faire l'affaire : elle consiste à &quot;encapsuler&quot; votre requête &lt;code&gt;UNION &lt;/code&gt;dans une requête standard. Pour cela :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Dans Access, activez l'onglet &lt;strong&gt;Créer&lt;/strong&gt;, sur le ruban.&lt;/li&gt;
&lt;li&gt;Cliquez sur l'icône &lt;em&gt;Création de requête&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Dans la boîte de dialogue &lt;strong&gt;Afficher la table&lt;/strong&gt;, au lieu de sélectionner une table (comme vous le faites généralement), activez l'onglet &lt;strong&gt;Requêtes&lt;/strong&gt;, et sélectionnez la requête &lt;code&gt;UNION&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;CAPT&quot; src=&quot;http://grenier.self-access.com/public/queries/.requete_union_encaps_m.jpg&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Construisez votre deuxième requête comme d'habitude, en plaçant les champs qui vous intéressent (a priori tous !) sur la grille.&lt;/li&gt;
&lt;li&gt;Enregistrez votre requête (pour la suite :&lt;code&gt; rqt Union2&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Retour dans Excel&lt;/h3&gt;
Cette fois, dans Excel, vous voyez ceci :&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;CAPT&quot; src=&quot;http://grenier.self-access.com/public/queries/requete_union_visible.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;... et la requête peut être importée dans Excel.&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/07/22/Requete-UNION-dans-Excel#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/07/22/Requete-UNION-dans-Excel#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/370</wfw:commentRss>
      </item>
    
  <item>
    <title>Plusieurs valeurs dans OpenArgs</title>
    <link>http://grenier.self-access.com/?post/2011/06/23/Plusieurs-valeurs-dans-OpenArgs</link>
    <guid isPermaLink="false">urn:md5:28d28c72b782ad3ffbbd3838d4988f8a</guid>
    <pubDate>Thu, 23 Jun 2011 15:58:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Visual Basic</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 2010</category><category>expression régulière</category><category>formulaire</category><category>état</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Comment transmettre plusieurs arguments d'ouverture (&lt;code&gt;OpenArgs&lt;/code&gt;) dans les commandes &lt;code&gt;OpenForm &lt;/code&gt;et &lt;code&gt;OpenReport &lt;/code&gt;?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Principe&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;OpenArgs &lt;/code&gt;est le dernier argument de la commande &lt;code&gt;OpenReport &lt;/code&gt;et, pour les versions récentes d'Access, de la commande &lt;code&gt;OpenForm&lt;/code&gt;. &lt;code&gt;OpenArgs&lt;/code&gt; permet de passer des informations quelconques au formulaire ou à l'état qu'on est en train d'ouvrir. Le formulaire/l'état peut ensuite faire ce qu'il veut de ces &lt;code&gt;OpenArgs &lt;/code&gt;(c'est vous qui voyez !).&lt;/p&gt;
&lt;h4&gt;Exemple :&lt;/h4&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;DoCmd.&lt;span class=&quot;me1&quot;&gt;OpenForm&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;frm Personnes&amp;quot;&lt;/span&gt;, acNormal, ,, ,, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Inisan&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Dans le formulaire d'arrivée (&lt;code&gt;frm Personnes&lt;/code&gt;), la valeur &quot;&lt;code&gt;Inisan&lt;/code&gt;&quot; est récupérée par :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strNom &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
strNom = Nz&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;OpenArgs&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Le problème d'&lt;code&gt;OpenArgs &lt;/code&gt;est qu'on ne peut transmettre qu'une seule valeur chaîne. Comment transmettre dans ce cas plusieurs valeurs ?&lt;/p&gt;
&lt;h3&gt;Première solution&lt;/h3&gt;
&lt;p&gt;Une première approche consiste à transmettre les différents arguments en les séparant par un délimiteur quelconque (un caractère non utilisé en général). Par exemple, pour transmettre un nom, un prénom et un score :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;DoCmd.&lt;span class=&quot;me1&quot;&gt;OpenForm&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;frm Personnes&amp;quot;&lt;/span&gt;, acNormal, ,,,, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Inisan;Hervé;200&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Du côté du formulaire ou de l'état final, il faut ensuite séparer les valeurs en se repérant sur le délimiteur. La fonction &lt;code&gt;Split()&lt;/code&gt; est votre amie pour cela. Du style :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; varValeurs &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant&lt;br /&gt;
&lt;br /&gt;
varValeurs = &lt;span class=&quot;kw1&quot;&gt;Split&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;OpenArgs&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Valeur1 = &amp;quot;&lt;/span&gt; &amp;amp; varValeurs&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Valeur2 = &amp;quot;&lt;/span&gt; &amp;amp; varValeurs&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Valeur3 = &amp;quot;&lt;/span&gt; &amp;amp; varValeurs&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Cette gestion peut convenir dans certains cas. Mais j'y verrais quelques problèmes :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Les arguments ne sont pas identifiés clairement. C'est seulement l'ordre qui les différencie. Dans mon exemple, le nom est toujours supposé être avant le prénom, et avant le score. Vous devez par conséquent toujours savoir que la valeur 1 est le prénom. Ou définir des constantes pour éviter cela.&lt;/li&gt;
&lt;li&gt;Les arguments doivent toujours être fournis dans l'ordre, pour la même raison.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Deuxième solution&lt;/h3&gt;
&lt;p&gt;Voici une variante, qui consiste à passer les paramètres d'une manière inspirée de XML. C'est un peu plus lourd, mais :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Les arguments sont identifiés par un nom, donc plus faciles à maintenir.&lt;/li&gt;
&lt;li&gt;Ils peuvent être fournis dans le désordre.&lt;/li&gt;
&lt;li&gt;Le système est extensible.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;DoCmd.&lt;span class=&quot;me1&quot;&gt;OpenForm&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;frm Personnes&amp;quot;&lt;/span&gt;, acNormal, ,, ,, _&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;nom&amp;gt;Inisan&amp;lt;/nom&amp;gt;&amp;lt;prénom&amp;gt;Hervé&amp;lt;/prénom&amp;gt;&amp;lt;score&amp;gt;200&amp;lt;/score&amp;gt;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Bien sûr, on ne vas pas s'emm...bêter à chaque fois à formater les arguments avant d'appeler &lt;code&gt;OpenForm&lt;/code&gt;, et à les retranscrire dans l'autre sens pour les exploiter. Voici 2 fonctions qui vont nous simplifier la tâche (à recopier dans un module standard, vous commencez à être habitués :-)).&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' AJOUT D'UN ARGUMENT OPENARG&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; ArgSet&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByRef strArgs &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; ByVal strArgName &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; ByVal varArgValue &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strTemp &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strTemp = StringFormat&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;{0}&amp;gt;{1}&amp;lt;/{0}&amp;gt;&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; strArgName, varArgValue&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; strArgs = strArgs &amp;amp; strTemp&lt;br /&gt;
&amp;nbsp; ArgSet = strTemp&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' LECTURE D'UN ARGUMENT OPENARG&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' ---&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; ArgGet&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal strArgs &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; ByVal strArgName &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; regexp &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; VBScript_RegExp_55.&lt;span class=&quot;me1&quot;&gt;regexp&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; mc &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; VBScript_RegExp_55.&lt;span class=&quot;me1&quot;&gt;MatchCollection&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; m &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; VBScript_RegExp_55.&lt;span class=&quot;me1&quot;&gt;Match&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strResult &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' RegExp pour lire l'argument de la forme &amp;lt;arg&amp;gt;xyz&amp;lt;/arg&amp;gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; regexp = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; VBScript_RegExp_55.&lt;span class=&quot;me1&quot;&gt;regexp&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; regexp.&lt;span class=&quot;me1&quot;&gt;IgnoreCase&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; regexp.&lt;span class=&quot;me1&quot;&gt;Pattern&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;(&amp;quot;&lt;/span&gt; &amp;amp; strArgName &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;)&amp;gt;(.*)&amp;lt;/\1&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Extraction de la valeur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strResult = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; mc = regexp.&lt;span class=&quot;me1&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strArgs&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; mc.&lt;span class=&quot;kw1&quot;&gt;Count&lt;/span&gt; &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; m = mc&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; strResult = m.&lt;span class=&quot;me1&quot;&gt;SubMatches&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Valeur de retour&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ArgGet = strResult&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Pour que les fonctions ci-dessus fonctionnent, vous devez...&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Relier la bibliothèque d'expressions rationnelles VBScript à votre projet. Oui, je sais, on pourrait faire sans, mais le code est bien plus compact avec ! ;)&lt;/li&gt;
&lt;li&gt;Intégrer également la fonction &lt;code&gt;StringFormat()&lt;/code&gt; à votre projet (voir &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/03/20/Marre-des-concatenations&quot;&gt;cette page&lt;/a&gt; du blog).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;VBA ne gère pas nativement les expressions rationnelles, vous devez donc ajouter à votre projet la bibliothèque qui le fait :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Démarrez VBE (Visual Basic Editor).&lt;/li&gt;
&lt;li&gt;Cliquez sur le menu &lt;strong&gt;Outils / Références&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Dans la liste des références, cochez &lt;em&gt;Microsoft VBScript Regular Expressions&lt;/em&gt; (5.5, à ce jour).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Exemple&lt;/h3&gt;
&lt;p&gt;La première fonction - &lt;code&gt;ArgSet&lt;/code&gt;() - ajoute un argument et sa valeur, formatés, à une chaîne de caractères destinée à servir d'&lt;code&gt;OpenArgs&lt;/code&gt;. Vous l'utilisez comme ceci, avant d'ouvrir votre formulaire ou état :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strArgs &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
ArgSet strArgs, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Nom&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Inisan&amp;quot;&lt;/span&gt;&lt;br /&gt;
ArgSet strArgs, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Prénom&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Hervé&amp;quot;&lt;/span&gt;&lt;br /&gt;
ArgSet strArgs, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Score&amp;quot;&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;200&lt;/span&gt;&lt;br /&gt;
DoCmd.&lt;span class=&quot;me1&quot;&gt;OpenForm&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;frm Personnes&amp;quot;&lt;/span&gt;, acNormal, ,, ,, strArgs&lt;/div&gt;&lt;p&gt;Ensuite, dans le formulaire ou l'état cible, vous pouvez extraire les arguments par leur nom, grâce à la fonction inverse, &lt;code&gt;ArgGet() &lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strArgs &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strNom &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strPrenom &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;String&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; intScore &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Integer&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
strArgs = Nz&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;OpenArgs&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
strNom = ArgGet&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strArgs, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Nom&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
strPrenom = ArgGet&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strArgs, &lt;span class=&quot;st0&quot;&gt;&amp;quot;prénom&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
intScore = &lt;span class=&quot;kw1&quot;&gt;Val&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ArgGet&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strArgs, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Score&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2011/06/23/Plusieurs-valeurs-dans-OpenArgs#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2011/06/23/Plusieurs-valeurs-dans-OpenArgs#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/369</wfw:commentRss>
      </item>
    
</channel>
</rss>
