Certaines syntaxes permettent de passer plusieurs arguments dans le paramètre. C’est le cas de la commande MsgBox par exemple, où le paramètre Buttons accepte plusieurs valeurs de l’énumérateur vbMsgBoxStyle.
Il est assez simple d’utiliser cette technique dans vos propres commandes ou fonctions. Voici comment procéder :
L’énumérateur
Commencez par créer un module standard pour accueillir la fonction. Dans l’en-tête, après la ligne Option Explicit, nous allons définir l’énumérateur. L’énumérateur est une simple structure de données de variable.
Option Compare Database
Option Explicit
Public Enum efFichierExt
Unite = 8
Chemin = 16
Fichier = 32
Extension = 64
End Enum
Pour en savoir plus sur l’énumération en VBA, son potentiel et ses bienfaits dans votre code, consultez mon tutoriel : http://loufab.developpez.com/tutoriels/access/enumVBA/
Il est très important que les valeurs de l’enum soit en base 8, comme vous le verrez par la suite.
La fonction
L’écriture de la fonction est assez triviale. La signature de la fonction fait référence à l’enum comme un type classique.
Public Function fFichierExt(strCheminFichier As String, _
iType As efFichierExt) As String
'-----------------------------------------------------------------
Le paramètre iType est donc de type efFichierExt, notre enum.
Maintenant, pour tester la présence des différentes valeurs dans iType, il ne faut pas utiliser les opérateurs logiques (=, <>…) habituels mais AND.
Voici comme on procède :
If iType And Unite Then ' l'unité
vRetour = Left(strCheminFichier, InStr(strCheminFichier, ":"))
End If
iType And Unite est l’équivalent de « Est-ce que iType contient Unite ? »
Voici la fonction complète qui permet d’extraire de parties du chemin d’un fichier.
Public Function fFichierExt(strCheminFichier As String, _
iType As efFichierExt) As String
'--------------------------------------------------------------
' Procedure : fFichierExt
' Author : Fabrice CONSTANS (MVP) blogaccess.free.fr
' Date : 13/03/2013
' Purpose : Retourne l'un des éléments suivant le chemin/fichier ' passé
' Parametres:
' strCheminFichier contient le chemin et fichier
' strType = enum eTypeFichierExt
' 64 renvoi l'extension du fichier sans le point
' 32 renvoi le nom du fichier sans son extension
' 16 renvoi le chemin sans le nom ni l'extension
' 8 renvoi l'unité
'--------------------------------------------------------------
On Error GoTo Errsub
Dim vRetour As String
If iType And Unite Then ' l'unité
vRetour = Left(strCheminFichier, InStr(strCheminFichier, ":"))
End If
If iType And Chemin Then ' le chemin
vRetour = vRetour & Mid(strCheminFichier, 3, _
InStrRev(strCheminFichier, "\") - 2)
End If
If iType And Fichier Then
Dim tmpFic As String
If strCheminFichier Like "*.*" Then
tmpFic = Right(strCheminFichier, _
Len(strCheminFichier) - InStrRev(strCheminFichier, "\"))
vRetour = vRetour & Left(tmpFic, InStrRev(tmpFic, ".") - 1)
Else
vRetour = strCheminFichier
End If
End If
If iType And Extension Then ' renvoi l'extension
If iType And Fichier Then vRetour = vRetour & "."
vRetour = vRetour & Right(strCheminFichier, _
Len(strCheminFichier) - InStrRev(strCheminFichier, "."))
End If
fFichierExt = vRetour
Exit Function
Errsub:
'ici utiliser votre propre traitement d'erreur
Exit Function
End Function
Comme vous le voyez, iType est analysé plusieurs fois. A chaque analyse on concatène ou non l’élément souhaité.
La première analyse détermine si l’on doit renvoyer l’unité, la deuxième le chemin etc.
L’appel se fait de la manière suivante :
? fFichierExt("c:\windows\temp\monfichier.tmp", Fichier + Extension)
On remarque que, comme pour MsgBox, les paramètres multiples sont additionnés.
Dans cet exemple le résultat sera :
monfichier.tmp
On peut donc renvoyer tout ou partie de la valeur passée. Par exemple :
? fFichierExt("c:\windows\temp\monfichier.tmp", Unite + Chemin + _
Fichier + Extension)
Evidemment, vous pouvez faire l’addition dans l’ordre que vous souhaitez, le résultat sera toujours le même.
? fFichierExt("c:\windows\temp\monfichier.tmp", Extension + Fichier)
Conclusion
L’utilisation d’un enum en base 8 et de l’opérateur logique AND permet de passer autant de paramètres que l’on souhaite. Encore faut-il en avoir l’utilité…
Vous pouvez utiliser la fonction ci-dessus dans vos applications dans la mesure où vous ne modifiez pas le nom de l’auteur.