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

Passerelles Access CSV

Ces articles pourraient également vous intéresser...

16 réponses

  1. seb dit :

    Bonjour, je voulais télécharger le fichier test de cet article mais dans la section téléchargement il n’y apparait pas.
    J’ai toujours une erreur 3 clé primaire, et j’ai beau tout essayer ça ne fonctionne pas alors je voulais comparer avec votre fichier pour trouver l’erreur.

    • Hervé Inisan dit :

      Le fichier test n’est effectivement pas dans la section Téléchargements. Pour le récupérer, il suffit :
      1. De sélectionner directement le code dans cet article (paragraphe “Le fichier source”).
      2. De le copier.
      3. De le coller dans un éditeur de texte (du type PSPad ou Notepad++).
      4. D’enregistrer avec une extension .csv ou .txt.

  2. milie dit :

    bonjour
    comment je peux faire ma mise a jour dans ma table en gardant toujours l’anciennes mise a jour sachant que mon fichier CSV il a une clé primaire pour chaque employee
    j’ai fais tous ces épisodes mais j’ai trouver que la mise a jour ecrase toujours les données qui existe déjà
    merci d’avance !
    merci d’avance

    • Hervé Inisan dit :

      Ce qui doit se passer, en principe :
      - Les employés avec une clef existante dans la table vont être mis à jour.
      - Les employés dont la clef n’existe pas vont être ajoutés à la table.
      Si j’ai suivi ta question : il est normal qu’une mise à jour remplace les données déjà existantes dans la table.
      Qu’est-ce que tu appelles “garder l’ancienne mise à jour” ?

      • milie dit :

        Merci de votre répense
        garder les anciennes mise a jour ça veut dire garder les données qui existe déjà dans la table
        par exemple si je fais une mise a jour des employees avec leurs données de mois Juillet, la prochaine mise a jour du mois Aout elle doit ajouter a nouveau les même employees avec leur données mais de garder aussi les données du mois Juillet et ainsi de suite :)
        ( pour moi la mise a jour doit ajouter des lignes et non pas ecrasser les lignes qui existes dejà par ce que meme si j’ai mis la ligne CurrentDb.Execute “DELETE * FROM [Table1]” ) en commentaire la mise a jour exrasse toujours les données qui existe déjà par ce qu’elle trouver que la clé primaire existe déjà !!
        je doit obtenir au final par exemple
        ID,Nom,Prenom,heure_de_travail,période
        Id1,nom1,prenom1,45,juillet
        Id2,nom2,prenom2,43,juillet
        id1,nom1,prenom1,40,Aout
        id2,nom2,prenom2,42,Aout

        j’éspère que j’ai détaillé le mieu possible mon problème :D

        • Hervé Inisan dit :

          En fait, le problème ne vient pas de l’importation CSV. Il s’agit plutôt d’un problème de conception de la base : avec ta structure, il est impossible de créer plusieurs lignes par employé (puisque la clef primaire doit être unique dans la table).
          Il faut revoir ton schéma de relations : 1 employé peut être lié à plusieurs périodes de travail, et 1 période de travail précise n’est liée qu’à un seul employé. Tu as donc besoin de 2 tables :
          - Les employés
          - Les périodes de travail
          Avec une relation “1 à plusieurs” entre les deux. A partir de là, on peut gérer autant de périodes de travail qu’on le souhaite, pour chaque employé.

  3. nioko dit :

    Bonjour Hervé Inisan
    un problème au niveau de la spécification d’importation
    quand j’exécute le code il me donne l’erreur #5 : erreur d’imporation
    et quand je met la ligne “20″ en commentaire il me donne l’erreur numero #6
    j’ai esseayé aussi avec la table “tbl Destinataires Newsletter” et le meme problème existe toujours

    • Hervé Inisan dit :

      Est-ce qu’il peut y avoir une erreur sur le nom de la spécification ? Sur un réglage de la spécification ?

      • nioko dit :

        J’ai enregister les spécifications et j’ai pu éviter les erreur #5 et #6
        mais là ! je rencontre une autre erreur situer dans le module tableupdater
        dans le bloc de “suppression des objets temporaires”
        voilà la ligne mentionnée en jaune : CurrentDb.QueryDefs.Delete UPDATE_QUERY

      • nioko dit :

        merci infiniment pour votre aide
        la méthode fonctionne correctement mais comment je peux l’appliquer a une table qui contient 2 colonnes qui ont le meme Nom
        j’ai essayé mais il m’a afficher l’erreur ” #6 : erreur d’insertion des lignes”
        et quand j’ai vérifié la table temporaire j’ai trouvé que le nom de la 2eme colonne s’appel ( Champ ) et non pas son vrai nom

        • Hervé Inisan dit :

          Une table ne peut pas avoir 2 colonnes de même nom. Le fichier CSV de départ a 2 en-têtes identiques ?
          (si oui, il faut le modifier avant l’importation)

          • nioko dit :

            oui le fichier CSV de départ a 2 en-têtes identiques
            -je fais l’exportation de fichier CSV depuis un autre système chaque mois et le ce fichier contient plus de 50 colonnes
            -je ne peux pas accéder au système pour modifer ses colonnes
            est ce qu’il ya une solution a part la modification des en-têtes identiques chaque mois ?

          • Hervé Inisan dit :

            Il faut effectivement modifier les titres de colonnes du CSV à chaque fois, avant intégration dans Access. Soit manuellement, soit par code (avec les fonctions de fichier VBA).

  4. Hervé Inisan dit :

    ratapoilu > Est-ce qu’il peut s’agir d’un autre problème ? Par exemple, est-ce que la date cible a une clef primaire de type NuméroAuto ?

  5. ratapoilu dit :

    Bonjour,

    J’ai suivi tout ce qui est notifié, j’ai créé mon propre fichier csv (qui s’appelle affaire.csv avec des points virgule), j’ai enregistré une importation (Import Affaire), je l’appel bien dans la nouvelle procédure TestTableUpdaterClients, j’ai créé une table correspondante, et quand je lance la procédure de test le message erreur 6 apparait tout de meme.
    J’ai essayé d’executer l’importation que j’ai créé et cela fonctionne très bien. Je ne vois pas ou il peux y avoir une erreur. Pour info, je suis sous access 2013, avec Win 7 64 bits

Laisser un commentaire

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

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">