Access 2007 - Utilisateurs avancés
Vous développez des bases de données à tour de bras, et vous constatez que vous réutilisez souvent les mêmes routines VBA. Vous finissez par faire des copier-coller de vos différentes fonctions dans toutes les bases de données que vous créez, car vous constatez que vous réutilisez perpétuellement les même routines VBA.
Au fur et à mesure de vos déveléoppements, vous constatez que vous améliorez régulièrement vos fonctions et procédures VBA, et, finalement, vous vous retrouvez avec je ne sais combien de bases de données (par exemple pour plusieurs clients), avec a peu près, approximativement, plus ou moins les mêmes fonctions, mais dans une base A, la fonction ressemblera a :
Function Surface (Longueur, Largeur)
if Longueur = Largeur then
Surface = Longueur * Longueur
Else
Surface = Longueur * Largeur
End IF
End
End Function
Et puis, en la regardant de plus près, vous constatez qu'on peut l'écrire plus simplement. Alors, dans une autre base (B), vous copiez-collez cette fonction, et vous l'améliorez :
Function Surface (Longueur as Long, Largeur as Long) as Long
Surface = Longueur * Largeur
End Function
Mais vous ne prenez pas le temps ni l'énergie de rechercher toutes les bases qui contiennent l'ancienne version ! Du coup, c'est un peu le désordre
Intérêt du complément
L'idée est de créer ce qu'on appelle un "complément". C'est une base de données tout à fait normale, mais que vous renommerez avec le suffixe .ACCDA au lieu de ACCDB (Ou MDA au lieu de MDB si vous travailklez avec une version d'Access antérieure à 2007)
Ce complément contiendra particulièrement des Modules VBA, et pas tellement de tables, requêtes formulaires ou état - Bien que ce soit possible !
Ces modules contiendront toutes vos fonctions et procédures que vous utilisez fréquemment dans toutes vos bases de données.
Pour mieux comprendre, nous allons reprendre l'exemple de la fonction Surface, que nous avons vu en introduction. Nous allons créer cette fonction non pas dans une base de données normale, mais dans un complément.
Marche à suivre : Création du complément
Voilà. Fin de la construction du complément. Vous constaterez qu'il s'agit d'une simple base Access que nous avons renommé tout bêtement. Constatez que ce renommage a changé l'icône : Il y a un minuscule point rouge à côté de l'icône Access.
Création d'une base de données qui va utiliser ce complément
Voilà, c'est terminé.
Miantenant, si vous appuyez à nouveau sur F5 sur votre fonction TestComplement, vous aurez le message :
A partir de maintenant, si vous fermez Access, chaque fois que vous ouvrirez Client.accdb, Mon Complément.accda sera disponible. Mais si vous ouvrez une autre base de données, Mon Complément.accda ne sera pas disponible. Si vous avez quinze bases de données auxquelles vous voulez attacher Mon Complément.accda, vous devrez vous rendre dans chacune d'entre elles, et chaque fois, aller dans l'environnement Visual Basic, et aller chercher votre complément via la commande Outils/Références.
Par contre, l'avantage immense est le suivant : lorsque vous modifierez les fonctions du complément, les quinze bases de données bénéficieront du changement : nul besoin d'aller dans les quinze bases pour modifier quoi que ce soit.
Mais... du coup, si vous désirez envoyer votre base de données par e-mail à un client, pensez bien à lui envoyer également le complément, parce que sinon, il va se retrouver avec une base qui va essayer de chercher des fonctions (surface par exemple) qu'elle ne trouvera pas ! Il faut non seulement lui envoyer également le complément, mais encore faut-il que ce client enregistre ce complément dans un certain dossier de son PC, et qu'il aille rétablir la liaison dans le menu Outils/Références... Eh oui ! Sur mon PC, je lui ai bien dit d'aller chercher Mon Complément.accda dans le dossier D:\Atelier... Mais le destinataire de votre base de données va enregistrer son complément dieu sait ou...
Remarque importante
Lorsque vous êtes dans Client.accdb, dans l'environnement Visual Basic, vous avez la possibilité de visualiser le contenu des modules de Mon Complément.accda, comme ceci :
Du coup, vous pouvez-vous dire : "Chouette ! Pas besoin d'ouvrir expressément Mon Complément.accda pour ajouter ou modifier des fonctions, je peux le faire directement depuis n'importe quelle base liée à Mon Complément.accda"
Regardez : Je modifie mon Sub Test() du complément :
Sub Test()
MsgBox Surface(3, 7)
MsgBox "Coucou"
End Sub
Et, sale surprise, impossible d'enregistrer (C'est en grisé)
Sachez donc que si vous essayez de modifier ainsi le contenu d'un complément :
Vos modifications auront été irrémédiablement et silencieusement perdues. Pour modifier le contenu d'un complément, vous DEVEZ ouvrir le complément lui-même.
Dernière remarque : Vous pouvez créer des tables, requêtes, formulaires, états. macros et modules dans un complément, mais, depuis les bases utilisant le complément, vous ne pourrez pas accéder aux tables du complément via DAO (Recorset et Cie.). Par contre, vous pourrez très bien ouvrir des formulaires du complément, qui eux-mêmes sont basées sur des tables du complément.
Toutefois, c'est une procédure ou fonction qui se trouve dans le complément qui doit contenir l'instruction OpenForm.
Je m'explique : Imaginons que vous ayez dans le complément un formulaire F_Client basé sur T_Client qui est une table créée dans le complément.
Dans la base de données qui utilise ce complément, si vous avez cette procédure :
Sub Machin
DoCmd.OpenForm "F_Client"
End Sub
Vous aurez un message d'erreur "Objet non trouvé".
Par contre, si dans le complément, vous avez ceci :
Sub Truc
DoCmd.OpenForm "F_Client"
End Sub
Et que dans la base de données qui appelle le complément, vous avez ceci :
Sub Machin
Truc
End Sub
Machin de la base principale appelle Truc qui se trouve dans le complément, et du coup, pas d'erreur ! Vous suivez ?
Voilà. C'est tout poour aujourd'hui ! Le café est prêt, et les aspirines sont dans la pharmacie. :-)