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 ! 🙂
Si vous avez manqué le début…
Ce feuilleton a commencé par ces articles :
- Importation de données – Episode 1
- Importation de données – Episode 2
- Importation de données – Episode 3
- Importation de données – Episode 4
- Importation de données – Episode 5
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
ettbl 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.
Le code VBA
- Ouvrez le formulaire en mode Création.
- Faites apparaître les propriétés du premier bouton, onglet Événement.
- Réglez l’événement
Sur clic
surProcédure événementielle
. - Cliquez sur les points de suspension à droite de cet événement.
- Recopiez le code VBA suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
' --- ' IMPORTATION DE VOITURES ' --- ' Private Sub btnImportVoitures_Click() Dim strFichier As String ' Demander confirmation If MsgBox("Confirmez-vous l'importation de la liste de voitures ?", _ vbQuestion + vbYesNo) = vbNo Then Exit Sub End If ' Initalisations... strFichier = "C:\Users\Hervé\Documents\liste_voitures.txt" ' Vérifier que le fichier existe bien If Dir(strFichier) = "" Then MsgBox "Le fichier '" & strFichier & "' est introuvable !", _ vbExclamation Exit Sub End If ' Vider la table temporaire si elle existe ' (elle est de toute façon créée automatiquement si ' elle n'existe pas) On Error Resume Next CurrentDb.Execute "DELETE * FROM [tbl Voitures];" ' Importer le fichier texte DoCmd.TransferText acImportDelim, "Import Voitures", _ "tbl Voitures TEMP", strFichier, True ' Transfert des nouvelles couleurs DoCmd.SetWarnings False DoCmd.OpenQuery "rqt Nouvelles couleurs - Ajout" ' Transfert des voitures DoCmd.OpenQuery "rqt Nouvelles voitures - Ajout" ' Terminé ! DoCmd.SetWarnings True MsgBox "Importation terminée !", vbInformationn End Sub |
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
ouFalse
) qui indique si la première ligne contient des titres.
- le type de transfert (
- On exécute ensuite, par
DoCmd.OpenQuery
, les deux requêtes Ajout (Couleurs puis Voitures, dans cet ordre). LeDoCmd.SetWarnings False
évite les messages de confirmation de la part d’Access.
lousso > Quelques réponses groupées :
strFichier
permet de donner le chemin complet du fichier texte à importer.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 !
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 !
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.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