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

Passerelles Access CSV

Suite de notre saga sur l’importation de fichiers CSV et Excel. Dans le précédent article, on a vu comment importer un fichier CSV. Aujourd’hui, c’est au tour des fichiers Excel.

Cet article sera plus court que les précédents, puisque toute la structure est déjà en place.

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 ;)).

Le code

Pour importer un fichier Excel, au lieu d’un fichier CSV, il suffit de modifier les paramètres de notre objet TableUpdater. Ajoutez cette procédure de test, dans le module mod Tests TableUpdater (créé précédemment).

Pour que ça fonctionne, je suppose :

  1. Que vous avez un fichier Excel (au format 2007, 2010 ou 2013, extension .xlsx) appelé dest01.xlsx.
  2. Que ce fichier est placé dans le dossier défini par la constante SOURCE_PATH. Reportez-vous à l’article précédent pour plus de détails.
  3. Que ce fichier contient des données compatibles avec la table (ça va aider !). Dans mon cas, le fichier a été créé en ouvrant dans Excel le fichier CSV de l’article précédent, et en l’enregistrant au format Excel.

Les nouveautés

La procédure de test ne change pas beaucoup de l’exemple précédent. Les nouveautés sont :

  • La propriété Source qui pointe maintenant vers un fichier Excel plutôt que CSV.
  • La propriété SourceType qui précise que la source est un fichier Excel.
  • La propriété ExcelVersion qui donne la version d’Excel du fichier (les valeurs proposées sont fournies par Access).

Bilan de l'importation

Importer des données en choisissant la feuille Excel

Il se peut que votre classeur Excel contienne plusieurs feuilles. Vous devrez donc peut-être choisir laquelle des feuilles utiliser à l’importation. L’objet TableUpdater fournit pour cela une propriété Range. Voici comment l’utiliser :

La nouveauté ici est cette ligne :

Elle permet de définir le nom de la feuille Excel à utiliser (ici : « Liste Personnes« ). Le point d’exclamation, après le nom de la feuille, est important : il indique qu’on souhaite extraire les données de toute la feuille. Vous pourriez aussi faire référence à une zone précise, comme ceci :

ou encore en utilisant une zone nommée du classeur, comme cela :

Vous aimerez aussi...

15 réponses

  1. Ludo dit :

    Merci pour voter boulot et vos réponses avisées.
    Tout fonctionne parfaitement chez moi aprés quelques corrections apportées suite aux réponses que vous avez faites vers d’autres utilisateurs.
    Super boulot !!

  2. MQS dit :

    Bonjour,

    Tuto super intéressant et clair! Un épisode 9 est-il prévu?

    Je tombe cependant sur un message d’erreur n°6 lorsque je veux injecter un fichier xlsx.
    Quelle pourrait être la cause de ce message? Ma clé principale est une chaine de caractère composée de chiffres, lettres et le symbole -. Quand, sur la même table, je modifie la clé par un NumAuto je n’ai plus de probléme.

    Merci!

    A+

    • Hervé Inisan dit :

      Le problème vient effectivement de là : actuellement, le code VBA ne gère qu’une clef numérique (NuméroAuto, ou Numérique/Entier long, par exemple).

      • MQS dit :

        OK! Je comprends mieux 🙂

        Merci pour la réponse rapide !

        Si je veux adapter le code à mon cas particulier, il faut que je modifie quelle module?

        • Hervé Inisan dit :

          A froid comme ça, il faudrait regarder du côté de la fonction InsertData(). L’instruction SQL qu’elle génère fait des comparaisons sur une clef primaire numérique (les valeurs 0 et 1). Il y a peut-être d’autres endroits du code à retoucher (j’ai pu rater quelque chose en relisant ;)).

  3. djillius dit :

    Hello
    pour l’erreur #5 pour ma part c’était un fichier xlsx mal formaté. Par contre peux-tu m’expliquer si je veux changer de table quelle partie de ton code je dois modifier ?

    D’avance merci
    djillius

    • Hervé Inisan dit :

      Ça marche. 🙂
      Pour modifier la table destination, il faut remplacer tous les « tbl Destinataires Newsletter » par le nom de ta table (c’est elle la table cible, dans cet article).

      • djillius dit :

        Hello,
        J’ai un autre souci.
        Avec une table différente, il m’insère 4 champs dans la table provisoire p_f10, p_f11, p_f12 et p_f13 et je n’arrive pas à trouver d’où ces champs proviennent ?
        Merci pour ton aide.

        • Hervé Inisan dit :

          Est-ce qu’il y a des colonnes vides dans le CSV d’origine ? (du genre : nom;prenom;;ville)

          • djillius dit :

            Oui il y en a

          • Hervé Inisan dit :

            Les colonnes « spéciales » doit venir de là : Access importe toutes les colonnes, y compris les vides, et les nomme automatiquement si aucun titre n’est fourni. Un nom de champ est obligatoire pour qu’une structure de table soit valide.

          • djillius dit :

            Effectivement les entêtes n’étaient pas propres 😉 Ils me créaient des colonnes supplémentaires. Par contre j’ai toujours une erreur 6#, la table tmp est bien créée. Sais-tu d’où cela peut provenir ??

          • Hervé Inisan dit :

            L’erreur 6 correspondrait à un problème d’insertion de ligne. Du coup, ça m’amène quelques pistes :
            Est-ce que la clef primaire est définie ?
            Est-ce que le champ en question donne bien des données toutes différentes ?
            (ça peut venir encore d’autre chose, bien sûr)

  4. djillius dit :

    Hello,

    Bravo pour ton site et merci pour le code. Tout fonctionne bien avec un fichier csv mais si je teste le code avec un fichier excel. Il me met une erreur #5 erreur d’importation.

    Merci pour ton aide
    djillius

Laisser un commentaire

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