Importation de données – Episode 6

Encore un nouvel épisode de notre série sur l’importation de données dans Access. Aujourd’hui, nous mettons la touche finale en automatisant le processus en VBA : un bouton, et c’est fait ! 🙂

voitures_formulaire.png

Si vous avez manqué le début…

Ce feuilleton a commencé par ces articles :

Ce qu’il vous faut…

Pour que tout fonctionne, vous devez avoir :

  • Le fichier texte à importer.
  • Une base Access qui contient les 2 tables tbl Voitures et tbl Voitures Couleurs. La table temporaire est créée automatiquement lorsqu’on importe le fichier texte, donc elle n’est pas utile. Maintenant, si elle existe, ce n’est pas grave non plus : on la videra simplement avant importation !
  • Une requête Ajout qui traite les nouvelles couleurs. La mienne s’appelle rqt Nouvelles couleurs – Ajout.
  • Une requête Ajout qui traite les voitures. La mienne s’appelle rqt Nouvelles voitures – Ajout.
  • Une spécification d’importation appelée Import Voitures qui donne le format du fichier texte.

Prêts ? En voiture ! 😉
(il fallait bien la faire un jour)

Le formulaire

Le formulaire est relativement simple : il contient surtout un bouton Importation des voitures (btnImportVoitures) pour déclencher les opérations. Le bouton Fermer a été construit par l’Assistant.

voitures_formulaire.png

Le code VBA

  1. Ouvrez le formulaire en mode Création.
  2. Faites apparaître les propriétés du premier bouton, onglet Événement.
  3. Réglez l’événement Sur clic sur Procédure événementielle.
  4. Cliquez sur les points de suspension à droite de cet événement.
  5. Recopiez le code VBA suivant :

Quelques explications

  • Le programme demande d’abord une confirmation, avant de lancer l’importation.
  • Ensuite, on vérifie si le fichier à importer existe bien.
  • On vide la table temporaire. Le On Error Resume Next qui précède évite d’afficher un message d’erreur lorsque la table temporaire n’existe pas.
  • Ensuite, on lance l’importation du fichier via DoCmd.TransfertText. Cette commande reçoit dans l’ordre :
    • le type de transfert (acImportDelim = importation de fichier délimité)
    • le nom de la spécification d’importation à appliquer
    • le nom de la table où les données sont importées (la table est créée si nécessaire)
    • le chemin complet du fichier à importer
    • un booléen (True ou False) qui indique si la première ligne contient des titres.
  • On exécute ensuite, par DoCmd.OpenQuery, les deux requêtes Ajout (Couleurs puis Voitures, dans cet ordre). Le DoCmd.SetWarnings False évite les messages de confirmation de la part d’Access.

Vous aimerez aussi...

5 réponses

  1. Hervé Inisan dit :

    lousso > Quelques réponses groupées :

    • La variable strFichier permet de donner le chemin complet du fichier texte à importer.
    • Lorsque le délimiteur n’est pas précisé, c’est que soit on utilise le délimiteur par défaut, soit ce délimiteur est précisé dans les spécifications d’importation (ce qui est le cas de ce scénario ; voir l’épisode 5 pour plus d’infos sur les spécifications).
  2. lousso dit :

    Monsieur Hervé, je tiens à souligner également que dans votre code,il n’ai pas mentionné de délimiteur;Neanmoins votre code est intéressant pour moi.Je dois en effet automatiser une importation d’un fichier texte vers plusieurs tables dans Access,mais je ne sais pas si c’est possible.je viens donc vers vous pour que vous m’aidiez dans ce sens.
    Si vous souhaitez plus de précision faites moi signe.

    Merci d’avance et bonne journée à vous !

  3. lousso dit :

    Bonjour M.Herve !
    je tiens à vous dire grand merci pour ce code VBA d’importation de fichier texte vers Access.Mais dans votre exemple il n’existe pas de champ pour le fichier texte.Il est donc difficile de le mettre en œuvre comme vous le souhaitez.
    Merci !

  4. Hervé Inisan dit :

    possible924 > Pour obtenir la liste des fichiers (sans stockage dans une table), cet article peut aider : Lister tous les fichiers d’un répertoire.

    Ensuite, pour un exemple appliqué (avec stockage cette fois), l’article Alimenter une banque d’images montre comment utiliser les Recordsets pour renseigner la table.

  5. possible924 dit :

    Bonjour à tous,
    Je souhaiterais importer dans une table
    la liste des fichiers contenus dans un répertoire (dossier) défini
    Avez vous une solution à proposer ?
    merci par avance pour votre aide

Laisser un commentaire

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