Communication entre Access et ExcelDate de publication : 01/09/2005 , Date de mise à jour : 01/09/2005 Comment faire communiquer Access et Excel I. Introduction II. Présentation III. La copie III-A. Barre d'outil III-B. Code III-C. Avantages et Limites IV. L'export simple IV-A. Le code IV-B. Avantages et Limites V. Automation V-A. Le code V-B. Avantages et Limites VI. Microsoft Query VI-A. La méthode VI-B. Avantages et Limites VII. Plate-forme ADO VII-A. Une méthode originale VII-B. Cas pratique VII-C. Le code VII-D. Démonstration VII-E. Avantages et Limites VIII. Conclusions I. Introduction
Microsoft Access est intégré au pack de bureautique Microsoft Office. Microsoft Excel est le tableur le plus utilisé du marché, il ne requiert pas de compétences de programmation et est d'une souplesse incomparable en matière de graphiques et de présentations. C'est pourquoi, les applications Access les plus intelligemment conçues ont parfois recours à des échanges avec Excel. Dans ce tutorial, nous allons aborder les différentes méthodes de communications entre les deux produits et étudier à quels cas de figures elles s'appliquent le mieux. II. Présentation
Notre propos ici n'est pas de traiter des importations des fichiers Excel, mais bien des exportations. Nous partons du principe que nous disposons d'une robuste application Access offrant toutes les fonctionnalités attendues. Nous constatons cependant certaines limites inhérentes à Access parmi d'autres : . manque de souplesse des états . impossibilité de modifier la présentation ou les données dans un état ou un formulaire . impossibilité d'effectuer des calculs à la marge . non disponibilité d'Access sur tous les postes d'une entreprise . diffusions par mail trop rigides avec Access . manque d'ergonomie des moyens d'accès au moteur graphique d'Access . impossibilité de "toucher", "jouer", "simuler" avec les données comme dans Excel
Tous ces points mettent en exergue le besoin de communication entre le SGBDR et le Tableur. Voici les différentes méthodes : . le copier/coller : l'ouverture d'une table, requête ou formulaire en mode feuille de données autorise la copie dans Excel. Nous ne détaillerons pas ici cette méthode de part sa trivialité. . Copie (OutputTo) : Un objet d'Access est copié dans un format étranger, dont Excel . Export simple (TransferSpreadsheet) : Une requête ou une table est envoyée dans .XLS . Automation : Access prend le contrôle d'une instance d'Excel et manipule des objets du tableur. . Données externes : grâce à Microsoft Query, Excel se connecte à la base et rapatrie les données . Plate-Forme ADO : Excel via VBA se connecte en ADO à une base.
Le but de cette démarche est, au delà, d'une simple énumération des méthodes, une analyse des forces et faiblesses de chacune, ce qui permet à terme de savoir vers laquelle s'orienter en fonction des besoins.
III. La copieIII-A. Barre d'outil![]() La méthode est de sélectionner un objet dans la fenêtre de base de données et de cliquer sur l'export Excel. Le résultat est le suivant :
En exportant un formulaire, nous obtenons le recordset qui sous-tend ce formulaire, nous n'obtenons en revanche rien des sous formulaires. Voici l'exportation du formulaire : "Commandes client". ![]() L'exportation d'un état tente de restituer au mieux la disposition de l'état, notamment en adoptant un plan automatique en adéquation avec les regroupements créés dans l'état. Les enrichissements de texte, de disposition et de mise en page sont bien sûr absents de la partie.
III-B. Code
J'écarte d'office les macros qui sont à mon avis à proscrire dans un développement d'une application Access, pour des raisons qui ont déjà été maintes fois abordées sur le forum.
La commande de code VBA est DoCmd.OutpuTo, dont voici la syntaxe : expression.OutputTo (ObjectType [Entier constante d'objet Access], ObjectName [Variant nom de l'objet à copier], OutputFormat [Variant constante de format d'export], OutputFile [Variant chaine désignant le nom du fichier], AutoStart [Variant de lancement de l'application associée], TemplateFile [Variant chemin d'accès du modèle, uniquement HTML, HTX ou ASP], Encoding [Variant type d'encodage de jeu de caractères])
Ne nous inquiétons pas des Constantes : acOutputForm ou acSpreadsheetTypeExcel9, leur saisie est facilitée :
III-C. Avantages et Limites
Elle requiert que le classeur Excel soit fermé, si ce dernier n'existe pas, elle le crée.
IV. L'export simple
Cette fois, la commande n'est pas accessible par les menus, ni les barres d'outils.
IV-A. Le code
La commande est spécifique cette fois aux tableurs :
La commande de code VBA est DoCmd.TransferSpreadsheet, dont voici la syntaxe : expression.TransferSpreadsheet (TypeTransfert [Entier constante d'objet exporté], TypeFeuille [Entier constante de version excel], NomTable [String désignant l'objet], NomFichier [String Nom du fichier Excel], ContientNomsChamps [Booléen pour l'affichage du nom des champs], Étendue [!! String non disponible en export !!], UtiliserOA [Variant non documenté])
IV-B. Avantages et Limites
![]()
V. Automation
Pour plus d'informations je vous invite à consulter les questions de la FAQ qui traitent d'Excel. Il est également intéressant de consulter cette source de Tofalu. V-A. Le code
Pour pouvoir faire fonctionner Excel depuis Access, il faut intégrer à l'application la bibliothèque des objets du Tableur.
Nous obtenons en fenêtre immédiate (Ctrl + G)
Et voici le résultat obtenu :
V-B. Avantages et Limites
VI. Microsoft Query
VI-A. La méthode
Cette fois, le travail se fait depuis Microsoft Excel, et Microsoft Query nous assiste tout au long de la procédure. Via le menu : Données > Données Externes ... ![]() Nous sélectionnons une source de données au format Access (*.MDB) ![]() Nous pointons sur la base Comptoir.mdb ![]() Il nous appartient ensuite de choisir une table ou une requête, puis de sélectionner les champs qui nous intéressent. ![]() Nous pouvons appliquer des tris et des sélections que nous n'allons pas examiner ici, puisque l'interface est assez explicite et intuitive. Passons à l'enregistrement de la requête. ![]() Nous sélectionnons une plage qui va recevoir nos données : ![]() Et le tour est joué ! VI-B. Avantages et Limites
VII. Plate-forme ADO
ADO permet d'accéder, entre autres, aux bases Access depuis VB et VBA. S'il n'a pas la souplesse de DAO, il peut en revanche répondre à la plupart des besoins.
VII-A. Une méthode originale
A l'exception de l'automation, toutes les méthodes d'export vers Excel souffrent d'une forte rigidité. Tous les exports sont faits sous forme tabulaire et avec des requêtes figées. En outre l'automation requiert la présence de MS Access sur le poste sur lequel elle s'exécute, et elle relève d'une progammation délicate. Notre but ici, est d'offrir une communication à la demande avec Access qui soit plus souple. Nous pourrions via l'ADO offrir a peu près les mêmes fonctionnalités que par l'automation, à savoir un remplissage cellule par cellule d'une table / requête. Mais cela n'apporterait rien de plus. La méthode que je vous propose nécessite une programmation préalable, mais laisse à l'utilisateur plus de latitude pour interroger Access. Voici un diagramme du fonctionnement :
VII-B. Cas pratique
Nous voulons depuis Excel interroger les commandes passées dans la base comptoir, par employé et par mois.
Nous construisons une requête dans la base de données Comptoir :
VII-C. Le code
Nous devons là aussi impérativement ajouter la référence ADO dans Excel, la procédure est la même que dans Access.
Il faut se placer sur un module : Menu Outils > Références ... La référence s'appelle : Microsoft ActiveX Data Object.
VII-D. Démonstration![]()
Chaque cellule reçoit une formule. Sur l'exemple ci-dessus, la formule de la cellule B4 est : =xretrieve($A4;B$3;VRAI) Nous retrouvons là, les arguments de la fonction issue du code. Les $ sont là pour fixer les lignes ou colonnes astucieusement afin de remplir le tableau par simple recopie vers la droite et vers le bas. Le tableau peut ensuite servir de support à des graphiques, des analyses différentes. Le tableau est dynamique, toute modification d'une cellule de paramètre (qui est argument de la fonction xRetrieve) entraine un recalcul de la feuille et une mise à jour immédiate. VII-E. Avantages et Limites
VIII. Conclusions
Un petit diagramme pour résumer : ![]() Il n'y a pas de mauvaise méthode, il faut simplement trouver celle qui convient à votre cas. La méthode xRetrieve dont je me fais l'avocat m'a rendu de grands services dans nombre de mes projets mais n'est pas universelle. Merci de m'avoir lu ;) |
Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005 Cafeine. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.