<?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>Mon, 06 Sep 2010 15:20:04 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Copier un chemin Windows rapidement</title>
    <link>http://grenier.self-access.com/?post/2010/08/24/Copier-un-chemin-Windows-rapidement</link>
    <guid isPermaLink="false">urn:md5:34173dde37eafc3cfcc9557d59aa1e9d</guid>
    <pubDate>Tue, 24 Aug 2010 09:35:00 +0200</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>dossier</category><category>fichier</category><category>répertoire</category><category>vba</category><category>windows</category>    
    <description>    &lt;h3&gt;Le saviez-vous ?&lt;/h3&gt;
&lt;p&gt;On a souvent besoin du chemin d'un dossier ou d'un fichier, par exemple pour le récupérer dans du code VBA. &lt;br /&gt;Plutôt que de retaper manuellement ce chemin, vous pouvez l'obtenir grâce à Windows (Vista ou 7).&lt;/p&gt;
&lt;h3&gt;Méthode #1&lt;/h3&gt;
&lt;p&gt;La première méthode est directe :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Cliquez sur l'icône à gauche des noms de dossiers, dans la barre d'adresse d'une fenêtre Windows.&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/windows/chemin_barre_adresse.jpg&quot; /&gt;&lt;/li&gt;
&lt;li&gt;La liste de dossiers se transforme en chemin (présélectionné en bleu, d'ailleurs).&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/windows/chemin_barre_adresse_final.jpg&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Faites un &lt;code&gt;CTRL &lt;/code&gt;+ &lt;code&gt;C&lt;/code&gt; (ou un clic droit / &lt;strong&gt;Coller&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Vous pouvez maintenant coller ce chemin dans un module VBA, ou n'importe où d'autre !&lt;/li&gt;
&lt;/ol&gt;
L'inconvénient, par contre, est que seuls les chemins de dossiers peuvent être récupérés de cette manière, pas ceux des fichiers.&lt;br /&gt;&lt;h3&gt;Méthode #2&lt;/h3&gt;
Très pratique aussi :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Cliquez du bouton droit sur un fichier ou un dossier, tout en restant appuyer sur la touche &lt;code&gt;[Majuscule]&lt;/code&gt; (&lt;code&gt;Shift&lt;/code&gt;, pour ceux qui sont toujours bloqués sur des claviers anglais ;-)).&lt;/li&gt;
&lt;li&gt;Dans le menu apparaît alors une commande &lt;strong&gt;Copier en tant que chemin d'accès&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/windows/.chemin_copier_m.jpg&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Vous n'avez plus qu'à coller le résultat quelque part...&lt;/li&gt;
&lt;/ol&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/08/24/Copier-un-chemin-Windows-rapidement#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/08/24/Copier-un-chemin-Windows-rapidement#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/342</wfw:commentRss>
      </item>
    
  <item>
    <title>Extraire les pièces jointes d'Outlook en VBA</title>
    <link>http://grenier.self-access.com/?post/2010/08/23/Extraire-les-pieces-jointes-dOutlook-en-VBA</link>
    <guid isPermaLink="false">urn:md5:2d59591e7e2cd87a26977231baa2a82f</guid>
    <pubDate>Mon, 23 Aug 2010 11:03:00 +0200</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 97</category><category>automation</category><category>dossier</category><category>fichier</category><category>outlook</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Dans &lt;strong&gt;Outlook &lt;/strong&gt;(pas Express), j'ai des e-mails avec pièces jointes. Comment extraire toutes ces pièces jointes automatiquement, en VBA, dans un dossier du disque dur ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Mise en place&lt;/h3&gt;
