{"id":89,"date":"2025-06-14T15:50:12","date_gmt":"2025-06-14T15:50:12","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=89"},"modified":"2025-06-14T15:50:12","modified_gmt":"2025-06-14T15:50:12","slug":"vba-arguments-multiples-pour-un-meme-parametre-par-lexemple","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/14\/vba-arguments-multiples-pour-un-meme-parametre-par-lexemple\/","title":{"rendered":"VBA : Arguments multiples pour un m\u00eame param\u00e8tre par l&rsquo;exemple"},"content":{"rendered":"\n<p>Certaines syntaxes permettent de passer plusieurs arguments dans le param\u00e8tre. C&rsquo;est le cas de la commande MsgBox par exemple, o\u00f9 le param\u00e8tre <em>Buttons<\/em> accepte plusieurs valeurs de l&rsquo;\u00e9num\u00e9rateur <em>vbMsgBoxStyle<\/em>.<\/p>\n\n\n\n<p>Il est assez simple d&rsquo;utiliser cette technique dans vos propres commandes ou fonctions. Voici comment proc\u00e9der :<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">L&rsquo;\u00e9num\u00e9rateur VBA<\/h1>\n\n\n\n<p>Commencez par cr\u00e9er un module standard pour accueillir la fonction. Dans l&rsquo;en-t\u00eate, apr\u00e8s la ligne <em>Option Explicit<\/em>, nous allons d\u00e9finir l&rsquo;\u00e9num\u00e9rateur. L&rsquo;\u00e9num\u00e9rateur est une simple structure de donn\u00e9es de variable.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Option Compare Database\nOption Explicit \n\nPublic Enum efFichierExt \n       Unite = 8 \n       Chemin = 16 \n       Fichier = 32 \n       Extension = 64 \nEnd Enum<\/code><\/pre>\n\n\n\n<p>Pour en savoir plus sur l&rsquo;\u00e9num\u00e9ration en VBA, son potentiel et ses bienfaits dans votre code, consultez mon tutoriel : <a href=\"http:\/\/loufab.developpez.com\/tutoriels\/access\/enumVBA\/\">http:\/\/loufab.developpez.com\/tutoriels\/access\/enumVBA\/<\/a><\/p>\n\n\n\n<p>Il est tr\u00e8s important que les valeurs de l&rsquo;enum soit en base 8, comme vous le verrez par la suite.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">La fonction<\/h1>\n\n\n\n<p>L&rsquo;\u00e9criture de la fonction est assez triviale. La signature de la fonction fait r\u00e9f\u00e9rence \u00e0 l&rsquo;enum comme un type classique.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Public Function fFichierExt(strCheminFichier As String, _<br>                            iType As efFichierExt) As String <br><br><br>Le param\u00e8tre <em>iType<\/em> est donc de type <em>efFichierExt<\/em>, notre enum.<\/code><\/pre>\n\n\n\n<p>Maintenant, pour tester la pr\u00e9sence des diff\u00e9rentes valeurs dans <em>iType<\/em>, il ne faut pas utiliser les op\u00e9rateurs logiques (=, &lt;&gt;&#8230;) habituels mais AND.<\/p>\n\n\n\n<p>Voici comme on proc\u00e8de :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>If iType And Unite Then ' l'unit\u00e9 \n   vRetour = Left(strCheminFichier, InStr(strCheminFichier, \":\")) \nEnd If<\/code><\/pre>\n\n\n\n<p><em><strong>iType And Unite<\/strong><\/em> est l&rsquo;\u00e9quivalent de \u00ab\u00a0Est-ce que iType contient Unite ?\u00a0\u00bb<\/p>\n\n\n\n<p>Voici la fonction compl\u00e8te qui permet d&rsquo;extraire de parties du chemin d&rsquo;un fichier.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Public Function fFichierExt(strCheminFichier As String, _\n                            iType As efFichierExt) As String \n'-------------------------------------------------------------- \n' Procedure : fFichierExt \n' Author : Fabrice CONSTANS (MVP) \n' Date : 13\/03\/2013 \n' Purpose : Retourne l'un des \u00e9l\u00e9ments suivant le chemin\/fichier pass\u00e9 \n' Parametres: \n' strCheminFichier contient le chemin et fichier \n' strType = enum eTypeFichierExt \n' 64 renvoi l'extension du fichier sans le point \n' 32 renvoi le nom du fichier sans son extension \n' 16 renvoi le chemin sans le nom ni l'extension \n' 8 renvoi l'unit\u00e9 \n'-------------------------------------------------------------- \nOn Error GoTo Errsub \nDim vRetour As String \nIf iType And Unite Then ' l'unit\u00e9 \n   vRetour = Left(strCheminFichier, InStr(strCheminFichier, \":\")) \nEnd If \nIf iType And Chemin Then ' le chemin sans l'unit\u00e9 logique\n   vRetour = vRetour &amp; Mid(strCheminFichier, 3, InStrRev(strCheminFichier, \"\\\") - 2) \nEnd If \nIf iType And Fichier Then \n   Dim tmpFic As String \n   If strCheminFichier Like \"*.*\" Then \n      tmpFic = Right(strCheminFichier, \n             _ Len(strCheminFichier) - InStrRev(strCheminFichier, \"\\\")) \n      vRetour = vRetour &amp; Left(tmpFic, InStrRev(tmpFic, \".\") - 1) \n   Else \n      vRetour = strCheminFichier \n   End If\nEnd If \nIf iType And Extension Then ' renvoi l'extension \n   If iType And Fichier Then \n      vRetour = vRetour &amp; \".\" vRetour = vRetour &amp; Right(strCheminFichier, _                    \n                Len(strCheminFichier) - InStrRev(strCheminFichier, \".\")) \n   End If \nfFichierExt = vRetour \nExit Function \n\nErrsub: 'ici utiliser votre propre traitement d'erreur \nExit Function \n\nEnd Function<\/code><\/pre>\n\n\n\n<p>Comme vous le voyez, <em>iType<\/em> est analys\u00e9 plusieurs fois. A chaque analyse on concat\u00e8ne ou non l&rsquo;\u00e9l\u00e9ment souhait\u00e9.<\/p>\n\n\n\n<p>La premi\u00e8re analyse d\u00e9termine si l&rsquo;on doit renvoyer l&rsquo;unit\u00e9, la deuxi\u00e8me&nbsp;le chemin etc.<\/p>\n\n\n\n<p>L&rsquo;appel se fait de la mani\u00e8re suivante :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>? fFichierExt(\"c:\\windows\\temp\\monfichier.tmp\", Fichier + Extension)<\/code><\/pre>\n\n\n\n<p>On remarque que, comme pour <em>MsgBox<\/em>, les param\u00e8tres multiples sont additionn\u00e9s.<\/p>\n\n\n\n<p>Dans cet exemple le r\u00e9sultat sera :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>monfichier.tmp<\/code><\/pre>\n\n\n\n<p>On peut donc renvoyer tout ou partie de la valeur pass\u00e9e. Par exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>? fFichierExt(\"c:\\windows\\temp\\monfichier.tmp\", Unite + Chemin + \n             _ Fichier + Extension)<\/code><\/pre>\n\n\n\n<p>Evidemment, vous pouvez faire l&rsquo;addition dans l&rsquo;ordre que vous souhaitez, le r\u00e9sultat sera toujours le m\u00eame.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>? fFichierExt(\"c:\\windows\\temp\\monfichier.tmp\", Extension + Fichier)<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p>L&rsquo;utilisation d&rsquo;un <em>enum<\/em> en <em>base 8<\/em> et de l&rsquo;op\u00e9rateur logique <em>AND<\/em> permet de passer autant de param\u00e8tres que l&rsquo;on souhaite. Encore faut-il en avoir l&rsquo;utilit\u00e9&#8230;<\/p>\n\n\n\n<p><strong>Vous pouvez utiliser la fonction ci-dessus dans vos applications dans la mesure o\u00f9 vous ne modifiez pas le nom de l&rsquo;auteur.<\/strong><\/p>\n\n\n\n<p>Bonne utilisation !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Certaines syntaxes permettent de passer plusieurs arguments dans le param\u00e8tre. C&rsquo;est le cas de la commande MsgBox par exemple, o\u00f9 le param\u00e8tre Buttons accepte plusieurs valeurs de l&rsquo;\u00e9num\u00e9rateur vbMsgBoxStyle. Il est assez simple d&rsquo;utiliser cette technique dans vos propres commandes &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/14\/vba-arguments-multiples-pour-un-meme-parametre-par-lexemple\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[7],"class_list":["post-89","post","type-post","status-publish","format-standard","hentry","category-code-vba","tag-code-vba"],"_links":{"self":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/89","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/comments?post=89"}],"version-history":[{"count":2,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/89\/revisions"}],"predecessor-version":[{"id":91,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/89\/revisions\/91"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=89"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=89"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=89"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}