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

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… 😉
- Mise à jour d’une base Access par fichier CSV ou Excel – Episode 1
- Mise à jour d’une base Access par fichier CSV ou Excel – Episode 2
- Mise à jour d’une base Access par fichier CSV ou Excel – Episode 3
- Mise à jour d’une base Access par fichier CSV ou Excel – Episode 4
- Mise à jour d’une base Access par fichier CSV ou Excel – Episode 5
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
:
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 valeursSourceTypes.Csv
ouSourceTypes.Excel
.ExcelVersion
: version du fichier Excel. Utilisée seulement lorsqueSourceType = 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 temporaireTempTable
ci-dessus). SiAutoClean = 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
: objetImportError
qui indique si une erreur s’est produite.LastError.Number
donne une valeur définie par l’énumérationImportInfo
. 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
).
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?
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 classeTableUpdater
, cette propriété permet de définir la zone à importer (voir l’épisode 4).Ouala !
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.
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).
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
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 !