Utiliser des fonctions Excel au sein d'Access

Excel fourmille de fonctions passionnantes : Gauche, Droite, Majuscule, NbCar, Somme, Moyenne, ... Access en hérite d'une partie mais pas de toutes. Si Excel est également installé sur votre PC, il est possible d'utiliser au sein même d'Access l'ensemble de toutes les fonctions d'Excel.

Vous pouvez télécharger ici la base de données qui a servi de base à la conception de cette page.

Imaginons que vous ayez à disposition la table suivante :

Et que vous aimeriez transformer de la manière suivante :

C'est à dire, la première lettre en majuscule, et les autres en minuscule.

Pour commencer, mettons les champs en majuscule. C'est facile : Créez la requête suivante :

Pour mettre les champs en minuscule, il suffit d'utiliser la fonction minuscule. Par contre, pas de trace de la fonction bien pratique NomPropre, d'Excel. Pour vous en convaincre, allez dans le générateur d'expression :

Il y a pas mal de fonctions, mais pas de fonction NomPropre ou une fonction quelconque3 qui permettrait la mise en majuscule de la première lettre de chaque mot. Si je me rend dans le générateur de fonction d'Excel, je constate que la liste est vraiment différente (en général, et dans la cas particulier des fonctions liées au traitement de "texte"):

Marche à suivre pour utiliser la fonction NomPropre dans Access

Allez dans un Module/Nouveau

Allez dans le menu Outils/Références

Cochez la case "Microsoft Excel 11.0 Object Library", et cliquez sur OK. 11.0 sera 10.0 si vous utilisez Excel XP, 9.0 si c'est Excel 2000 et 8.0 si c'est Excel 97.

Recopiez ensuite le code suivant dans votre nouveau Module :

Function NomPropre(QuelTexte)
  Dim MonExcel As Excel.Application
  NomPropre = Excel.WorksheetFunction.Proper(QuelTexte)
  Set MonExcel = Nothing
End Function

Voici l'analyse de ce code :

Function NomPropre(QuelTexte)

C'est le nom de votre propre fonction personnalisée. Vous l'auriez appelée Function GloubliBoulga(Cacatoès) que ça aurait aussi bien fonctionné, comme ceci :

Function GloubiBoulga(Cacatoès)
  Dim BoudinBlanc As Excel.Application
  GloubiBoulga = Excel.WorksheetFunction.Proper(Cacatoès)
  Set BoudinBlanc = Nothing
End Function

Dim MonExcel As Excel.Application

J'ouvre Excel en quelque sorte... Sans qu'il se voit à l'écran, dans la mémoire.

NomPropre = Excel.WorksheetFunction.Proper(QuelTexte)

NomPropre est le nom de votre fonction (Qui aurait pu être GloubiBoulga) = La fonction Proper avec en paramètre (entre parenthèses) ce qu'on veut qu'il transforme avec une majuscule à chaque mot.

On utilise forcément la fonction en ANGLAIS (Proper). Vous pouvez vous rendre compte de toutes ces fonctions à l'instant ou vous écrivez le point juste après :

Excel.WorkSheetfunction.

Vous pouvez voir la correspondance de toutes les fonctions Excel anglais/français ici.

On quitte Excel pour libérer de la mémoire :

Set MonExcel = Nothing

La fonction est terminée. Il ne reste plus qu'à la mettre en application. Créez une nouvelle requête :

Ce qui donne le résultat final :

Ainsi s'achève cet atelier. Comme vous pouvez le constater Excel est très serviable, il suffit de savoir lui parler. D'une manière globale, on ne se rend pas toujours compte à quel point les produits Office peuvent harmonieusement interagir entre eux.

PS : Je viens de découvrir que tout ce mic-mac n'était pas nécessaire ! En effet, il existe une fonction correspondante à NomPropre, implémentée nativement dans Access !

C'est StrConv("un joli texte", 3) ... Qui donne Un Joli Texte

Ah j'en ai mis du temps avant de le découvrir, un peu par hasard !

---