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

Passerelles Access CSV

On poursuit la série sur l’importation de données CSV ou Excel dans une base de données Access.

Dans cet article, je fais simplement un point sur la classe centrale TableUpdater, qui s’occupe de l’ajout ou de la mise à jour des lignes de tables.

La plupart des méthodes ont déjà été traitées, l’article permettra de les synthétiser.

Si vous avez manqué le début

Voici la liste des épisodes précédents, importants pour que tout marche bien… 😉

La classe TableUpdater

TableUpdater est une classe VBA. Vous savez sans doute que l’icône Explorateur d’objets (ou la touche F2 du clavier) permet de consulter le détail d’un objet. Voici ce que ça donne pour TableUpdater :

La classe TableUpdater

Dans la suite, j’ai réorganisé ces méthodes ou propriétés en plusieurs familles logiques, et pas par ordre alphabétique.

Propriétés décrivant le fichier source

  • Source : chemin complet du fichier CSV ou Excel à importer.
  • SourceType : type de fichier. Peut prendre les valeurs SourceTypes.Csv ou SourceTypes.Excel.
  • ExcelVersion : version du fichier Excel. Utilisée seulement lorsque SourceType = SourceTypes.Excel.

Propriétés décrivant les données importées

  • Headers : True si le fichier source contient une ligne d’en-têtes. False sinon. A priori, vos données sources doivent avoir une ligne d’en-tête pour une importation correcte.
  • ImportSpecs : spécifications d’importation (à utiliser lorsque le fichier CSV source n’est pas standard). Voir l’épisode 5 pour un exemple.

Propriétés décrivant la table cible Access

  • Target : table Access à mettre à jour.
  • TempTable : nom de la table temporaire à utiliser pour l’importation des données.

Propriétés diverses

  • AutoClean : le processus d’importation crée des objets temporaires dans la base Access (notamment la table temporaire TempTable ci-dessus). Si AutoClean = True, ces objets sont supprimés en fin d’importation (c’est le cas par défaut).

Importation

  • Import : méthode d’importation. Cette méthode doit être appelée après que les paramètres ci-dessus ont été réglés. C’est elle déclenche l’importation proprement dite. En fin de processus, les propriétés qui suivent sont renseignées, et peuvent servir de diagnostic.
  • LastError : objet ImportError qui indique si une erreur s’est produite. LastError.Number donne une valeur définie par l’énumération ImportInfo. Si l’importation s’est bien passée, LastError.Number = NoError.
  • InsertedRows : nombre de lignes insérées dans la table.
  • UpdatedRows : nombre de lignes mises à jour dans la table.

La classe ImportError

Cette classe secondaire sert à décrire les erreurs d’importation. Chaque erreur est décrite par un numéro (Number), et par son intitulé en clair (Label).

La classe ImporError

Vous aimerez aussi...

6 réponses

  1. Credo dit :

    Bonjour Hervé,
    Félicitations pour ce tuto impressionnant..
    Dans la classe TableUpdater, y aurait t il un moyen de préciser la feuille du fichier excel dans lequel se trouve les données à importer?

    • Hervé Inisan dit :

      Merci ! Et pour répondre à la question : je viens de mettre à jour les épisodes 2 (le code du TableUpdater) et 4 (les tests d’importation Excel) pour que cela soit possible. En pratique, j’ai ajouté une propriété Range à la classe TableUpdater, cette propriété permet de définir la zone à importer (voir l’épisode 4).
      Ouala !

  2. Maleko dit :

    Bonjour,

    Merci beaucoup pour ce tuto fort utile. ESt-ce que je peux me permettre une petite question ?

    J’ai mis un « Watch » sur strSQL pour comprendre, savez-vous pourquoi lors de l’insertion, (la 1ère, lorsque blnIncludeKey = true), la variable strSQL semble se terminer par « AND ( » ?

    Lors de la 2ème insertion (pour prendre en compte le cas des clés auto-incrémentées), vous testez la clé si < 1, est-ce que cela équivaut à "si elle existe" et est-ce qu'il est possible d'utiliser une clé de format texte ou autre ?

    Bien cordialement,

    et encore merci pour cet article.

    • Hervé Inisan dit :

      Je n’ai pas eu le temps de retester sur le « AND (« . Est-ce qu’il y a un bug à l’exécution, ou un message d’erreur ?
      Sinon, pour le « <1", ou le ">0″, il s’agit effectivement de vérifier si la clef numérique est affectée ou non.
      Ça veut dire que le code fonctionne effectivement à partir d’une clef numérique, en l’état. Il serait possible de l’adapter pour du texte (ça demande d’adapter différentes parties du code dans ce cas).

      • Maleko dit :

        Bonjour,

        Merci bien !! Alors non effectivement, je n’ai pas d’erreur à l’execution, j’ai peut être mal utilisé le debug mais ça m’étonnerait. Pour ce qui est du 0 merci pour la réponse, je réfléchirai à mon problème, je vous tiens au courant si vraiment une clé primaire dans un autre format m’est indispensable, ça pourrait aider d’autres personnes.

        Bien à vous

        • Hervé Inisan dit :

          J’ai regardé rapidement : il n’y pas de ligne dans le code qui construirait juste un  » AND (« . Donc ça doit venir d’ailleurs (peut-être le moment où le debugger affiche une info).
          Sinon merci pour le retour, ça peut intéresser d’autres personnes effectivement !

Laisser un commentaire

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