&lt;p&gt;&lt;img style=&quot;float: right; margin: 0 0 1em 1em;&quot; alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/icone_outlook.png&quot; /&gt;Le code qui va suivre utilise lui-même d'autres portions de VBA
publiées sur ce blog, portions que vous devez aussi intégrer à votre
base de données. Reportez-vous à 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/2010/08/23/../?post/2009/02/18/Ajouter-un-backslash-en-fin-de-chemin&quot;&gt;Fonction AddBackslash&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;ins&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/08/22/Generer-un-nom-de-fichier-avec-numero&quot;&gt;Fonction FilenameInc&lt;/a&gt;&lt;br /&gt;&lt;/ins&gt;&lt;/li&gt;
&lt;/ul&gt;
D'autre part, votre projet VBA doit référencer la bibliothèque &quot;&lt;em&gt;Microsoft Outlook x.y Object Library&lt;/em&gt;&quot; (&lt;code&gt;x.y&lt;/code&gt; étant votre version d'Outlook, par exemple &lt;code&gt;12.0&lt;/code&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;cet article&lt;/a&gt; du blog.&lt;br /&gt;&lt;h3&gt;Le code&lt;/h3&gt;
&lt;p&gt;Voici 2 procédures VBA à recopier intégralement dans un &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/08/23/../?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;' EXTRACTION DE PIECES JOINTES OUTLOOK&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; SaveAttachments&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal strTargetFolder &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 blnIncludeSubFolders &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Boolean&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&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; olApp &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Outlook.&lt;span class=&quot;me1&quot;&gt;Application&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; ns &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Outlook.&lt;span class=&quot;me1&quot;&gt;NameSpace&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; fld &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Outlook.&lt;span class=&quot;me1&quot;&gt;MAPIFolder&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Vérifier si le dossier de destination existe bien&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;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTargetFolder, &lt;span class=&quot;kw1&quot;&gt;vbDirectory&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&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; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Le dossier destination n'existe pas !&amp;quot;&lt;/span&gt;, &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; strTargetFolder = AddBackslash&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTargetFolder&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Démarrer Outlook&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; olApp = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; Outlook.&lt;span class=&quot;me1&quot;&gt;Application&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Pointer sur la boîte de réception&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ns = olApp.&lt;span class=&quot;me1&quot;&gt;GetNamespace&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;MAPI&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;Set&lt;/span&gt; fld = ns.&lt;span class=&quot;me1&quot;&gt;GetDefaultFolder&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;olFolderInbox&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Extraire tous les messages du dossier&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; SaveFolderAttachments fld, strTargetFolder, blnIncludeSubFolders&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; fld = &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; ns = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; olApp.&lt;span class=&quot;me1&quot;&gt;Quit&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; olApp = &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;' EXTRACTION DES PIECES JOINTES D'UN DOSSIER&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; SaveFolderAttachments&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; fld &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Outlook.&lt;span class=&quot;me1&quot;&gt;MAPIFolder&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; strTargetFolder &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 blnIncludeSubFolders &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Boolean&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; mi &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Outlook.&lt;span class=&quot;me1&quot;&gt;MailItem&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; att &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Outlook.&lt;span class=&quot;me1&quot;&gt;Attachment&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strFile &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;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Debug&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;---&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;DOSSIER : &amp;quot;&lt;/span&gt; &amp;amp; fld.&lt;span class=&quot;kw1&quot;&gt;Name&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;---&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Parcourir tous les messages&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each mi In fld.&lt;span class=&quot;me1&quot;&gt;Items&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; mi.&lt;span class=&quot;me1&quot;&gt;Attachments&lt;/span&gt;.&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;co1&quot;&gt;' Pour info...&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Debug.&lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; mi.&lt;span class=&quot;me1&quot;&gt;Subject&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each att In mi.&lt;span class=&quot;me1&quot;&gt;Attachments&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strFile = FilenameInc&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTargetFolder &amp;amp; att.&lt;span class=&quot;me1&quot;&gt;Filename&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;co1&quot;&gt;' Sauvegarder la pièce jointe sous son nom original&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' ou avec un nom incrémenté en cas de doublons&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; att.&lt;span class=&quot;me1&quot;&gt;SaveAsFile&lt;/span&gt; strFile&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;&amp;nbsp; -&amp;gt; &amp;quot;&lt;/span&gt; &amp;amp; strFile&lt;br /&gt;
&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;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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Si nécessaire, effectuer le même traitement&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' sur les sous-dossiers&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; blnIncludeSubFolders &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;Dim&lt;/span&gt; subfld &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Outlook.&lt;span class=&quot;me1&quot;&gt;MAPIFolder&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each subfld In fld.&lt;span class=&quot;me1&quot;&gt;Folders&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; SaveFolderAttachments subfld, strTargetFolder, blnIncludeSubFolders&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Next&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;h3&gt;Tester le code&lt;/h3&gt;
&lt;p&gt;En principe, vous appelez la 1ère des deux procédures de cette manière :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Ouvrez 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;Tapez :&lt;br /&gt;&lt;code&gt;SaveAttachments &quot;C:\un\dossier\existant\quelconque&quot;&lt;/code&gt;&lt;br /&gt;puis &lt;code&gt;[Entrée]&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
Toutes les pièces jointes de messages situés dans la boîte de réception seront alors extraites dans le dossier souhaité (s'il existe, bien sûr).
&lt;br /&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Notes&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;&lt;ul&gt;&lt;li&gt;Si deux messages (ou plus) contiennent une pièce jointe de même nom, ces pièces jointes seront toutes sauvées et numérotées différemment. Par exemple : &lt;code&gt;photo.jpg&lt;/code&gt;, &lt;code&gt;photo-00001.jpg&lt;/code&gt;, &lt;code&gt;photo-00002.jpg&lt;/code&gt;, etc. C'est la fonction &lt;code&gt;FilenameInc()&lt;/code&gt; traitée dans &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/08/22/Generer-un-nom-de-fichier-avec-numero&quot;&gt;cet article&lt;/a&gt; qui prend en charge la numérotation.&lt;/li&gt;
&lt;li&gt;La fenêtre &lt;strong&gt;Exécution &lt;/strong&gt;affiche quelques informations utiles (sujet du message, chemin de la pièce jointe sauvegardée).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3&gt;Variante&lt;/h3&gt;
Si votre boîte de réception contient des sous-dossiers, ceux-ci ne sont pas traités par défaut. Si vous souhaitez que tous les sous-dossiers de votre boîte de réception soient parcourus, écrivez plutôt :&lt;br /&gt;&lt;code&gt;SaveAttachments &quot;C:\un\dossier\existant\quelconque&quot;, True&lt;/code&gt;&lt;br /&gt;Le second paramètre indique qu'il faut parcourir les sous-dossiers de façon récursive.&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/08/23/Extraire-les-pieces-jointes-dOutlook-en-VBA#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/08/23/Extraire-les-pieces-jointes-dOutlook-en-VBA#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/346</wfw:commentRss>
      </item>
    
  <item>
    <title>Générer un nom de fichier avec numéro</title>
    <link>http://grenier.self-access.com/?post/2010/08/22/Generer-un-nom-de-fichier-avec-numero</link>
    <guid isPermaLink="false">urn:md5:6785dc6e45650a572201a99f4ce1b405</guid>
    <pubDate>Sun, 22 Aug 2010 14:49:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Fichiers</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 97</category><category>dossier</category><category>fichier</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Ok, le titre de ce billet est complètement nébuleux ! En clair : vous disposez du chemin complet d'un fichier (par exemple : &lt;code&gt;C:\un\chemin\quelconque\test.jpg&lt;/code&gt;), et vous souhaitez le transformer en &lt;code&gt;C:\un\chemin\quelconque\test-00001.jpg&lt;/code&gt; si un fichier &lt;code&gt;test.jpg&lt;/code&gt; existe déjà à cet emplacement.&lt;/p&gt;
&lt;/blockquote&gt;&lt;br /&gt;    &lt;h3&gt;Quelques pré-requis&lt;/h3&gt;
&lt;p&gt;Le code qui va suivre utilise lui-même d'autres portions de VBA publiées sur ce blog, portions que vous devez aussi intégrer à votre base de données. Reportez-vous à 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/2010/08/22/../?post/2009/03/08/Dossiers-fichiers-et-extensions&quot;&gt;Fonctions de dossiers, fichiers et extensions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/08/22/../?post/2009/02/18/Ajouter-un-backslash-en-fin-de-chemin&quot;&gt;Fonction AddBackslash&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/08/22/../?post/2010/03/20/Marre-des-concatenations&quot;&gt;Fonction StringFormat&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le code&lt;/h3&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;' INCREMENTATION BASIQUE D'UN NOM DE FICHIER&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 : Chemin complet&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Ex. : C:\un\chemin\quelconque\test.jpg&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Sortie : Chemin incrémenté, si un fichier existe déjà à cet emplacement.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Ex. : C:\un\chemin\quelconque\test-00001.jpg&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; FilenameInc&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ByVal strFile &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; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strFileTemp &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; 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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Si le fichier n'existe pas, on conserve son&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' nom d'origine&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;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strFile&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&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; FilenameInc = strFile&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;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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Créer un nouveau nom de fichier numéroté,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' en vérifiant qu'il n'existe pas déjà&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; intI = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strFileTemp = strFile&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;While&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strFileTemp&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &amp;lt;&amp;gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; strFileTemp = 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}.{3}&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; FilePath&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strFile&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; FilenameWithoutExt&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strFile&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;intI, &lt;span class=&quot;st0&quot;&gt;&amp;quot;00000&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; FileExt&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strFile&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; intI = intI + &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Wend&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Valeur de retour&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; FilenameInc = strFileTemp&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;Exemple&lt;/h3&gt;
&lt;p&gt;Pour tester ce bout de code :&lt;/p&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-y quelque chose comme :&lt;br /&gt;&lt;code&gt;? FilenameInc(&quot;C:\un\chemin\quelconque\test.jpg&quot;)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
Si aucun fichier &lt;code&gt;test.jpg&lt;/code&gt;, n'existe à cet emplacement, le résultat affiché sera :&lt;br /&gt;&lt;code&gt;C:\un\chemin\quelconque\test.jpg&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Dans le cas contraire, le chemin sera :&lt;br /&gt;&lt;code&gt;C:\un\chemin\quelconque\test-00001.jpg&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Et si un fichier &lt;code&gt;test-00001.jpg&lt;/code&gt; existe aussi, le chemin proposé sera :&lt;br /&gt;&lt;code&gt;C:\un\chemin\quelconque\test-00002.jpg&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Bien sûr, ce code n'a aucun intérêt s'il est utilisé tout seul. La fonction &lt;code&gt;FilenameInc()&lt;/code&gt; ne renomme pas de fichier, elle ne fait que &lt;em&gt;proposer &lt;/em&gt;le prochain &quot;nom numéroté&quot; disponible. Elle sera utilisée dans d'autres articles à venir.&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/08/22/Generer-un-nom-de-fichier-avec-numero#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/08/22/Generer-un-nom-de-fichier-avec-numero#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/345</wfw:commentRss>
      </item>
    
  <item>
    <title>Redimensionner les formulaires automatiquement à l'aide de ShrinkerStretcher</title>
    <link>http://grenier.self-access.com/?post/2010/07/16/Redimensionner-les-formulaires-automatiquement-a-laide-de-ShrinkerStretcher</link>
    <guid isPermaLink="false">urn:md5:c648342a749a7e6bb61d135291837b21</guid>
    <pubDate>Fri, 16 Jul 2010 19:05:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Formulaires</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 97</category><category>formulaire</category><category>screencast</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;&lt;img style=&quot;float: right; margin: 0 0 1em 1em;&quot; alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/forms/ss_box.jpg&quot; /&gt;Access ne redimensionne pas les formulaires en fonction de la résolution écran. &lt;/p&gt;
&lt;p&gt;Du coup, quand vous construisez vos formulaires, il est conseillé de définir votre taille écran en fonction de l'utilisateur final. Concrètement, si un utilisateur est en &lt;code&gt;1024x768&lt;/code&gt; alors que tout le monde travaille en &lt;code&gt;1900x1200&lt;/code&gt;, vous construirez vos formulaires en abaissant votre propre résolution à &lt;code&gt;1024x768&lt;/code&gt;... Sinon, le &quot;&lt;em&gt;redesign&lt;/em&gt;&quot; des formulaires peut vous demander pas mal de temps... &lt;/p&gt;
&lt;p&gt;Mais dans certaines situations, vous souhaiterez peut-être un redimensionnement automatique. C'est ici qu'intervient &lt;strong&gt;ShrinkerStretcher&lt;/strong&gt;... (jetez un oeil au &lt;em&gt;screencast &lt;/em&gt;en bas d'article, pour voir le résultat)&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Télécharger ShrinkerStretcher&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;ShrinkerStretcher &lt;/strong&gt;est donc une bibliothèque qui se charge de redimensionner vos formulaires &quot;à la volée&quot;. Cet outil peut être téléchargé sur le site de &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.peterssoftware.com/ss.htm&quot;&gt;Peter's Software&lt;/a&gt;.&lt;br /&gt;Vous trouverez, à cette adresse des liens pour télécharger des versions d'évaluation, et en bas de la page, des liens pour acheter des licences (1 licence par application et par poste installé, quand même !).&lt;/p&gt;
&lt;div class=&quot;warning-header&quot;&gt;Info&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;La version de démonstration affiche de temps en temps des &quot;&lt;em&gt;nag screens&lt;/em&gt;&quot; (des boîtes de dialogue qui vous rappellent d'acheter la licence).&lt;/div&gt;
&lt;h3&gt;Installer ShrinkerStretcher&lt;/h3&gt;
&lt;p&gt;Cet article utilise la version de démonstration, qui est fournie dans un fichier Zip :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Commencez par extraire tout le contenu du fichier Zip (clic du bouton droit sur le fichier &lt;code&gt;ss.zip&lt;/code&gt;, puis &lt;strong&gt;Extraire tout&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Dans le dossier obtenu, double-cliquez sur &lt;code&gt;Setup.exe&lt;/code&gt;, ce qui lance l'installation (en fait d'installation, il s'agit surtout de décompresser plusieurs fichiers MDE, un fichier par version d'Access).&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Important&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Lors de l'installation, les fichiers de ShrinkerStretcher sont placés  dans les documents
partagés (&lt;em&gt;All Users&lt;/em&gt;). Sur Windows XP, par exemple, vous les trouverez
dans &lt;code&gt;C:\Documents and Settings\All users\Application Data\Peters
Software\ShrinkerStretcher&lt;/code&gt;. Ce sera utile pour la suite...&lt;/div&gt;
&lt;h3&gt;Ajouter une référence à ShrinkerStretcher&lt;/h3&gt;
&lt;p&gt;Dans la version Démo, ShrinkerStretcher // qu'est-ce que c'est pénible à écrire, ce nom ! ;-) // est une bibliothèque externe (un fichier MDE) non modifiable. Pour que votre base de données puisse l'utiliser, vous devez lier la bibliothèque comme indiqué dans &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/08/26/References&quot;&gt;cet article&lt;/a&gt;. Concrètement :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Ouvrez votre base de données.&lt;/li&gt;
&lt;li&gt;Faites apparaître Visual Basic Editor (vous pouvez par exemple taper &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&lt;/strong&gt;, puis sur l'option &lt;strong&gt;Références&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Cliquez sur le bouton &lt;strong&gt;Parcourir&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;C'est ici qu'il faut chercher un peu : rappelez-vous que la bibliothèque se place dans les documents partagés. Sur Windows XP, cherchez dans &lt;code&gt;C:\Documents and Settings\All users\Application Data\Peters Software\ShrinkerStretcher&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Il faut aussi que vous changiez le type de fichiers : &quot;&lt;em&gt;Tous les fichiers&lt;/em&gt;&quot;, au lieu de &quot;&lt;em&gt;Bibliothèques de types&lt;/em&gt;&quot;.&lt;/li&gt;
&lt;li&gt;Apparaissent enfin plusieurs fichiers MDE (ou ACCDE pour Access 2007). Sélectionnez le bon, en fonction de votre version d'Access.&lt;/li&gt;
&lt;/ol&gt;
Cette opération n'est bien sûr à faire qu'une seule fois pour une base de données précise.&lt;br /&gt;&lt;h3&gt;Configurer un formulaire&lt;/h3&gt;
Il ne reste plus qu'à paramétrer un formulaire, pour qu'il change de taille automatiquement. Ceci va être fait via 2 petites lignes de Visual Basic :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Ouvrez votre formulaire en mode Création.&lt;/li&gt;
&lt;li&gt;Faites apparaître les propriétés du formulaire, onglet &lt;strong&gt;Evénement&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Réglez l'événement &lt;code&gt;Sur ouverture&lt;/code&gt; sur &quot;&lt;code&gt;Propriété événementielle&lt;/code&gt;&quot;, puis cliquez sur les points de suspension à droite.&lt;/li&gt;
&lt;li&gt;Dans le bloc &lt;code&gt;Sub / End Sub&lt;/code&gt; qui se présente, tapez :&lt;br /&gt;&lt;code&gt;SS_OnOpen Me&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Repassez dans les propriétés du formulaire.&lt;/li&gt;
&lt;li&gt;Réglez l'événement &lt;code&gt;Sur redimensionnement&lt;/code&gt; sur &quot;&lt;code&gt;Propriété événementielle&lt;/code&gt;&quot;, puis
cliquez sur les points de suspension à droite.&lt;/li&gt;
&lt;li&gt;Dans ce nouveau bloc &lt;code&gt;Sub / End Sub&lt;/code&gt;, tapez :&lt;br /&gt;&lt;code&gt;SS_OnResize Me, 1600, 1200&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;code&gt;1600 &lt;/code&gt;et &lt;code&gt;1200 &lt;/code&gt;sont respectivement la largeur et la hauteur (en pixels) de l'écran sur lequel vous avez construit le formulaire. C'est grâce à ces 2 valeurs que ShrinkerStretcher peut calculer ses ratios pour redimensionner le formulaire. Si vous ne mettez aucune valeur, la résolution d'origine est supposée à 1024x768. Vous obtenez quelque chose comme ceci :&lt;br /&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; Form_Open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Cancel &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Integer&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; SS_OnOpen &lt;span class=&quot;kw1&quot;&gt;Me&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; Form_Resize&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; SS_OnResize &lt;span class=&quot;kw1&quot;&gt;Me&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;1600&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;1200&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;C'est tout ! Passez en mode Formulaire. Vous remarquez que les objets du formulaires, les images, les polices sont adaptés à la taille du formulaire (donc de l'écran, par extension). Ce n'est pas forcément hyper fluide, mais ça a le mérite de fonctionner.&lt;br /&gt;Il ne reste plus qu'à faire de même pour vos autres formulaires...&lt;br /&gt;&lt;br /&gt;</description>
    
          <enclosure url="http://grenier.self-access.com/public/videos/ac_shrinkerstretcher.flv"
      length="919069" type="video/x-flv" />
    
    
          <comments>http://grenier.self-access.com/?post/2010/07/16/Redimensionner-les-formulaires-automatiquement-a-laide-de-ShrinkerStretcher#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/07/16/Redimensionner-les-formulaires-automatiquement-a-laide-de-ShrinkerStretcher#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/343</wfw:commentRss>
      </item>
    
  <item>
    <title>Importer plusieurs classeurs Excel dans une table Access en VBA</title>
    <link>http://grenier.self-access.com/?post/2010/07/13/Importer-plusieurs-classeurs-Excel-dans-une-table-Access-en-VBA</link>
    <guid isPermaLink="false">urn:md5:a0afbb25a9f2b2857998e8c1d5bb8ea6</guid>
    <pubDate>Tue, 13 Jul 2010 20:28: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>fichier</category><category>table</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Cet article fait suite à celui-ci : &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/06/04/Importer-plusieurs-feuilles-Excel-dans-une-table-Access-en-VBA&quot;&gt;Importer plusieurs feuilles Excel dans
une table Access en VBA&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Sur le même principe, on va voir ici comment importer les données de &lt;strong&gt;plusieurs classeurs &lt;/strong&gt;Excel. Et pour garder la logique de l'article précédent, j'ai gardé la possibilité d'importer plusieurs feuilles de chaque classeur.&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le scénario&lt;/h3&gt;
&lt;p&gt;Je dispose de plusieurs classeurs Excel, dont les données doivent être importées dans Access. Pour que ça marche, les tableaux respectent un certain nombre de contraintes :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/office/excel2007_acteurs_multiclasseurs.jpg&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Les feuilles ont toutes la même structure (sinon, on ne va pas
s'en sortir !).&lt;/li&gt;
&lt;li&gt;Les feuilles peuvent avoir ou non des titres sur leur 1ère ligne
(dans mon exemple, toutes les feuilles ont des titres).&lt;/li&gt;
&lt;li&gt;La structure des feuilles correspond à la structure de ma table
Access : les champs sont dans le même ordre, et les types de données
sont compatibles.&lt;/li&gt;
&lt;li&gt;Dans mon scénario, la 1ère colonne (&lt;code&gt;Numéro Acteur&lt;/code&gt;) est
clef primaire dans la table Access. Ça veut dire qu'il faut que les
valeurs de &lt;code&gt;Numéro Acteur&lt;/code&gt;, dans Excel, soient toutes
différentes. Sinon, il y a aura des erreurs - normales - à
l'importation.&lt;/li&gt;
&lt;li&gt;Les classeurs sont tous placés dans le même dossier Windows.&lt;/li&gt;
&lt;li&gt;Chaque classeur doit avoir le même nombre de feuilles à importer, et ces feuilles portent le même nom. Par exemple, si je veux importer les feuilles &lt;code&gt;Acteurs1 &lt;/code&gt;et &lt;code&gt;Acteurs2&lt;/code&gt;, tous les classeurs doivent avoir des feuilles portant ces noms.&lt;/li&gt;
&lt;li&gt;Un classeur peut comporter d'autres feuilles (en nombre quelconque) qui ne seront pas concernées par l'importation.&lt;/li&gt;
&lt;/ul&gt;
Comme dans l'article précédent, la table Access a cette structure :&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/office/access2007_acteurs.jpg&quot; /&gt;&lt;br /&gt;&lt;h3&gt;Le code&lt;/h3&gt;
Voici une procédure VBA à recopier intégralement dans un &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/07/13/../?post/2008/11/12/Modules-standard&quot;&gt;module
standard&lt;/a&gt; de votre base de données.&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;' IMPORTATION DE PLUSIEURS FEUILLES EXCEL,&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' A PARTIR DE PLUSIEURS CLASSEURS&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; ImportExcelMulti&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal 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; ByVal varFeuilles &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant, _&lt;br /&gt;
&amp;nbsp; ByVal blnNoms &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; ByVal strTable &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;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Déclaration des variables&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strClasseur &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; varFeuille &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Est-ce que le dossier existe ?&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strChemin = AddBackslash&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strChemin&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;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strChemin, &lt;span class=&quot;kw1&quot;&gt;vbDirectory&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&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; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Le dossier ['&amp;quot;&lt;/span&gt; &amp;amp; strChemin &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;] est introuvable.&amp;quot;&lt;/span&gt;, &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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Vidage de la table si nécessaire&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;GoTo&lt;/span&gt; ImportExcelErr&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Souhaitez-vous vider la table [&amp;quot;&lt;/span&gt; &amp;amp; strTable &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;] avant l'importation ?&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;vbQuestion&lt;/span&gt; + &lt;span class=&quot;kw1&quot;&gt;vbYesNo&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;vbYes&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&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 [&amp;quot;&lt;/span&gt; &amp;amp; strTable &amp;amp; &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;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Parcourir tous les classeurs du dossier&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strClasseur = &lt;span class=&quot;kw1&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strChemin &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;*.xls&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbNormal&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;While&lt;/span&gt; strClasseur &amp;lt;&amp;gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Procédure d'importation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each varFeuille In varFeuilles&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; DoCmd.&lt;span class=&quot;me1&quot;&gt;TransferSpreadsheet&lt;/span&gt; acImport, acSpreadsheetTypeExcel12, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strTable, strChemin &amp;amp; strClasseur, blnNoms, varFeuille &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;!&amp;quot;&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;' Classeur suivant&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; strClasseur = &lt;span class=&quot;kw1&quot;&gt;Dir&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Wend&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Un p'tit message pour terminer :-)&lt;/span&gt;&lt;br /&gt;
&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;
&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;br /&gt;
ImportExcelErr:&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Erreur d'importation : &amp;quot;&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Description&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;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&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;La &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;fonction AddBackslash()&lt;/a&gt; doit aussi être présente dans un module de votre base de données.&lt;/div&gt;
La procédure ci-dessus doit recevoir 4 paramètres pour fonctionner :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Le
chemin du dossier qui contient les classeurs Excel à importer.&lt;br /&gt;Tous les classeurs sont supposés d'extension &lt;code&gt;XLS&lt;/code&gt;, mais vous pouvez adapter en &lt;code&gt;XLSX &lt;/code&gt;sur Excel 2007/2010.&lt;/li&gt;
&lt;li&gt;La liste des feuilles à importer (au cas où certaines feuilles
devraient être ignorées).&lt;/li&gt;
&lt;li&gt;Le nom de la table Access de destination.&lt;/li&gt;
&lt;li&gt;Une valeur booléenne (&lt;code&gt;True &lt;/code&gt;/ &lt;code&gt;False&lt;/code&gt;) qui
indique si les feuilles Excel ont des titres en première ligne.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Tester le code&lt;/h3&gt;
Cette autre procédure (à recopier par exemple dans le même module) permet de tester l'import :&lt;br /&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; TestImportExcelMulti&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; varFeuilles &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Liste des feuilles Excel à importer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; varFeuilles = &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;Acteurs1&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Acteurs2&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Importation proprement dite&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ImportExcelMulti &lt;span class=&quot;st0&quot;&gt;&amp;quot;C:\Users\Hervé\Documents\Classeurs Excel&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; varFeuilles, &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;tbl Acteurs - Import&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;Sub&lt;/span&gt;&lt;/div&gt;Bien sûr, vous adaptez les valeurs en fonction de votre configuration.&lt;br /&gt;Exécutez
ce deuxième bloc de code. Il vous sera demandé si vous souhaitez vider
la table Access avant d'importer toutes les données.&lt;br /&gt;Et hop !&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/07/13/Importer-plusieurs-classeurs-Excel-dans-une-table-Access-en-VBA#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/07/13/Importer-plusieurs-classeurs-Excel-dans-une-table-Access-en-VBA#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/341</wfw:commentRss>
      </item>
    
  <item>
    <title>Sauvegardes datées</title>
    <link>http://grenier.self-access.com/?post/2010/07/09/Sauvegardes-datees</link>
    <guid isPermaLink="false">urn:md5:fea7a111a97494e268b457ec5412a93a</guid>
    <pubDate>Fri, 09 Jul 2010 14:38:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Administration</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>dao</category><category>dossier</category><category>fichier</category><category>répertoire</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Je souhaiterais automatiser la sauvegarde de ma base de données, en dupliquant le fichier MDB de temps en temps. Pour différencier les sauvegardes, l'idéal serait de dater chaque copie. Comment faire ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/admin/backup.jpg&quot; /&gt;&lt;/p&gt;    &lt;h3&gt;Quelques pré-requis&lt;/h3&gt;
&lt;p&gt;Le code VBA qui suit utilise plusieurs fonctions qui ont déjà été traitées sur le blog. Commencez par les collecter dans un module standard, si ce n'est pas déjà le cas ! Voici la liste de ces fonctions :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2009/03/08/Dossiers-fichiers-et-extensions&quot;&gt;Fonctions de dossiers, fichiers et extensions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&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;Fonction AddBackslash&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/03/20/Marre-des-concatenations&quot;&gt;Fonction StringFormat&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Quelques structures utiles&lt;/h3&gt;
&lt;p&gt;Pour son fonctionnement, la fonction &lt;code&gt;BackupFile()&lt;/code&gt; donnée plus bas a aussi besoin d'une &lt;strong&gt;énumération &lt;/strong&gt;et d'un &lt;strong&gt;type de données&lt;/strong&gt; personnalisé. Du coup :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Ajoutez un module standard à votre base de données.&lt;/li&gt;
&lt;li&gt;Recopiez ceci &lt;strong&gt;en début&lt;/strong&gt; du module :&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;' RESULTAT DE BACKUP&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;Public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Enum&lt;/span&gt; BackupResult&lt;br /&gt;
&amp;nbsp; BackupOk = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; SourceNotFound = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; TargetDirNotFound = &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; TargetAlreadyExists = &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Unknown = &lt;span class=&quot;nu0&quot;&gt;4&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;' INFORMATION DE BACKUP&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;Public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Type&lt;/span&gt; BackupInfo&lt;br /&gt;
&amp;nbsp; ResultCode &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; BackupResult&lt;br /&gt;
&amp;nbsp; TargetPath &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;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Type&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;La fonction de sauvegarde&lt;/h3&gt;
&lt;p&gt;A la suite de votre module, ajoutez tout ça :&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;' SAUVEGARDE DATEE D'UN FICHIER&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; BackupFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal strSourcePath &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 strTargetDir &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;br /&gt;
&amp;nbsp; Optional ByVal blnForceReplace &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Boolean&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;False&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; BackupInfo&lt;br /&gt;
&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; strTargetPath &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; fso &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Object&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Quelques vérifications&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;GoTo&lt;/span&gt; BackupFileErr&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strSourcePath&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&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; BackupFile.&lt;span class=&quot;me1&quot;&gt;ResultCode&lt;/span&gt; = SourceNotFound&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;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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Chemin de destination&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strTargetDir = &lt;span class=&quot;kw1&quot;&gt;IIf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTargetDir = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; FilePath&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strSourcePath&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; AddBackslash&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTargetDir&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; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTargetDir, &lt;span class=&quot;kw1&quot;&gt;vbDirectory&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&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; BackupFile.&lt;span class=&quot;me1&quot;&gt;ResultCode&lt;/span&gt; = TargetDirNotFound&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;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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Fichier de destination&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; strTargetPath = StringFormat&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;{0}BACKUP {1} {2}.{3}&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; strTargetDir, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;Now&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;st0&quot;&gt;&amp;quot;yyyymmdd-hhnnss&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; FilenameWithoutExt&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strSourcePath&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; FileExt&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strSourcePath&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; BackupFile.&lt;span class=&quot;me1&quot;&gt;TargetPath&lt;/span&gt; = strTargetPath&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Est-ce le fichier de destination existe déjà ?&lt;/span&gt;&lt;br /&gt;
&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;kw1&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strTargetPath&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &amp;lt;&amp;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;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;Not&lt;/span&gt; blnForceReplace&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; BackupFile.&lt;span class=&quot;me1&quot;&gt;ResultCode&lt;/span&gt; = TargetAlreadyExists&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;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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Copie du fichier via FSO&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; fso = &lt;span class=&quot;kw1&quot;&gt;CreateObject&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Scripting.FileSystemObject&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; fso.&lt;span class=&quot;me1&quot;&gt;CopyFile&lt;/span&gt; strSourcePath, strTargetPath&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; fso = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Résultat final&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; BackupFile.&lt;span class=&quot;me1&quot;&gt;ResultCode&lt;/span&gt; = BackupOk&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; &lt;br /&gt;
BackupFileErr:&lt;br /&gt;
&amp;nbsp; BackupFile.&lt;span class=&quot;me1&quot;&gt;ResultCode&lt;/span&gt; = Unknown&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;/div&gt;
&lt;p&gt;La fonction prend en charge la copie d'un fichier, et date la copie automatiquement. Un fichier &lt;code&gt;test.mdb&lt;/code&gt; sera dupliqué sous le nom &lt;code&gt;BACKUP 20101225-153017 test.mdb&lt;/code&gt;, si la copie a été lancée le 25/12/2010 à 15:30:17. Le fait de descendre au niveau des secondes permet de générer autant de sauvegardes que nécessaire. Vous pouvez aménager le format si ça fait trop !&lt;/p&gt;
&lt;p&gt;La création du chemin de la copie est également un peu détaillée, mais ça permettra un peu de souplesse si vous voulez une extension personnalistée (&lt;code&gt;.bak&lt;/code&gt; au lieu de &lt;code&gt;.mdb&lt;/code&gt;, par exemple).&lt;/p&gt;
&lt;p&gt;La fonction reçoit 3 paramètres, seul le premier est obligatoire :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Le &lt;strong&gt;chemin complet du fichier à sauvegarder&lt;/strong&gt;. Le fichier n'est pas forcément un MDB, ça peut être en fait n'importe quoi !&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;chemin du dossier de destination&lt;/strong&gt;. Si ce chemin n'est pas donné, la copie se fera dans le même dossier que l'original.&lt;/li&gt;
&lt;li&gt;Une valeur booléenne qui faut &lt;code&gt;True &lt;/code&gt;s'il faut écraser le fichier de copie (lorsqu'il existe déjà). Devrait servir rarement...&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Test #1&lt;/h3&gt;
&lt;p&gt;Pour tester la fonction directement :&lt;/p&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 dedans : &lt;br /&gt;&lt;code&gt;? BackupFile(CurrentProject.FullName).ResultCode&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
Vous devez obtenir un résultat de &lt;code&gt;0&lt;/code&gt;, qui dit que tout s'est bien passé. Et bien sûr, une copie datée de votre base de données devrait se trouver dans le même dossier.&lt;br /&gt;&lt;h3&gt;Test #2&lt;/h3&gt;
La fonction &lt;code&gt;BackupFile()&lt;/code&gt; n'affiche volontairement aucun message. Elle gère juste le &quot;bas niveau&quot; et renvoie un code de résultat. Vous pouvez utiliser ceci pour afficher des messages clairs à l'utilisateur :&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;' SAUVEGARDE DATEE DE LA BASE DE DONNEES&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; BackupDB&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; bi &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; BackupInfo&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Dupliquer la base dans un sous-dossier Backup&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' et récupérer le code de résultat&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; bi = BackupFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;CurrentProject.&lt;span class=&quot;me1&quot;&gt;FullName&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; CurrentProject.&lt;span class=&quot;me1&quot;&gt;Path&lt;/span&gt; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;\Backup&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Afficher un message en fonction du résultat&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Select &lt;span class=&quot;kw1&quot;&gt;Case&lt;/span&gt; bi.&lt;span class=&quot;me1&quot;&gt;ResultCode&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' OK&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Case&lt;/span&gt; BackupResult.&lt;span class=&quot;me1&quot;&gt;BackupOk&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;vbCrLf&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;vbCrLf&lt;/span&gt; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;La sauvegarde est disponible à cet emplacement :&amp;quot;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;vbCrLf&lt;/span&gt; &amp;amp; bi.&lt;span class=&quot;me1&quot;&gt;TargetPath&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbInformation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Fichier source introuvable&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Case&lt;/span&gt; BackupResult.&lt;span class=&quot;me1&quot;&gt;SourceNotFound&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Fichier source introuvable !&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Dossier destination introuvable&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Case&lt;/span&gt; BackupResult.&lt;span class=&quot;me1&quot;&gt;TargetDirNotFound&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Dossier destination introuvable !&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Fichier destination déjà existant&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Case&lt;/span&gt; BackupResult.&lt;span class=&quot;me1&quot;&gt;TargetAlreadyExists&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &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 fichier de destination existe déjà !&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Erreur indéterminée&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Case&lt;/span&gt; BackupResult.&lt;span class=&quot;me1&quot;&gt;Unknown&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &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 erreur non identifiée s'est produite.&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; Select&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;Dans cet exemple, je suppose que les sauvegardes doivent être faites dans un sous-dossier &lt;code&gt;Backup&lt;/code&gt;, placé au même emplacement que la base MDB.&lt;/p&gt;
&lt;h3&gt;Pour finir...&lt;/h3&gt;
Il ne reste plus qu'à...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Créer un bouton, sur un formulaire.&lt;/li&gt;
&lt;li&gt;Nommer ce bouton proprement.&lt;/li&gt;
&lt;li&gt;Définir l'événement &lt;code&gt;Sur clic&lt;/code&gt; du bouton de cette manière :&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; btnBackup_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; BackupDB&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/2010/07/09/Sauvegardes-datees#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/07/09/Sauvegardes-datees#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/340</wfw:commentRss>
      </item>
    
  <item>
    <title>Recherche de mot entier</title>
    <link>http://grenier.self-access.com/?post/2010/07/08/Recherche-de-mot-entier</link>
    <guid isPermaLink="false">urn:md5:5b783d4d61efcd47e6b8b3abc40987a1</guid>
    <pubDate>Thu, 08 Jul 2010 16:23: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 97</category><category>expression régulière</category><category>requête</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Comment trouver un &lt;strong&gt;mot entier&lt;/strong&gt; dans une requête Access ? Par exemple, dans une phrase comme &quot;&lt;code&gt;Bonjour, aujourd'hui, c'est le jour de Noël !&lt;/code&gt;&quot;, je souhaite vérifier si la phrase contient le mot &quot;&lt;code&gt;jour&lt;/code&gt;&quot;.&lt;/p&gt;
&lt;p&gt;Un critère comme &lt;code&gt;[Le champ] LIKE '*jour*'&lt;/code&gt; semble une bonne idée, mais le critère m'extrait les mots &lt;code&gt;Bonjour&lt;/code&gt;, &lt;code&gt;Aujourd'hui&lt;/code&gt; et &lt;code&gt;Jour&lt;/code&gt;. Alors que je ne souhaite extraire que le mot &lt;code&gt;Jour&lt;/code&gt;. Une phrase comme &quot;&lt;code&gt;Bonjour, c'est Noël&lt;/code&gt;&quot; serait considérée comme valide, et je n'en veux pas. Comment faire ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le problème des délimiteurs&lt;/h3&gt;
&lt;p&gt;Avec un peu d'astuce, on peut imaginer des critères du style : &lt;code&gt;&lt;br /&gt;[Le champ] LIKE '* jour *'&lt;/code&gt; &lt;br /&gt;avec des &lt;strong&gt;espaces autour&lt;/strong&gt; du mot &lt;code&gt;jour&lt;/code&gt;. Dans ce cas, &lt;code&gt;Bonjour &lt;/code&gt;et &lt;code&gt;Aujourd'hui&lt;/code&gt; sont effectivement éliminés.&lt;/p&gt;
Mais comment faire s'il y a un point, une virgule ou un tiret avant/après le mot &quot;jour&quot; ?
Du genre : &quot;&lt;code&gt;Ce jour-là...&lt;/code&gt;&quot;. Le nombre de variantes devient lourd à gérer, et on sent que ça va donner un critère SQL long comme un jour sans ordinateur. :-)&lt;br /&gt;&lt;h3&gt;Les expressions régulières à la rescousse&lt;/h3&gt;
&lt;p&gt;C'est ici qu'il faut se rabattre sur les &lt;strong&gt;expressions régulières&lt;/strong&gt;, dont il a été question &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?q=regexp&quot;&gt;dans d'autres articles&lt;/a&gt; du blog. Consultez notamment l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2008/02/07/Valider-la-saisie-dune-adresse-e-mail&quot;&gt;Valider la saisie d'une adresse e-mail&lt;/a&gt; pour voir comment inscrire la bibliothèque &lt;strong&gt;VBScript Regular Expressions&lt;/strong&gt; dans votre projet VBA.&lt;/p&gt;
&lt;h3&gt;La fonction VBA&lt;/h3&gt;
Une fois la bibliothèque activée, recopiez cette fonction 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;br /&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; RechercheMot&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal strChaine &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 strMot &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;Boolean&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On crée une expression rationnelle&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; re &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;Set&lt;/span&gt; re = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; RegExp&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On définit le critère à respecter pour un mot entier&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; re.&lt;span class=&quot;me1&quot;&gt;Pattern&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;\b&amp;quot;&lt;/span&gt; &amp;amp; strMot &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;\b&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; re.&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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' La fonction Test renvoie True si la chaîne&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' respecte le critère&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; RechercheMot = re.&lt;span class=&quot;me1&quot;&gt;Test&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strChaine&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; re = &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;Quelques explications :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Si votre mot est &lt;code&gt;jour&lt;/code&gt;, on va effectuer une recherche par l'expression régulière&lt;code&gt; \bjour\b&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Le &lt;code&gt;\b&lt;/code&gt; détecte les &lt;strong&gt;limites &lt;/strong&gt;(&lt;em&gt;boundaries &lt;/em&gt;en anglais) d'un mot. Une limite pouvant être un espace, une tabulation, un tiret, un début de chaîne, une fin de chaîne.&lt;/li&gt;
&lt;li&gt;En résumé, on cherche le mot jour compris entre des limites quelconques, mais pas collé à une autre portion de texte !&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tester la fonction&lt;/h3&gt;
&lt;p&gt;Pour tester la fonction rapidement :&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-y des choses comme ça, en validant chaque ligne par &lt;code&gt;[Entrée]&lt;/code&gt; :&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/vb/recherche_mot.jpg&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
La fonction renvoie &lt;code&gt;Vrai&lt;/code&gt; quand la phrase inspectée contient le mot entier, et &lt;code&gt;Faux &lt;/code&gt;sinon. &lt;br /&gt;Vous remarquerez que les majuscules/minuscules ne sont pas importantes dans la recherche. Si vous souhaitez faire la distinction, remplacez &lt;code&gt;re.IgnoreCase = True&lt;/code&gt; par &lt;code&gt;re.IgnoreCase = False&lt;/code&gt; dans le listing plus haut.&lt;br /&gt;
&lt;h3&gt;Mettre la fonction en application&lt;/h3&gt;
&lt;p&gt;Tout ça devient plus intéressant dans une requête : je reprends ma base de films, et je voudrais trouver tous les films dont le résumé contient le mot &quot;&lt;code&gt;Elu&lt;/code&gt;&quot;. Première approche :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/vb/regexp/requete_elu01.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On obtient :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/vb/regexp/requete_elu02.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Le problème des 2 premiers films est que leur résumé contient le mot &quot;&lt;code&gt;celui&lt;/code&gt;&quot;, qui répond au critère. Aménageons la requête en ajoutant un champ calculé qui fait appel à la fonction VBA du dessus :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/vb/regexp/requete_elu03.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Cette fois, ça marche : seul Matrix sort dans les résultats. On a trouvé l'Elu !&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/07/08/Recherche-de-mot-entier#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/07/08/Recherche-de-mot-entier#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/328</wfw:commentRss>
      </item>
    
  <item>
    <title>Qu'est-ce que &quot;Me&quot; en langage VBA ?</title>
    <link>http://grenier.self-access.com/?post/2010/07/08/Quest-ce-que-Me-en-langage-VBA</link>
    <guid isPermaLink="false">urn:md5:77eb6637fd5b482f83f99aa10b209168</guid>
    <pubDate>Thu, 08 Jul 2010 14:50: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 97</category><category>formulaire</category><category>vba</category><category>état</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Si vous débutez en programmation VBA, vous avez dû voir &lt;em&gt;trainer &lt;/em&gt;le mot-clef &lt;code&gt;Me &lt;/code&gt;dans plusieurs bouts de code. A quoi sert ce mot-clef ? Quand peut-on l'utiliser ? Quand ne doit-on pas l'employer ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;About Me&lt;/h3&gt;
&lt;p&gt;En programmation objet, &lt;code&gt;Me &lt;/code&gt;désigne &lt;strong&gt;l'instance de classe&lt;/strong&gt; dans laquelle on se trouve. &lt;br /&gt;Euh... si vous êtes débutant, ce genre de phrase ne va pas vous aider !&lt;/p&gt;
&lt;p&gt;Pour faire mieux (quoique !) : &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Dans Access, le &lt;strong&gt;formulaire&lt;/strong&gt;,par exemple, est un &lt;strong&gt;objet type&lt;/strong&gt;, standard (une &lt;strong&gt;&quot;classe&quot;&lt;/strong&gt;, nommée précisément &lt;code&gt;Access.Form&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Lorsque vous construisez un formulaire personnalisé (un formulaire Clients ou Produits, par exemple), vous créez une variante du formulaire type.&lt;/li&gt;
&lt;li&gt;Et lorsque vous ouvrez le formulaire Clients et le formulaire Produits, ces 2 objets précis &quot;vivent&quot; en simultané à l'écran. Ils n'ont pas les mêmes réglages, pas les mêmes données, etc. Ce sont ces 2 objets qu'on appelle des &lt;strong&gt;instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pour faire référence à l'une ou l'autre des instances, en VBA, vous écrivez &lt;code&gt;Forms![frm Clients]&lt;/code&gt; et &lt;code&gt;Forms![frm Produits]&lt;/code&gt;, par exemple.&lt;/li&gt;
&lt;li&gt;Maintenant, si vous devez taper du code VBA dans le formulaire Clients, ce code fera souvent référence au formulaire Client lui-même. C'est ici qu'intervient &lt;code&gt;Me&lt;/code&gt; : plutôt que d'écrire &lt;code&gt;Forms![frm Clients]&lt;/code&gt;, utilisez &lt;code&gt;Me &lt;/code&gt;(&quot;moi&quot; ; sous-entendu : le formulaire dans lequel se trouve le code VBA).&lt;/li&gt;
&lt;li&gt;Si vous avez suivi, lorsque &lt;code&gt;Me &lt;/code&gt;est&amp;nbsp; placé dans le VBA du formulaire Produits, il équivaut à &lt;code&gt;Forms![frm Produits]&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Info&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Dans les langages inspirés du C++ (C++ bien sûr, mais aussi Java, C#, PHP...), l'équivalent de &lt;code&gt;Me &lt;/code&gt;s'appelle &lt;code&gt;this&lt;/code&gt;.&lt;/div&gt;
&lt;h3&gt;Où peut-on rencontrer Me ?&lt;/h3&gt;
&lt;p&gt;Comme &lt;code&gt;Me &lt;/code&gt;désigne une instance de classe, il ne peut être utilisé que &lt;strong&gt;dans du code VBA reposant sur des classes&lt;/strong&gt;. Concrètement, vous ne pouvez utiliser &lt;code&gt;Me&lt;/code&gt; que dans :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Un &lt;strong&gt;module de formulaire&lt;/strong&gt;&lt;br /&gt;Dans ce cas, &lt;code&gt;Me &lt;/code&gt;désigne l'objet Formulaire en question (donc une instance de la classe &lt;code&gt;Access.Form&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;module d'état&lt;/strong&gt;&lt;br /&gt;Dans ce cas, &lt;code&gt;Me &lt;/code&gt;désigne l'objet État en question (une instance de la classe &lt;code&gt;Access.Report&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;module de classe&lt;/strong&gt; VBA&lt;br /&gt;Dans ce cas, &lt;code&gt;Me &lt;/code&gt;désigne l'instance de classe concernée.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;warning-header&quot;&gt;Attention&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;Les &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2008/11/12/Modules-standard&quot;&gt;modules standard&lt;/a&gt; ne sont pas des modules de classe (par définition !). Donc, vous ne pouvez pas utiliser &lt;code&gt;Me &lt;/code&gt;dans ces modules.&lt;/div&gt;
&lt;h3&gt;A quoi ça sert ?&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Me&lt;/code&gt; est d'abord un &lt;strong&gt;raccourci d'écriture&lt;/strong&gt;. Imaginez ce bout de code qui modifie la légende de 2 formulaires :&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; Test&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; Forms!&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;frm Clients&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Caption&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;Test 1&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Forms&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;frm Produits&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Caption&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;Test 2&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;Sub&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Le code donne 2 variantes d'écriture équivalentes (avec crochets ou avec parenthèses). Si ce code est tapé &lt;strong&gt;hors des formulaires&lt;/strong&gt; &lt;code&gt;frm Clients&lt;/code&gt; et &lt;code&gt;frm Produits&lt;/code&gt; (par exemple dans un module standard), il ne doit pas être modifié, puisque vous &quot;pilotez&quot; en quelque sorte des formulaires de l'extérieur. Il faut donc spécifier le chemin complet pour accéder à chaque formulaire.&lt;/p&gt;
&lt;p&gt;Imaginons maintenant que le code soit tapé &lt;strong&gt;dans le formulaire Clients&lt;/strong&gt;. Étant donné qu'on se trouve dans le formulaire lui-même, il n'est plus utile de le nommer entièrement. On peut donc simplifier en :&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; Test&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;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Caption&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;Test 1&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Forms&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;frm Produits&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Caption&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;Test 2&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;Sub&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;La deuxième ligne reste inchangée, puisqu'on ne se trouve pas dans le formulaire Produits (il faut pointer ce formulaire explicitement).&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Comme on l'a dit plus haut, le premier avantage est que le code est plus court à écrire, donc plus efficace.&lt;/li&gt;
&lt;li&gt;Autre côté pratique : si vous renommez &lt;code&gt;frm Clients&lt;/code&gt; en &lt;code&gt;frm Customers&lt;/code&gt;, le 2ème listing fonctionne toujours. Alors que l'exemple plus haut lèvera une erreur. Il donc plus facile de faire évoluer la base de données.&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/07/08/Quest-ce-que-Me-en-langage-VBA#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/07/08/Quest-ce-que-Me-en-langage-VBA#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/286</wfw:commentRss>
      </item>
    
  <item>
    <title>Liste des tables - Version 2</title>
    <link>http://grenier.self-access.com/?post/2010/07/08/Liste-des-tables-Version-2</link>
    <guid isPermaLink="false">urn:md5:1ca5e4d98e7c9f2ca9854175dafad372</guid>
    <pubDate>Thu, 08 Jul 2010 10:03:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Formulaires - Listes</category>
        <category>access 2002</category><category>access 2003</category><category>access 2007</category><category>formulaire</category><category>table</category><category>vba</category><category>état</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Voici une suite à l'article &quot;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2009/02/16/Liste-des-tables&quot;&gt;Liste des tables&lt;/a&gt;&quot; paru l'année dernière. Dans cette article, il était question d'afficher la liste des tables Access dans la fenêtre &lt;strong&gt;Exécution&lt;/strong&gt;. Question d'un lecteur sur cet article : &quot;peut-on faire autre chose de cette liste, au lieu de simplement l'afficher dans la fenêtre &lt;strong&gt;Exécution &lt;/strong&gt;?&quot;. Voici qui devrait donner de nouvelles pistes...&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Application 1 : afficher les tables dans une liste de formulaire&lt;/h3&gt;
&lt;p&gt;Dans cet exemple, on choisit afficher les tables sur un formulaire, dans une liste (&lt;code&gt;ListBox&lt;/code&gt;). Pour cela :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Construisez le formulaire.&lt;/li&gt;
&lt;li&gt;Placez sur le formulaire une liste (ou une liste déroulante) : objets &lt;code&gt;ListBox &lt;/code&gt;ou &lt;code&gt;ComboBox&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A l'aide des propriétés, nommez cette liste &lt;code&gt;lstTables&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Toujours dans les propriétés de la liste, onglet &lt;strong&gt;Données&lt;/strong&gt;, réglez la propriété &lt;code&gt;Origine Source&lt;/code&gt; sur &lt;code&gt;Liste Valeurs&lt;/code&gt;. Sinon, il sera impossible d'ajouter des éléments à la liste de façon dynamique.&lt;/li&gt;
&lt;li&gt;Programmez ceci dans l'événement &lt;code&gt;Sur ouverture&lt;/code&gt; du formulaire :&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; Form_Open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Cancel &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Integer&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; db &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; DAO.&lt;span class=&quot;kw1&quot;&gt;Database&lt;/span&gt;, tdf &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; DAO.&lt;span class=&quot;me1&quot;&gt;TableDef&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; db = CurrentDb&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each tdf In db.&lt;span class=&quot;me1&quot;&gt;TableDefs&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;tdf.&lt;span class=&quot;me1&quot;&gt;Attributes&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;And&lt;/span&gt; dbSystemObject&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&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;Me&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;lstTables&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;AddItem&lt;/span&gt; tdf.&lt;span class=&quot;kw1&quot;&gt;Name&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; tdf&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; db = &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;A l'ouverture, vous obtenez ceci :&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/forms/lists/formulaire_liste_tables.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Reste maintenant à trouver quoi faire des tables, mais ce n'est pas le sujet de cet article ! :-)
&lt;div class=&quot;warning-header&quot;&gt;Note&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;La méthode &lt;code&gt;AddItem &lt;/code&gt;n'existe pas dans les Access antérieurs à 2002. Si c'est votre cas, consultez &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/07/08/Si%20votre%20Access%20est%20ant%C3%A9rieur%20%C3%A0%202002&quot;&gt;cet autre article&lt;/a&gt; du blog.&lt;/div&gt;
&lt;h3&gt;Application 2 : stocker la liste des tables... dans une table&lt;/h3&gt;
Dans l'exemple précédent, la liste de tables est alimentée directement en VBA. Vous pouvez aussi stocker la liste des tables dans une autre table. Comme beaucoup de &quot;constructions&quot; Access sont basées sur des tables, on peut imaginer toutes sortes de traitements ensuite (voir plus bas).&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Dans mon cas, j'ai préparé une table &lt;code&gt;tbl Tables&lt;/code&gt; (ben oui, le nom est moyen :-)), qui comporte au moins un champ &lt;code&gt;Nom Table&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Recopiez ce code dans un module standard de la base de données :&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;Function&lt;/span&gt; StockageListeTables&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; db &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; DAO.&lt;span class=&quot;kw1&quot;&gt;Database&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; tdf &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; DAO.&lt;span class=&quot;me1&quot;&gt;TableDef&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;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' La base de données en cours&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; db = CurrentDb&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Vider la liste actuelle des tables&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; db.&lt;span class=&quot;me1&quot;&gt;Execute&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;DELETE * FROM [tbl Tables];&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' La table de stockage&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; rst = db.&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 Tables&amp;quot;&lt;/span&gt;, dbOpenDynaset&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Parcourir la liste des tables et les stocker&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On stocke toutes les tables sauf :&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' - les table systèmes&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' - la table tbl Tables&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each tdf In db.&lt;span class=&quot;me1&quot;&gt;TableDefs&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;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tdf.&lt;span class=&quot;me1&quot;&gt;Attributes&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;And&lt;/span&gt; dbSystemObject&lt;span class=&quot;br0&quot;&gt;&amp;#41;&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; &lt;span class=&quot;kw1&quot;&gt;And&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tdf.&lt;span class=&quot;kw1&quot;&gt;Name&lt;/span&gt; &amp;lt;&amp;gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;tbl Tables&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; 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;Nom Table&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = tdf.&lt;span class=&quot;kw1&quot;&gt;Name&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;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; tdf&lt;br /&gt;
&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; db = &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;Pour exécuter ce code, vous pouvez ensuite :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Placer un bouton sur un formulaire.&lt;/li&gt;
&lt;li&gt;Programmer l'événement &lt;code&gt;Sur clic&lt;/code&gt; du bouton en y tapant :&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; MonBouton_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; StockageListeTables&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;Une fois le bouton cliqué, la table de stockage contient :&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/forms/lists/liste_tables.jpg&quot; /&gt;&lt;br /&gt;&lt;h3&gt;Applications dérivées&lt;/h3&gt;
Maintenant que les tables sont listées... dans une table, on peut utiliser &lt;code&gt;tbl Tables&lt;/code&gt; pour :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Construire des requêtes&lt;/li&gt;
&lt;li&gt;Construire des formulaires&lt;/li&gt;
&lt;li&gt;Construire des états&lt;/li&gt;
&lt;li&gt;D'autres idées ?&lt;/li&gt;
&lt;/ul&gt;
Voici par exemple un état vite fait basé sur &lt;code&gt;tbl Tables&lt;/code&gt; :&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/forms/lists/etat_liste_tables.png&quot; /&gt;&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/07/08/Liste-des-tables-Version-2#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/07/08/Liste-des-tables-Version-2#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/339</wfw:commentRss>
      </item>
    
  <item>
    <title>Double-clic dans les listes déroulantes</title>
    <link>http://grenier.self-access.com/?post/2010/07/07/Double-clic-dans-les-listes-deroulantes</link>
    <guid isPermaLink="false">urn:md5:4c310e822e3b05b5aac9532ec9b00157</guid>
    <pubDate>Wed, 07 Jul 2010 18:21:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Le saviez-vous ?</category>
            
    <description>    &lt;h3&gt;Le saviez-vous ?&lt;/h3&gt;
&lt;p&gt;Dans Access, il y a plein de réglages qui se font par listes déroulantes. Parmi eux :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Choisir un tri croissant ou décroissant dans une requête.&lt;/li&gt;
&lt;li&gt;Choisir les barres de défilement d'un formulaire (barre verticale, barre horizontale, les deux, aucune).&lt;/li&gt;
&lt;li&gt;Régler des propriétés de table (&lt;code&gt;Null interdit&lt;/code&gt; = &lt;code&gt;Oui &lt;/code&gt;ou &lt;code&gt;Non&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
La liste n'est pas exhaustive, y en a plein !&lt;br /&gt;Juste un petit truc rapide : au lieu de dérouler la liste, vous pouvez généralement &lt;strong&gt;double-cliquer&lt;/strong&gt; dedans. Ce qui a pour effet de sélectionner la valeur suivante dans la liste.&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/forms/ac_select_requete.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Par exemple, si vous double-cliquez dans un tri vide, ci-dessus, vous obtenez &quot;Croissant&quot;. Un autre double-clic donne &quot;Décroissant&quot;. Un 3ème double-clic vide le tri. Pratique dans certains cas (notamment pour les valeurs Oui/Non).&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/07/07/Double-clic-dans-les-listes-deroulantes#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/07/07/Double-clic-dans-les-listes-deroulantes#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/338</wfw:commentRss>
      </item>
    
  <item>
    <title>Tester une connexion avec le serveur</title>
    <link>http://grenier.self-access.com/?post/2010/07/06/Tester-une-connexion-avec-le-serveur</link>
    <guid isPermaLink="false">urn:md5:914738a61c36c834fb35a3f0ed37c365</guid>
    <pubDate>Tue, 06 Jul 2010 16:05:00 +0200</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 97</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Comment vérifier que le serveur qui héberge ma base de données est bien accessible ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Principe&lt;/h3&gt;
&lt;p&gt;Lorsque vous travaillez en réseau sur Access, vous scindez généralement votre application en 2 : une &lt;strong&gt;base frontale&lt;/strong&gt; (qui contient les requêtes, formulaires, états, macros, modules) et une &lt;strong&gt;base dorsale&lt;/strong&gt; (qui contient les tables et les relations). La base frontale est située sur chaque poste utilisateur, la base dorsale est par contre placée sur le serveur.&lt;/p&gt;
&lt;p&gt;Vous aurez peut-être besoin, dans la base frontale, de vérifier si le serveur - ou la base dorsale - est accessible. Notamment dans le cas où vous souhaitez recréer les liaisons de tables. Voici une fonction qui va aider.&lt;/p&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Information&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Pour plus de détails sur la mise en réseau d'une base Access, consultez la page &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.self-access.com/cms/access/tutoriaux/access-reseau/&quot;&gt;Access en réseau&lt;/a&gt;.&lt;/div&gt;
&lt;h3&gt;Le code Visual Basic&lt;/h3&gt;
&lt;p&gt;Recopiez la fonction ci-dessous dans un module standard 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;kw1&quot;&gt;Function&lt;/span&gt; ServeurOK&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ByVal strCheminBase &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;Boolean&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strFichier &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;
&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; strFichier = &lt;span class=&quot;kw1&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strCheminBase&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ServeurOK = &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;Tester le code&lt;/h3&gt;
&lt;p&gt;La fonction précédente doit recevoir un chemin de fichier (une base Access ou n'importe quel autre fichier, en fait). Elle renvoie &lt;code&gt;True &lt;/code&gt;si le fichier existe à l'emplacement donnée, &lt;code&gt;False &lt;/code&gt;sinon. Pour la tester, écrivez ceci dans une procédure ou une fonction VBA :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; ServeurOK&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;\\Serveur\Dossier\base_dorsale.mdb&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; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Serveur ok&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Pas de serveur&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;If&lt;/span&gt;&lt;/div&gt;&lt;p&gt;où :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Serveur &lt;/code&gt;est le nom (ou l'adresse IP) de votre serveur.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Dossier &lt;/code&gt;est le nom du dossier partagé qui contient la base MDB (il peut y avoir plusieurs niveaux : &lt;code&gt;\\Serveur\Dossier1\Dossier2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;base_dorsale.mdb&lt;/code&gt; est le nom de votre... base Access dorsale.&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/07/06/Tester-une-connexion-avec-le-serveur#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/07/06/Tester-une-connexion-avec-le-serveur#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/329</wfw:commentRss>
      </item>
    
  <item>
    <title>Modifier l'état Majuscules/Minuscules (Caps Lock) du clavier en VBA</title>
    <link>http://grenier.self-access.com/?post/2010/06/14/Modifier-letat-Majuscules/Minuscules-Caps-Lock-du-clavier-en-VBA</link>
    <guid isPermaLink="false">urn:md5:109f8fe38edb8a8344d676f4491d5e95</guid>
    <pubDate>Mon, 14 Jun 2010 08:55: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 97</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Peut-on forcer l'état du clavier en majuscules (ou minuscules), en VBA ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Avant toute chose&lt;/h3&gt;
&lt;p&gt;&lt;img style=&quot;float: right; margin: 0 0 1em 1em;&quot; alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/common/keyboard.png&quot; /&gt;&lt;strong&gt;Ce qui suit ne devrait pas servir souvent&lt;/strong&gt;. Sur Access, il y a plusieurs autres techniques &quot;natives&quot; pour transformer une saisie en majuscules, elles sont traitées dans &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/06/11/Forcer-une-saisie-en-majuscules-dans-un-champ-Access&quot;&gt;cet autre article&lt;/a&gt; du Grenier. Ce sont ces techniques qu'il faut privilégier, sauf cas particulier bien sûr.&lt;/p&gt;
&lt;p&gt;Ici, il est question de &lt;strong&gt;forcer &lt;/strong&gt;le passage du clavier en majuscules (la même chose que d'appuyer sur la touche &lt;strong&gt;Verr. MAJ&lt;/strong&gt; - ou &lt;strong&gt;Caps Lock&lt;/strong&gt; - du clavier). &lt;/p&gt;
&lt;p&gt;Un exemple de cas spécifique, dont il a été question sur les forums du site : forcer le clavier automatiquement pour utiliser un modèle de scanner de code barre où les caractères doivent être inscrits en majuscules.&lt;/p&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
&lt;p&gt;Recopiez tout le code VBA ci-dessous dans un module standard 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;' Fonctions API&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Declare&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; GetKeyboardState Lib &lt;span class=&quot;st0&quot;&gt;&amp;quot;user32&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;kbArray &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; KeyboardBytes&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;Long&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Declare&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Function&lt;/span&gt; SetKeyboardState Lib &lt;span class=&quot;st0&quot;&gt;&amp;quot;user32&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;kbArray &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; KeyboardBytes&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;Long&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Structure pour stocker les infos clavier&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Type&lt;/span&gt; KeyboardBytes&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;kbByte&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;kw1&quot;&gt;To&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;255&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; Byte&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Type&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Enumération pour les états de clavier&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Enum&lt;/span&gt; CapsLockOnOff&lt;br /&gt;
&amp;nbsp; &amp;nbsp; CapsLockOff = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; CapsLockOn = &lt;span class=&quot;nu0&quot;&gt;1&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;kw1&quot;&gt;Dim&lt;/span&gt; kbArray &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; KeyboardBytes&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;' CHANGEMENT D'ETAT DU CLAVIER&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;Public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; SetCapsLock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;c &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; CapsLockOnOff&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; GetKeyboardState kbArray&lt;br /&gt;
&amp;nbsp; &amp;nbsp; kbArray.&lt;span class=&quot;me1&quot;&gt;kbByte&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&amp;amp;H14&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = c&lt;br /&gt;
&amp;nbsp; &amp;nbsp; SetKeyboardState kbArray&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;Tester&lt;/h3&gt;
&lt;p&gt;Dans l'événement &lt;code&gt;Sur clic&lt;/code&gt; d'un bouton (ou à tout autre endroit qui vous convient !), tapez ceci pour passer le clavier en majuscules :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;SetCapsLock CapsLockOn&lt;/div&gt;
&lt;p&gt;Et si vous souhaitez passer le clavier en minuscules, tapez plutôt :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;SetCapsLock CapsLockOff&lt;/div&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Note&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Le code VB ci-dessus n'a pas d'effet sur la lumière &quot;Caps Lock&quot; du clavier.&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/06/14/Modifier-letat-Majuscules/Minuscules-Caps-Lock-du-clavier-en-VBA#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/06/14/Modifier-letat-Majuscules/Minuscules-Caps-Lock-du-clavier-en-VBA#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/336</wfw:commentRss>
      </item>
    
  <item>
    <title>Forcer une saisie en majuscules dans un champ Access</title>
    <link>http://grenier.self-access.com/?post/2010/06/11/Forcer-une-saisie-en-majuscules-dans-un-champ-Access</link>
    <guid isPermaLink="false">urn:md5:5a2d70b61566e471b99937eaa69a8a36</guid>
    <pubDate>Fri, 11 Jun 2010 15:03:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Tables et relations</category>
        <category>access 2000</category><category>access 2002</category><category>access 2003</category><category>access 2007</category><category>access 97</category><category>formulaire</category><category>table</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Comment forcer une saisie en &lt;strong&gt;majuscules &lt;/strong&gt;(ou inversement en minuscules) dans un champ de table Access ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Première technique&lt;/h3&gt;
&lt;p&gt;La première technique consiste à intervenir directement au niveau du champ de table, grâce à la propriété &quot;&lt;code&gt;Masque de saisie&lt;/code&gt;&quot;. Pour cela :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Ouvrez votre table en mode Création.&lt;/li&gt;
&lt;li&gt;Placez-vous sur le champ concerné.&lt;/li&gt;
&lt;li&gt;Dans les propriétés, renseignez le masque de saisie de cette manière :&lt;br /&gt;&lt;code&gt;&amp;gt;CCCCCCCCCC&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ce qu'il faut savoir :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Dans un masque de saisie, le symbole &lt;code&gt;C&lt;/code&gt; désigne n'importe quel caractère ou espace, en saisie facultative. Dans mon exemple, je suppose que le champ à forcer en majuscules fait donc 10 caractères facultatifs (puisque j'ai placé 10 fois le symbole &lt;code&gt;C&lt;/code&gt;). Si votre champ fait 30 caractères de long, vous devez placer 30 fois la lettre &lt;code&gt;C&lt;/code&gt;. Comme les caractères sont facultatifs, rien n'empêchera l'utilisateur de taper un mot de 5 lettres uniquement.&lt;/li&gt;
&lt;li&gt;Pour rendre les caractères obligatoires, vous utiliseriez le symbole &lt;code&gt;&amp;amp;&lt;/code&gt; à la place de &lt;code&gt;C&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Et surtout : le signe &lt;code&gt;&amp;gt;&lt;/code&gt; force la transformation en majuscules des caractères qui le suivent. Dans mon exemple, il est placé en début de masque, ce qui veut dire que les 10 caractères qui suivront seront convertis en majuscules.&lt;/li&gt;
&lt;li&gt;Pour forcer une conversion en minuscules, vous utiliseriez le signe &lt;code&gt;&amp;lt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Du coup, un masque comme &lt;code&gt;&amp;gt;C&amp;lt;CCCC&lt;/code&gt; signifierait : forcer la 1ère lettre (facultative) en majuscule, et les 4 suivantes (facultatives aussi) en minuscules.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Conseil&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Pour obtenir la liste des caractères autorisés dans un masque de saisie, consultez l'aide d'Access.&lt;/div&gt;
&lt;h3&gt;Deuxième technique&lt;/h3&gt;
&lt;p&gt;La méthode précédente est rapide, assez simple à mettre en place, et elle a le mérite de se placer au niveau de la table. Mais elle a aussi quelques inconvénients à mon goût :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Le fait de taper tous ces symboles, c'est loooong !&lt;/li&gt;
&lt;li&gt;Si je décide ultérieurement d'agrandir la taille du champ, il faut que je pense à ajouter d'autres caractères &lt;code&gt;C&lt;/code&gt; dans le masque de saisie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Du coup, voici une autre façon de faire, cette fois au niveau du formulaire :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Ouvrez le formulaire qui sert à alimenter la table, en mode Création.&lt;/li&gt;
&lt;li&gt;Faites apparaître les propriétés du formulaire, onglet &lt;strong&gt;Evénement&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Cliquez dans l'événement &lt;code&gt;Avant MAJ&lt;/code&gt;, et réglez-le sur &quot;&lt;code&gt;Procédure événementielle&lt;/code&gt;&quot;, à l'aide de sa liste déroulante.&lt;/li&gt;
&lt;li&gt;Cliquez sur les points de suspension à droite de l'événement, vous arrivez dans un bloc Visual Basic.&lt;/li&gt;
&lt;li&gt;Enfin, tapez quelque chose comme ceci (vous aménagez en fonction de vos noms de champs) :&lt;br /&gt;&lt;code&gt;Me.Nom_Acteur = UCase(Me.Nom_Acteur)&lt;/code&gt;&lt;br /&gt;ou :&lt;br /&gt;&lt;code&gt;Me![Nom Acteur] = UCase(Me![Nom Acteur]&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Dans mon cas, le champ à forcer en majuscules s'appelle &lt;code&gt;Nom Acteur&lt;/code&gt;. C'est la fonction VBA &lt;code&gt;UCase()&lt;/code&gt; qui effectue la conversion. La conversion se fera systématiquement avant que la saisie soit transférée dans la table.&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/06/11/Forcer-une-saisie-en-majuscules-dans-un-champ-Access#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/06/11/Forcer-une-saisie-en-majuscules-dans-un-champ-Access#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/337</wfw:commentRss>
      </item>
    
  <item>
    <title>Importer plusieurs feuilles Excel dans une table Access en VBA</title>
    <link>http://grenier.self-access.com/?post/2010/06/04/Importer-plusieurs-feuilles-Excel-dans-une-table-Access-en-VBA</link>
    <guid isPermaLink="false">urn:md5:20903c7322b02454956dd77fd98a20b5</guid>
    <pubDate>Fri, 04 Jun 2010 12:03: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 97</category><category>excel</category><category>table</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Je dispose de plusieurs feuilles Excel (de même structure), et je souhaiterais les importer toutes dans une seule table Access. Comment faire ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le scénario&lt;/h3&gt;
&lt;p&gt;Dans un classeur Excel (&lt;code&gt;Acteurs.xlsx&lt;/code&gt;), je dispose de 5 feuilles qui ont cette forme :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;CAPTURE&quot; src=&quot;http://grenier.self-access.com/public/office/excel2007_acteurs.jpg&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Les feuilles ont toutes la même structure (sinon, on ne va pas s'en sortir !).&lt;/li&gt;
&lt;li&gt;Les feuilles peuvent avoir ou non des titres sur leur 1ère ligne (dans mon exemple, toutes les feuilles ont des titres).&lt;/li&gt;
&lt;li&gt;La structure des feuilles correspond à la structure de ma table Access : les champs sont dans le même ordre, et les types de données sont compatibles.&lt;/li&gt;
&lt;li&gt;Dans mon scénario, la 1ère colonne (&lt;code&gt;Numéro Acteur&lt;/code&gt;) est clef primaire dans la table Access. Ça veut dire qu'il faut que les valeurs de &lt;code&gt;Numéro Acteur&lt;/code&gt;, dans Excel, soient toutes différentes. Sinon, il y a aura des erreurs - normales - à l'importation.&lt;/li&gt;
&lt;/ul&gt;
La table Access a donc cette forme :&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/office/access2007_acteurs.jpg&quot; /&gt;&lt;br /&gt;
Bien sûr, par Copier/Coller, je pourrais rassembler ces feuilles en 1 seule, et importer la feuille résultante dans Access. Mais ce n'est pas pratique...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;si le nombre de feuilles est important ;&lt;/li&gt;
&lt;li&gt;si l'opération doit être faite régulièrement et manuellement (voir &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2009/05/16/Importer-une-feuille-Excel-dans-Access&quot;&gt;cet autre article&lt;/a&gt; du blog pour l'approche manuelle) ;&lt;/li&gt;
&lt;li&gt;si le nombre de lignes total dépasse le nombre de lignes d'Excel. Dans Excel 2007 et 2010, ça devrait aller, mais on est limité à 65536 dans Excel 97 à 2003.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le code&lt;/h3&gt;
Voici une procédure VBA à recopier intégralement 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;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;' IMPORTATION DE PLUSIEURS FEUILLES EXCEL&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; ImportExcel&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal 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; ByVal varFeuilles &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant, _&lt;br /&gt;
&amp;nbsp; ByVal blnNoms &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; ByVal strTable &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;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Déclaration des variables&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; strFeuille &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Est-ce que le classeur Excel existe ?&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;Dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strChemin&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&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; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Le classeur ['&amp;quot;&lt;/span&gt; &amp;amp; strChemin &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;] est introuvable.&amp;quot;&lt;/span&gt;, &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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Vidage de la table si nécessaire&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;GoTo&lt;/span&gt; ImportExcelErr&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Souhaitez-vous vider la table [&amp;quot;&lt;/span&gt; &amp;amp; strTable &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;] avant l'importation ?&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;vbQuestion&lt;/span&gt; + &lt;span class=&quot;kw1&quot;&gt;vbYesNo&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;vbYes&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&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 [&amp;quot;&lt;/span&gt; &amp;amp; strTable &amp;amp; &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;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Procédure d'importation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each strFeuille In varFeuilles&lt;br /&gt;
&amp;nbsp; &amp;nbsp; DoCmd.&lt;span class=&quot;me1&quot;&gt;TransferSpreadsheet&lt;/span&gt; acImport, acSpreadsheetTypeExcel12, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; strTable, strChemin, blnNoms, strFeuille &amp;amp; &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;Next&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Un p'tit message pour terminer :-)&lt;/span&gt;&lt;br /&gt;
&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;
&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;br /&gt;
ImportExcelErr:&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Erreur d'importation : &amp;quot;&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Description&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;Exit&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&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;La procédure ci-dessus doit recevoir 4 paramètres pour fonctionner :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Le chemin complet du classeur Excel à importer.&lt;/li&gt;
&lt;li&gt;La liste des feuilles à importer (au cas où certaines feuilles devraient être ignorées).&lt;/li&gt;
&lt;li&gt;Le nom de la table Access de destination.&lt;/li&gt;
&lt;li&gt;Une valeur booléenne (&lt;code&gt;True &lt;/code&gt;/ &lt;code&gt;False&lt;/code&gt;) qui indique si les feuilles Excel ont des titres en première ligne.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Tester le code&lt;/h3&gt;
Le code ci-dessus prend en charge la procédure d'importation. Il ne reste plus qu'à le tester : écrivez cette autre procédure (pourquoi pas dans le même module), qui va appeler le code d'importation :&lt;br /&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; TestImportExcel&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; varFeuilles &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Variant&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Liste des feuilles Excel à importer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; varFeuilles = &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;Acteurs1&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Acteurs2&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Acteurs3&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Acteurs4&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Acteurs5&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Importation proprement dite&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ImportExcel &lt;span class=&quot;st0&quot;&gt;&amp;quot;C:\Users\Hervé\Documents\Acteurs.xlsx&amp;quot;&lt;/span&gt;, _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; varFeuilles, &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;tbl Acteurs - Import&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;Sub&lt;/span&gt;&lt;/div&gt;Bien sûr, vous adaptez les valeurs en fonction de votre configuration.&lt;br /&gt;Exécutez ce deuxième bloc de code. Il vous sera demandé si vous souhaitez vider la table Access avant d'importer toutes les données. &lt;br /&gt;Ensuite... vous êtes arrivé !&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/office/access2007_acteurs_importation.jpg&quot; /&gt;&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/06/04/Importer-plusieurs-feuilles-Excel-dans-une-table-Access-en-VBA#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/06/04/Importer-plusieurs-feuilles-Excel-dans-une-table-Access-en-VBA#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/335</wfw:commentRss>
      </item>
    
  <item>
    <title>Automatiser l'impression d'un classeur Excel en PDF via PDFCreator</title>
    <link>http://grenier.self-access.com/?post/2010/05/16/Automatiser-limpression-dun-classeur-Excel-en-PDF-via-PDFCreator</link>
    <guid isPermaLink="false">urn:md5:c1e114db3a5e463c8c35215142f7b385</guid>
    <pubDate>Sun, 16 May 2010 14:05:00 +0200</pubDate>
    <dc:creator>Hervé Inisan</dc:creator>
        <category>Liaisons Office</category>
        <category>excel</category><category>office</category><category>pdf</category><category>vba</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/07/Automatiser-limpression-dun-etat-en-PDF-via-PDFCreator&quot;&gt;Automatiser l'impression d'un état en PDF via PDFCreator&lt;/a&gt;, un lecteur du blog m'a demandé si c'était possible de faire la même chose pour &lt;strong&gt;Excel &lt;/strong&gt;uniquement. Il faut juste quelques petits aménagements pour transformer le code Access en un code Excel. Voici donc, pour une fois, un article qui s'applique uniquement à Excel...&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Si vous avez manqué le début...&lt;/h3&gt;
&lt;p&gt;&lt;img style=&quot;float: right; margin: 0 0 1em 1em;&quot; alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/reports/pdf.png&quot; /&gt;Consultez l'article cité plus haut avant toute chose. Vous y verrez comment, dans votre projet Excel, faire une référence à la bibliothèque &lt;code&gt;PDFCreator&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Le code VBA&lt;/h3&gt;
&lt;p&gt;Voici la procédure VBA adaptée de l'article précédent, et adaptée spécifiquement pour Excel. Recopiez tout ce code dans un module standard de votre classeur Excel (ou dans le &lt;strong&gt;classeur de macros personnelles&lt;/strong&gt;, si vous souhaitez le réutiliser souvent).&lt;/p&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; &lt;span class=&quot;kw1&quot;&gt;Explicit&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Ne pas oublier de cocher la bibliothèqe PDFCreator&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' dans le menu Outils / Références de Visual Basic Editor&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' API Windows pour faire une temporisation en millisecondes&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;Private&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Declare&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; Sleep Lib &lt;span class=&quot;st0&quot;&gt;&amp;quot;kernel32&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ByVal dwMilliseconds &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' Constantes pour les temporisations&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; maxTime = &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' en secondes&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; sleepTime = &lt;span class=&quot;nu0&quot;&gt;250&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;' en millisecondes&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;' IMPRESSION D'UN CLASSEUR EXCEL EN PDF&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 : strPDFName&amp;nbsp; &amp;nbsp; &amp;lt;- Nom du fichier PDF à générer (facultatif)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;En l'absence de nom de fichier, le PDF&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;généré reprend le nom du classeur Excel.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;'&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strDirectory&amp;nbsp; &amp;lt;- Chemin de stockage du fichier PDF (facultatif)&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;Public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Sub&lt;/span&gt; SaveAsPDF&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; Optional ByVal strPDFName &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;br /&gt;
&amp;nbsp; Optional ByVal strDirectory &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;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; pdfc &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; PDFCreator.&lt;span class=&quot;me1&quot;&gt;clsPDFCreator&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; DefaultPrinter &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; c &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Long&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; OutputFilename &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;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Instancier un nouvel objet PDFCreator&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; pdfc = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; clsPDFCreator&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&lt;span class=&quot;co1&quot;&gt;' Paramétrer l'objet PDFCreator&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;With&lt;/span&gt; pdfc&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cStart&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/NoProcessingAtStartup&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cOption&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;UseAutosave&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cOption&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;UseAutosaveDirectory&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Chemin de destination&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Par défaut : dossier 'Mes documents' de l'utilisateur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; strDirectory = &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; strDirectory = &lt;span class=&quot;kw1&quot;&gt;Environ&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&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; &amp;amp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;\Mes documents\&amp;quot;&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;span class=&quot;me1&quot;&gt;cOption&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;AutosaveDirectory&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = strDirectory&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Nom du fichier PDF à générer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cOption&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;AutosaveFilename&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; &lt;span class=&quot;kw1&quot;&gt;IIf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strPDFName = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;, ActiveWorkbook.&lt;span class=&quot;kw1&quot;&gt;Name&lt;/span&gt;, strPDFName&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Format de sauvegarde (0 = PDF)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cOption&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;AutosaveFormat&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Mémoriser l'imprimante par défaut&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' et définir PDFCreator à la place&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; DefaultPrinter = .&lt;span class=&quot;me1&quot;&gt;cDefaultPrinter&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cDefaultPrinter&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;PDFCreator&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cClearCache&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Imprimer les feuilles sélectionnées&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ActiveWindow.&lt;span class=&quot;me1&quot;&gt;SelectedSheets&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;PrintOut&lt;/span&gt; Copies:=&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;, Collate:=&lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cPrinterStop&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;False&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;With&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Temporisation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; c = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Do&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;While&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;pdfc.&lt;span class=&quot;me1&quot;&gt;cOutputFilename&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;span class=&quot;kw1&quot;&gt;And&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;c &amp;lt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;maxTime * &lt;span class=&quot;nu0&quot;&gt;1000&lt;/span&gt; / sleepTime&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; c = c + &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Sleep &lt;span class=&quot;nu0&quot;&gt;200&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Loop&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Nom du fichier PDF produit&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; OutputFilename = pdfc.&lt;span class=&quot;me1&quot;&gt;cOutputFilename&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Réinstaller l'imprimante d'origine&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;With&lt;/span&gt; pdfc&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cDefaultPrinter&lt;/span&gt; = DefaultPrinter&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Sleep &lt;span class=&quot;nu0&quot;&gt;200&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;cClose&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;With&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Attendre jusqu'à ce que PDFCreator soit supprimé de la mémoire&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Sleep &lt;span class=&quot;nu0&quot;&gt;2000&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Vérifier si le fichier a été créé&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; OutputFilename = &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; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Création du fichier PDF.&amp;quot;&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;vbCrLf&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;vbCrLf&lt;/span&gt; &amp;amp; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Une erreur s'est produite : temps écoulé !&amp;quot;&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt; + &lt;span class=&quot;kw1&quot;&gt;vbSystemModal&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;h3&gt;Exemple 1&lt;/h3&gt;
&lt;p&gt;La procédure reçoit 2 paramètres en entrée, les 2 étant facultatifs :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Le &lt;strong&gt;nom du fichier PDF&lt;/strong&gt; à générer. Par défaut, le nom du classeur sera repris, sinon.&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;dossier de stockage&lt;/strong&gt; du PDF. Par défaut, il s'agit du dossier &lt;em&gt;Documents &lt;/em&gt;de l'utilisateur. Si vous travaillez sur Windows Vista ou 7, remplacez le &lt;code&gt;&quot;\Mes documents\&quot;&lt;/code&gt; par &lt;code&gt;&quot;\Documents&quot;&lt;/code&gt;, dans le code, sinon ça ne marchera pas.&lt;/li&gt;
&lt;/ul&gt;
Voici un exemple d'appel simple du code VBA :&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;Sub&lt;/span&gt; Test1&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;' Imprimer seulement la feuille en cours&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Sheets&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Feuil1&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Select&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; SaveAsPDF &lt;span class=&quot;st0&quot;&gt;&amp;quot;test.pdf&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;Sub&lt;/span&gt;&lt;/div&gt;&lt;h3&gt;Exemple 2&lt;/h3&gt;
&lt;p&gt;Voici un 2ème exemple. Cette fois, on sélectionne au préalable 2 feuilles du classeurs, pour les imprimer dans le même PDF :&lt;/p&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;Sub&lt;/span&gt; Test2&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;' Imprimer les feuilles Feuil1 et Feuil2&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; Sheets&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&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;Feuil1&amp;quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Feuil2&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;span class=&quot;me1&quot;&gt;Select&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; SaveAsPDF &lt;span class=&quot;st0&quot;&gt;&amp;quot;test2.pdf&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;Sub&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/05/16/Automatiser-limpression-dun-classeur-Excel-en-PDF-via-PDFCreator#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/05/16/Automatiser-limpression-dun-classeur-Excel-en-PDF-via-PDFCreator#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/334</wfw:commentRss>
      </item>
    
  <item>
    <title>Supprimer tout le code HTML d'une chaîne</title>
    <link>http://grenier.self-access.com/?post/2010/04/26/Supprimer-tout-le-code-HTML-dune-chaine</link>
    <guid isPermaLink="false">urn:md5:d273a503d210a04ec55be761edcc654b</guid>
    <pubDate>Mon, 26 Apr 2010 14:18: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 97</category><category>expression régulière</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;J'ai une chaîne de caractères contenant du code HTML. Comment supprimer tout ce code automatiquement ?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le principe&lt;/h3&gt;
&lt;p&gt;Soit une chaîne de caractères contenant du code HTML. Par exemple :&lt;/p&gt;
&lt;pre&gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Ceci est un &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt;.&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;L'idée est d'extraire toutes les balises HTML pour ne conserver que la phrase :&lt;/p&gt;
&lt;pre&gt;Ceci est un test.&lt;/pre&gt;&lt;h3&gt;Version Access 2007&lt;/h3&gt;
&lt;p&gt;Access 2007 propose une fonction &lt;code&gt;PlainText()&lt;/code&gt; qui va faire l'affaire :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Ouvrez 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;Tapez-y quelque chose comme ce qui suit, et tapez &lt;code&gt;[Entrée]&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;? PlainText&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Ceci est un &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt;.&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Et c'est tout !&lt;/p&gt;
&lt;h3&gt;Version 2003 et inférieure&lt;/h3&gt;
&lt;p&gt;Si vous disposez d'un Access 2003 (ou moins), ce n'est pas si simple que ça : il faut passer par du VBA, détecter tout ce qui ressemble à une balise, enlever le superflu... tout ça quoi ! Une fois encore, les &lt;strong&gt;expressions rationnelles&lt;/strong&gt; (appelées plus souvent &quot;&lt;strong&gt;expressions régulières&lt;/strong&gt;&quot;) vont nous sortir d'affaire. Pour la mise en place générale de la bibliothèque VBScript Regular Expressions, consultez le début de &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2008/02/07/Valider-la-saisie-dune-adresse-e-mail&quot;&gt;cet autre article&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;La fonction VBA&lt;/h3&gt;
&lt;p&gt;Voici la fonction VBA qui va s'occuper du nettoyage :&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;' SUPPRESSION DES BALISES HTML D'UNE CHAINE&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; SupprimerHTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ByVal strHTML &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; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; re &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;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On crée une expression rationnelle&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; re = &lt;span class=&quot;kw1&quot;&gt;New&lt;/span&gt; RegExp&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On définit le critère qui cherche toute balise HTML&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; re.&lt;span class=&quot;me1&quot;&gt;Pattern&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;\s*?[^&amp;gt;]+\s*?&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' On fait en sorte que la casse (majuscules/minuscules)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' soit indifférente&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; re.&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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Traitement global (récursif)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; re.&lt;span class=&quot;me1&quot;&gt;Global&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' La fonction Test renvoie True si la chaîne&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' respecte le critère&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; SupprimerHTML = re.&lt;span class=&quot;me1&quot;&gt;Replace&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strHTML, &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;
&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;Tester la fonction&lt;/h3&gt;
Une fois la fonction ci-dessus recopiée dans un module standard...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Ouvrez 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;Tapez-y quelque chose comme ce qui suit, et tapez &lt;code&gt;[Entrée]&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;? SupprimerHTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Ceci est un &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt;.&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;Tadaaa !&lt;br /&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/04/26/Supprimer-tout-le-code-HTML-dune-chaine#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/04/26/Supprimer-tout-le-code-HTML-dune-chaine#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/332</wfw:commentRss>
      </item>
    
  <item>
    <title>Extraire une portion de page HTML à partir d'Access</title>
    <link>http://grenier.self-access.com/?post/2010/04/25/Extraire-une-portion-de-page-HTML-a-partir-dAccess</link>
    <guid isPermaLink="false">urn:md5:9ee4ca0c9d4c25ecc77e2af510006041</guid>
    <pubDate>Sun, 25 Apr 2010 15:36:00 +0200</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 97</category><category>automation</category><category>fichier</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Dans l'épisode précédent (&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/04/23/Enregistrer-une-page-HTML-a-partir-dAccess&quot;&gt;Enregistrer une page HTML à partir d'Access&lt;/a&gt;), vous avez vu comment enregistrer une page Web entière sur disque. Cette fois, on va essayer d'extraire seulement une portion de la page.&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le principe&lt;/h3&gt;
&lt;p&gt;Une page HTML est décomposée en blocs, délimités par des balises HTML comme &lt;code&gt;body&lt;/code&gt;, &lt;code&gt;div&lt;/code&gt;, &lt;code&gt;table&lt;/code&gt;, etc. Ces blocs sont imbriqués les uns dans les autres. Certains blocs - souvent importants, et en principe uniques sur une page - sont en général nommés par un identifiant (&lt;code&gt;id&lt;/code&gt;). Par exemple, la zone centrale de ce blog est une division HTML nommée &lt;code&gt;content&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/div_content_sample.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;C'est le code source de la page HTML qui nous donne le fameux &lt;code&gt;id&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/div_content.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Notre objectif est d'extraire le texte de tous les articles du bloc &lt;code&gt;content&lt;/code&gt;,
en éliminant les bandes latérales du site. A partir de l'&lt;code&gt;id&lt;/code&gt;, et en utilisant la méthode DOM &lt;code&gt;getElementById()&lt;/code&gt;, on peut extraire la portion de HTML souhaitée.&lt;/p&gt;
&lt;h3&gt;Le code VBA&lt;/h3&gt;
&lt;p&gt;La fonction VBA ci-dessous est donc directement dérivée de celle de l'&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/04/23/Enregistrer-une-page-HTML-a-partir-dAccess&quot;&gt;article précédent&lt;/a&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;' SAUVEGARDE D'UNE PORTION DE PAGE WEB&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;co1&quot;&gt;' A L'AIDE DE INTERNET EXPLORER&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; EnregistrerBlocHTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal 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; ByVal strFichier &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 strID &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;Boolean&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Démarrer et afficher Internet Explorer&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;GoTo&lt;/span&gt; EnregistrerHTMLErr&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; ie &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Object&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ie = &lt;span class=&quot;kw1&quot;&gt;CreateObject&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;InternetExplorer.Application&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Naviguer vers l'adresse souhaitée&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' et attendre qu'elle soit chargée&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;navigate&lt;/span&gt; strURL&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;While&lt;/span&gt; ie.&lt;span class=&quot;me1&quot;&gt;Busy&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;DoEvents&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Wend&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Extraire la zone demandée (par son ID)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; doc &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; MSHTML.&lt;span class=&quot;me1&quot;&gt;HTMLDocument&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; bloc &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; MSHTML.&lt;span class=&quot;me1&quot;&gt;IHTMLElement&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; doc = ie.&lt;span class=&quot;me1&quot;&gt;Document&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; bloc = doc.&lt;span class=&quot;me1&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;strID&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; bloc 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; EnregistrerBlocHTML = &lt;span class=&quot;kw1&quot;&gt;False&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;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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Créer et ouvrir le fichier texte&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; intHandle &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; intHandle = &lt;span class=&quot;kw1&quot;&gt;FreeFile&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Open&lt;/span&gt; strFichier &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Output &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; #intHandle&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Ecrire le contenu HTML de la page Web dans le fichier&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; #intHandle, bloc.&lt;span class=&quot;me1&quot;&gt;innerHTML&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Fermer le fichier et Internet Explorer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Close&lt;/span&gt; #intHandle&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; bloc = &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; doc = &lt;span class=&quot;kw1&quot;&gt;Nothing&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;Quit&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Renvoyer un code de succès&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; EnregistrerBlocHTML = &lt;span class=&quot;kw1&quot;&gt;True&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; &lt;br /&gt;
EnregistrerHTMLErr:&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Erreur : &amp;quot;&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Description&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; EnregistrerBlocHTML = &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;/div&gt;&lt;p&gt;La fonction accepte 3 arguments :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Le 1er paramètre de la fonction est l'adresse de la page Web à
visiter.&lt;/li&gt;
&lt;li&gt;Le 2ème paramètre est le chemin complet du fichier à créer sur votre
disque.&lt;br /&gt;Attention : si le fichier pointé existe, il sera écrasé sans
avertissement. Vous pouvez toujours améliorer le code ! :-)&lt;/li&gt;
&lt;li&gt;Le 3ème paramètre est l'identifiant (&lt;code&gt;id&lt;/code&gt;) du bloc HTML à extraire.&lt;/li&gt;
&lt;li&gt;La fonction fournie renvoie &lt;code&gt;True &lt;/code&gt;si la sauvegarde du bloc HTML a pu se faire correctement, et &lt;code&gt;False &lt;/code&gt;sinon.&lt;/li&gt;
&lt;/ul&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 MSHTML (&lt;em&gt;Microsoft HTML 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;h3&gt;Tester la fonction&lt;/h3&gt;
&lt;p&gt;Pour tester la fonction rapidement, utilisez la fenêtre &lt;strong&gt;Exécution
&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Appuyez sur &lt;code&gt;CTRL &lt;/code&gt;+ &lt;code&gt;G&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Tapez dans la fenêtre &lt;strong&gt;Exécution &lt;/strong&gt;quelque chose comme
:&lt;br /&gt;&lt;code&gt;? EnregistrerHTML(&quot;http://grenier.self-access.com&quot;, &quot;C:\Documents and
Settings\Hervé\Mes documents\grenier.html&quot;, &quot;content&quot;)&lt;/code&gt;&lt;br /&gt;Bien sûr, vous
aménagez le chemin du fichier en fonction de votre propre identifiant de
session Windows. Et si vous travaillez sur Vista/7, le chemin a plutôt
la forme &lt;code&gt;&quot;C:\Users\Hervé\Documents\grenier.html&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/04/25/Extraire-une-portion-de-page-HTML-a-partir-dAccess#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/04/25/Extraire-une-portion-de-page-HTML-a-partir-dAccess#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/331</wfw:commentRss>
      </item>
    
  <item>
    <title>Enregistrer une page HTML à partir d'Access</title>
    <link>http://grenier.self-access.com/?post/2010/04/23/Enregistrer-une-page-HTML-a-partir-dAccess</link>
    <guid isPermaLink="false">urn:md5:55869114b828743ff1d23c5d2181297b</guid>
    <pubDate>Fri, 23 Apr 2010 15:19:00 +0200</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 97</category><category>automation</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Comment enregistrer sur disque le contenu entier d'une &lt;strong&gt;page HTML&lt;/strong&gt;, à partir d'Access ? &lt;/p&gt;
&lt;p&gt;En fait, de VBA en général... Ça marchera donc aussi dans Excel, Word ou toute autre application compatible VBA.&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Le principe&lt;/h3&gt;
&lt;p&gt;Il y a sûrement d'autres moyens de faire, mais dans notre cas, on va sous-traiter le chargement de la page Web par Internet Explorer. On n'aura plus qu'à s'occuper du transfert sur disque...&lt;/p&gt;
&lt;p&gt;Ceci continue la série entamée 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/2010/03/28/Piloter-Internet-Explorer-depuis-Access-par-Automation&quot;&gt;Piloter Internet Explorer depuis Access, par Automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/03/29/Ouvrir-une-page-HTML-avec-mot-de-passe-depuis-Access&quot;&gt;Ouvrir une page HTML avec mot de passe depuis Access&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le code VBA&lt;/h3&gt;
&lt;p&gt;Voici une fonction VBA à 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;' SAUVEGARDE D'UNE PAGE WEB A L'AIDE DE INTERNET EXPLORER&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; EnregistrerHTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; ByVal 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; ByVal strFichier &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;Boolean&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Démarrer et afficher Internet Explorer&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;GoTo&lt;/span&gt; EnregistrerHTMLErr&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; ie &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Object&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ie = &lt;span class=&quot;kw1&quot;&gt;CreateObject&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;InternetExplorer.Application&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;Visible&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Naviguer vers l'adresse souhaitée&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' et attendre qu'elle soit chargée&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;navigate&lt;/span&gt; strURL&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;While&lt;/span&gt; ie.&lt;span class=&quot;me1&quot;&gt;Busy&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;DoEvents&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Wend&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Créer et ouvrir le fichier texte&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; intHandle &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; intHandle = &lt;span class=&quot;kw1&quot;&gt;FreeFile&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Open&lt;/span&gt; strFichier &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Output &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; #intHandle&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Ecrire le contenu HTML de la page Web dans le fichier&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Print&lt;/span&gt; #intHandle, ie.&lt;span class=&quot;me1&quot;&gt;Document&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;documentElement&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;innerHTML&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Fermer le fichier et Internet Explorer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Close&lt;/span&gt; #intHandle&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;Quit&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Renvoyer un code de succès&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; EnregistrerHTML = &lt;span class=&quot;kw1&quot;&gt;True&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; &lt;br /&gt;
EnregistrerHTMLErr:&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Erreur : &amp;quot;&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Description&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; EnregistrerHTML = &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;/div&gt;
&lt;ul&gt;&lt;li&gt;Le 1er paramètre de la fonction est l'adresse de la page Web à visiter (et enregistrer).&lt;/li&gt;
&lt;li&gt;Le 2ème paramètre est le chemin complet du fichier à créer sur votre disque.&lt;br /&gt;Attention : si le fichier pointé existe, il sera écrasé sans avertissement. Vous pouvez toujours améliorer le code ! :-)&lt;/li&gt;
&lt;li&gt;La fonction fournie renvoie &lt;code&gt;True &lt;/code&gt;si la sauvegarde de la page Web a pu se faire correctement, et &lt;code&gt;False &lt;/code&gt;sinon.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tester la fonction&lt;/h3&gt;
&lt;p&gt;Pour tester la fonction rapidement, utilisez la fenêtre &lt;strong&gt;Exécution &lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Appuyez sur &lt;code&gt;CTRL &lt;/code&gt;+ &lt;code&gt;G&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Tapez dans la fenêtre &lt;strong&gt;Exécution &lt;/strong&gt;quelque chose comme :&lt;br /&gt;&lt;code&gt;? EnregistrerHTML(&quot;http://www.lemonde.fr&quot;, &quot;C:\Documents and Settings\Hervé\Mes documents\lemonde.html&quot;)&lt;/code&gt;&lt;br /&gt;Bien sûr, vous aménagez le chemin du fichier en fonction de votre propre identifiant de session Windows. Et si vous travaillez sur Vista/7, le chemin a plutôt la forme &lt;code&gt;&quot;C:\Users\Hervé\Documents\lemonde.html&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
Si ça marche, vous pouvez l'exploiter dans votre application VBA.&lt;br /&gt;
&lt;div class=&quot;warning-header&quot;&gt;Note&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;La fonction enregistre toute la page HTML, mais pas les documents joints. Donc vous n'enregistrerez pas les images, les feuilles de styles CSS, les fichiers Javascript, etc.&lt;/div&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Tuning :-)&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;La ligne &lt;code&gt;ie.Visible = True&lt;/code&gt; permet de voir ce qui se passe, le temps de mettre au point le code. Vous pouvez l'enlever une fois que vous aurez testé...&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/04/23/Enregistrer-une-page-HTML-a-partir-dAccess#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/04/23/Enregistrer-une-page-HTML-a-partir-dAccess#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/330</wfw:commentRss>
      </item>
    
  <item>
    <title>Ouvrir une page HTML avec mot de passe depuis Access</title>
    <link>http://grenier.self-access.com/?post/2010/03/29/Ouvrir-une-page-HTML-avec-mot-de-passe-depuis-Access</link>
    <guid isPermaLink="false">urn:md5:9dca13943b3c6c38e8b62c204bf6ccbe</guid>
    <pubDate>Mon, 29 Mar 2010 11:59:00 +0200</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 97</category><category>automation</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Dans l'article &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2010/03/28/Piloter-Internet-Explorer-depuis-Access-par-Automation&quot;&gt;Piloter Internet Explorer depuis Access&lt;/a&gt;, vous avez vu comment ouvrir une page Web en VBA. La technique devient plus intéressante lorsqu'on doit manipuler le code HTML de la page affichée. Dans ce qui suit, nous allons voir comment nous connecter à la section privée d'un site Web, en remplissant automatiquement les &lt;strong&gt;identifiant &lt;/strong&gt;(&lt;em&gt;login&lt;/em&gt;) et &lt;strong&gt;mot de passe&lt;/strong&gt; d'un formulaire HTML.&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Etape 1 : décrypter le formulaire d'identification&lt;/h3&gt;
&lt;p&gt;&lt;img style=&quot;float: right; margin: 0 0 1em 1em;&quot; alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/formulaire_identification.png&quot; /&gt;Le &lt;strong&gt;formulaire d'identification&lt;/strong&gt; est la portion de page HTML qui vous demande votre nom (identifiant ou &lt;em&gt;login&lt;/em&gt;), et votre mot de passe. Un bouton permet ensuite d'expédier ces informations vers une page ou un script de traitement, qui vérifie si les informations fournies sont correctes. Cette page de traitement est appelée &quot;l'action&quot; en HTML. &lt;/p&gt;
&lt;p&gt;Pour atteindre notre objectif, il faut donc connaître :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;L'&lt;strong&gt;adresse (ou URL)&lt;/strong&gt; de la page HTML qui contient le formulaire d'identification.&lt;/li&gt;
&lt;li&gt;L'&lt;strong&gt;action du formulaire&lt;/strong&gt;, dans la page HTML.&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;nom du champ Identifiant&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;nom du champ Mot de passe&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
Je suppose que vous connaissez l'URL de la page HTML de connexion. Pour obtenir les trois autres informations :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Affichez la page de connexion dans votre navigateur.&lt;/li&gt;
&lt;li&gt;Cliquez sur la page du bouton droit, et choisissez &lt;strong&gt;Afficher la source&lt;/strong&gt; (ou &lt;strong&gt;Code source de la page&lt;/strong&gt;, sous Firefox).&lt;/li&gt;
&lt;li&gt;Faites un &lt;strong&gt;Edition / Rechercher&lt;/strong&gt; (ou &lt;code&gt;CTRL &lt;/code&gt;+ &lt;code&gt;F&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Cherchez une portion de HTML qui démarre par &lt;code&gt;&amp;lt;form&lt;/code&gt; (en majuscules ou minuscules, ça n'a pas d'importance).&lt;br /&gt;Le formulaire complet est obligatoirement compris entre des balises &lt;code&gt;&amp;lt;form ...&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;/form&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La balise d'ouverture du formulaire s'écrit sous cette forme :&lt;br /&gt;&lt;code&gt;&amp;lt;form action=&quot;http://grenier.self-access.com/?post/2010/03/29/xyz.html&quot; method=&quot;post&quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;Notez l'action (ici : &lt;code&gt;xyz.html&lt;/code&gt;, mais ça peut être n'importe quoi d'autre !). Vous avez votre première information.&lt;/li&gt;
&lt;li&gt;Quelque part entre les balises &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;/form&amp;gt;&lt;/code&gt; doivent se trouver les champs de saisie. Ce sont des balises de la forme :&lt;br /&gt;&lt;code&gt;&amp;lt;input type=&quot;...&quot; name=&quot;...&quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;Les 2 champs de saisie qui nous intéressent peuvent par exemple s'écrire :&lt;br /&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; name=&quot;username&quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;input type=&quot;password&quot; name=&quot;password&quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;Notez les 2 attributs &lt;code&gt;name &lt;/code&gt;(ici : &lt;code&gt;username&lt;/code&gt; et &lt;code&gt;password&lt;/code&gt;). Vous avez vos 2 autres informations !&lt;/li&gt;
&lt;/ol&gt;
&lt;img alt=&quot;&quot; src=&quot;http://grenier.self-access.com/public/network/formulaire_identification_html.png&quot; /&gt;
&lt;div class=&quot;warning-header&quot;&gt;Attention&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;Il peut y avoir plusieurs formulaires sur une page Web. Repérez bien sûr le bon !&lt;/div&gt;
&lt;h3&gt;Etape 2 : le code VBA&lt;/h3&gt;
On peut maintenant passer à Access...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Ouvrez votre base de données et ajoutez-y 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;.&lt;/li&gt;
&lt;li&gt;Recopiez tout ce qui suit, tel quel, dans le module :&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;Type&lt;/span&gt; AuthFormDef&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Adresse à atteindre&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; URL &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;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Action du formulaire d'identification&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; FormAction &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;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Nom du champ qui demande le nom d'utilisateur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; UserField &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;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Nom du champ qui demande le mot de passe&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; PasswordField &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;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Valeur du champ Utilisateur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; UserValue &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;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Valeur du champ Mot de passe&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; PasswordValue &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;End&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Type&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 A INTERNET EXPLORER AVEC IDENTIFIANT / MOT DE PASSE&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; ConnexionIE&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;afd &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; AuthFormDef&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; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; ie &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Object&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; doc &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; MSHTML.&lt;span class=&quot;me1&quot;&gt;HTMLDocument&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; frm &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; MSHTML.&lt;span class=&quot;me1&quot;&gt;HTMLFormElement&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; blnFormOK &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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Démarrer et afficher Internet Explorer&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;GoTo&lt;/span&gt; ConnexionIEErr&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ie = &lt;span class=&quot;kw1&quot;&gt;CreateObject&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;InternetExplorer.Application&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;Visible&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Naviguer vers la page et attendre qu'elle soit chargée&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;navigate&lt;/span&gt; afd.&lt;span class=&quot;me1&quot;&gt;URL&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;While&lt;/span&gt; ie.&lt;span class=&quot;me1&quot;&gt;Busy&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;DoEvents&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Wend&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Récupérer l'objet Document affiché&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; doc = ie.&lt;span class=&quot;me1&quot;&gt;Document&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Identifier le formulaire demandé&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; blnFormOK = &lt;span class=&quot;kw1&quot;&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each frm In doc.&lt;span class=&quot;me1&quot;&gt;Forms&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; frm.&lt;span class=&quot;me1&quot;&gt;Action&lt;/span&gt; = afd.&lt;span class=&quot;me1&quot;&gt;FormAction&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; blnFormOK = &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Trouver et renseigner les champs Identifiant/Mot de passe&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' du formulaire&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Dim&lt;/span&gt; obj &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Object&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;For&lt;/span&gt; Each obj In frm.&lt;span class=&quot;me1&quot;&gt;elements&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; obj.&lt;span class=&quot;kw1&quot;&gt;Name&lt;/span&gt; = afd.&lt;span class=&quot;me1&quot;&gt;UserField&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt; obj.&lt;span class=&quot;me1&quot;&gt;Value&lt;/span&gt; = afd.&lt;span class=&quot;me1&quot;&gt;UserValue&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; obj.&lt;span class=&quot;kw1&quot;&gt;Name&lt;/span&gt; = afd.&lt;span class=&quot;me1&quot;&gt;PasswordField&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;Then&lt;/span&gt; obj.&lt;span class=&quot;me1&quot;&gt;Value&lt;/span&gt; = afd.&lt;span class=&quot;me1&quot;&gt;PasswordValue&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Next&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Forcer l'envoi du formulaire&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; frm.&lt;span class=&quot;me1&quot;&gt;submit&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; ConnexionIE = &lt;span class=&quot;kw1&quot;&gt;True&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; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Valeur de retour&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ConnexionIE = blnFormOK&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; &lt;br /&gt;
ConnexionIEErr:&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;MsgBox&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Erreur : &amp;quot;&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Number&lt;/span&gt; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;vbCrLf&lt;/span&gt; _&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;amp; &lt;span class=&quot;kw1&quot;&gt;Err&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Description&lt;/span&gt;, &lt;span class=&quot;kw1&quot;&gt;vbExclamation&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ConnexionIE = &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;/div&gt;Le programme est composé :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;D'un type de données &lt;code&gt;AuthFormDef &lt;/code&gt;qui devrait simplifier la description du formulaire et le passage de paramètres.&lt;/li&gt;
&lt;li&gt;D'une fonction &lt;code&gt;ConnexionIE &lt;/code&gt;qui gère la connexion proprement dite.&lt;/li&gt;
&lt;/ul&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 MSHTML (&lt;em&gt;Microsoft HTML 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;/div&gt;
&lt;div class=&quot;infotip-header&quot;&gt;Note&lt;/div&gt;
&lt;div class=&quot;infotip&quot;&gt;Le remplissage des champs du formulaire est moyennement élégant ;-) mais après quelques tests, il semble que l'utilisation d'une variable comme indice du tableau &lt;code&gt;elements &lt;/code&gt;pose problème. D'où le hack...&lt;/div&gt;
&lt;h3&gt;Etape 3 : tester le code&lt;/h3&gt;
Voici un autre petit programme, que vous ajoutez dans votre module, et qui va permettre de lancer votre connexion proprement dite :&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;' TEST DU FORMULAIRE D'IDENTIFICATION&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; TestConnexionIE&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; afd &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; AuthFormDef&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Paramètres de la connexion&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;With&lt;/span&gt; afd&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;URL&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://www.votre-site.com/formulaire.php&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;FormAction&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://www.votre-site.com/identification.php&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;UserField&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;username&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;PasswordField&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;UserValue&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;votre_identifiant&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; .&lt;span class=&quot;me1&quot;&gt;PasswordValue&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;votre_mot_de_passe&amp;quot;&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;With&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Lancer la connexion&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;If&lt;/span&gt; ConnexionIE&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;afd&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;Connexion établie !&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;Echec de la connexion&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;
&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;Comme vous le voyez, j'utilise la structure &lt;code&gt;AuthFormDef &lt;/code&gt;pour renseigner tous les paramètres du formulaire à remplir :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;URL&lt;/code&gt;&lt;br /&gt;L'adresse (URL) où se trouve le formulaire sur le Web.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FormAction&lt;/code&gt;&lt;br /&gt;L'action du formulaire, que vous avez repérée plus tôt, et qui permet de trouver le formulaire dans la page Web.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UserField&lt;/code&gt;&lt;br /&gt;Le nom du champ Identifiant.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PasswordField&lt;/code&gt;&lt;br /&gt;Le nom du champ Mot de passe.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UserValue&lt;/code&gt;&lt;br /&gt;La valeur du champ Identifiant (votre identifiant à vous !)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PasswordValue&lt;/code&gt;&lt;br /&gt;La valeur du champ Mot de passe (votre mot de passe !).&lt;/li&gt;
&lt;/ul&gt;
Il ne reste plus qu'à appeler la fonction &lt;code&gt;ConnexionIE&lt;/code&gt;, en lui transmettant la structure. Cette fonction renvoie &lt;code&gt;True &lt;/code&gt;si la connexion s'est bien passée, et &lt;code&gt;False &lt;/code&gt;sinon.
&lt;div class=&quot;warning-header&quot;&gt;Attention&lt;/div&gt;
&lt;div class=&quot;warning&quot;&gt;Le programme peut ne pas marcher sur tous les formulaires d'identification. Tout dépend de la façon dont ils sont traités et validés.&lt;/div&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/03/29/Ouvrir-une-page-HTML-avec-mot-de-passe-depuis-Access#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/03/29/Ouvrir-une-page-HTML-avec-mot-de-passe-depuis-Access#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/327</wfw:commentRss>
      </item>
    
  <item>
    <title>Piloter Internet Explorer depuis Access, par Automation</title>
    <link>http://grenier.self-access.com/?post/2010/03/28/Piloter-Internet-Explorer-depuis-Access-par-Automation</link>
    <guid isPermaLink="false">urn:md5:e21accb201f7c4cd6bbbf923f5ed98cc</guid>
    <pubDate>Sun, 28 Mar 2010 16:07:00 +0200</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 97</category><category>automation</category><category>internet</category><category>vba</category>    
    <description>&lt;blockquote&gt;&lt;p&gt;Comment piloter &lt;strong&gt;Internet Explorer&lt;/strong&gt; à partir d'Access, en utilisant &lt;strong&gt;Automation &lt;/strong&gt;?&lt;/p&gt;
&lt;/blockquote&gt;    &lt;h3&gt;Petit rappel&lt;/h3&gt;
&lt;p&gt;Avant de lancer des usines à gaz :-), je vous rappelle qu'il est possible d'ouvrir un &lt;strong&gt;lien hypertexte&lt;/strong&gt; (en démarrant automatiquement votre navigateur par défaut), à l'aide de l'instruction &lt;a hreflang=&quot;fr&quot; href=&quot;http://grenier.self-access.com/?post/2007/08/09/Access-et-le-web&quot;&gt;DoCmd.FollowHyperlink&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Maintenant, si vous souhaitez piloter Internet Explorer de façon plus précise, vous aurez besoin de ce qui suit. La technique permet entre autres de manipuler le contenu de la page HTML affichée, nous le verrons dans un prochain article.&lt;/p&gt;
&lt;h3&gt;Exemple simple&lt;/h3&gt;
&lt;p&gt;Dans cet article, on va démarrer simplement... :-) Voyons comment démarrer Internet Explorer et afficher une page HTML dont on connaît l'adresse (l'URL). En gros, comment reproduire exactement le comportement de &lt;code&gt;FollowHyperlink&lt;/code&gt;, mais en plus complexe !&lt;/p&gt;
&lt;p&gt;Recopiez ce code dans un module standard 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;' PILOTAGE SIMPLE DE INTERNET EXPLORER&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; NaviguerVers&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ByVal strURL &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;Dim&lt;/span&gt; ie &lt;span class=&quot;kw1&quot;&gt;As&lt;/span&gt; Object&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Démarrer et afficher Internet Explorer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;Set&lt;/span&gt; ie = &lt;span class=&quot;kw1&quot;&gt;CreateObject&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;InternetExplorer.Application&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;Visible&lt;/span&gt; = &lt;span class=&quot;kw1&quot;&gt;True&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;' Naviguer vers l'adresse souhaitée&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; ie.&lt;span class=&quot;me1&quot;&gt;navigate&lt;/span&gt; strURL&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;ul&gt;&lt;li&gt;Le programme crée une instance de Internet Explorer à l'aide de la fonction &lt;code&gt;CreateObject()&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Le &lt;code&gt;Visible = True&lt;/code&gt; garantit que le navigateur s'affiche à l'écran. Sans cela, il est démarré mais pas affiché, vous le voyez seulement dans la liste des tâches de Windows : &lt;code&gt;[Ctrl]&lt;/code&gt; + &lt;code&gt;[Alt]&lt;/code&gt; + &lt;code&gt;[Suppr]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enfin, la méthode &lt;code&gt;Navigate &lt;/code&gt;permet de... naviguer vers l'adresse souhaitée.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tester !&lt;/h3&gt;
&lt;p&gt;Pour appeler la procédure ci-dessus, vous écrirez par exemple :&lt;/p&gt;
&lt;div class=&quot;vb&quot; style=&quot;font-family: monospace;&quot;&gt;NaviguerVers &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://www.self-access.com&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez tester dans 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;), et bien sûr utiliser cette instruction dans n'importe quel bloc &lt;code&gt;Sub / End Sub&lt;/code&gt; ou &lt;code&gt;Function / End Function&lt;/code&gt; de votre base de données.&lt;/p&gt;</description>
    
    
    
          <comments>http://grenier.self-access.com/?post/2010/03/28/Piloter-Internet-Explorer-depuis-Access-par-Automation#comment-form</comments>
      <wfw:comment>http://grenier.self-access.com/?post/2010/03/28/Piloter-Internet-Explorer-depuis-Access-par-Automation#comment-form</wfw:comment>
      <wfw:commentRss>http://grenier.self-access.com/?feed/rss2/comments/326</wfw:commentRss>
      </item>
    
</channel>
</rss>