Mise à jour d’une base Access par fichier CSV ou Excel – Episode 7

Passerelles Access CSV

Encore un épisode  de notre saga sur l‘importation de fichiers CSV ou Excel dans une base Access.

Bientôt, j’aurai autant de chapitres que Star Wars, et je pourrai préparer des versions remasterisées, Dolby, BluRay. Et me faire racheter par Mickey ?! 😉

Dans ce nouvel article, on va monter d’un cran en puissance : jusqu’à présent, on n’a toujours importé qu’une table à la fois, à l’aide de la classe TableUpdater.

Dans la réalité, vous risquez de vouloir importer plusieurs fichiers en séquence. C’est ce que va faire la nouvelle classe DatabaseUpdater, détaillée dans la suite.

Si vous avez manqué le début

Relisez les articles précédents, si vous ne l’avez pas déjà fait… sinon, rien ne marchera 😉

Rappel des titres

Pour l’instant, chaque importation de fichier consistait à :

  1. Instancier un objet TableUpdater.
  2. Le paramétrer (fichier source, table cible, clef primaire, etc.).
  3. Exécuter l’importation.
  4. Afficher un message de résultat.

Mais vous n’allez pas répéter tout ça, si chaque mois vous avez 10 fichiers CSV ou Excel à importer. 😉 On va donc :

  1. Lister tous les paramètres d’importation (tous les paramètres de TableUpdater, donc) dans une table Access spécifique.
  2. Faire en sorte de parcourir cette table pour enchaîner chaque importation.

La table des mises à jour

On va donc créer dans notre base Access une table, dont chaque champ correspond à une propriété de la classe TableUpdater. Voici la structure de cette table (qui s’appelle tbl Updates) :

Liste des mises à jour

En gros, vous obtenez une version « tablifiée » (ouf) de la classe TableUpdater. J’ai ajouté quelques champs :

  • Priority : Valeur numérique permettant de classer les importations. Concrètement, si vous importez un fichier Clients et un fichier Factures, le fichier Clients aura une priorité de 1, le fichier Factures une priorité de 2. Puisque les clients doivent être actualisés avant les factures.
  • Category : Ce champ est prévu pour contenir un texte quelconque. L’idée est de pouvoir importer plusieurs fichiers appartenant à une même catégorie, sans toujours importer tous les fichiers listés dans cette table. Ça ne doit pas être bien clair, tout ça, vous verrez dans les exemples ! 🙂
  • StartTime et EndTime : date/heure de début et de fin d’importation, si vous traitez des fichiers volumineux.

La classe DatabaseUpdater

Si vous avez suivi, l’idée est donc d’extraire x lignes de notre nouvelle table (x lignes correspondant à une même catégorie), de transformer ces lignes en objets TableUpdater, et de déclencher la mise à jour correspondante (vous vous souvenez qu’un TableUpdater gère un seul fichier et une seule table à la fois).

Voici la classe DatabaseUpdater qui va prendre ça en charge (à recopier dans un module de classe, et pas un module standard) :

  • En y regardant de plus près, la méthode principale de DatabaseUpdater est la méthode Update(), qui reçoit une catégorie à filtrer, qui extrait les lignes correspondantes à l’aide d’un Recordset, et qui boucle sur ces lignes pour les traiter une à une.
  • La seconde méthode est UpdateTable(), qui se charge de la transformation d’une ligne de table en instance de TableUpdater, et qui importe un fichier donné dans la table correspondante. Cette méthode est appelée à chaque « tour de boucle » de la fonction Update().

Je vous laisse digérer cette bouillie 😉
On verra dans le prochain article comment tester DatabaseUpdater.

Vous aimerez aussi...

4 réponses

  1. Rémy dit :

    Merci encore pour tous ce travail et ces bons conseils, néanmoins je bloc à l’étape 2 lors du test du fichier csv, il me donne comme info:
    Erreur Compilation
    type défini par l’utilisateur non défini
    et point sur cette ligne:
    Sub TestExportCSV5()
    ‘ Variables
    Dim ce As New CSVExport

    Merci de votre aide

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *