Importation automatique sous Access - VBA
Tessel75 -
Je suis débutante en VBA et cherche une solution afin d'importer sous access des fichiers Excel. Pour le moment rien de bien compliqué; cependant, les fichiers à importer changent de nom chaque mois .
Exemple : (PO_YYMM)
PO_1302
Je ne sais pas exactement comment m'y prendre. Quelqu'un aurait une idée à me suggérer?
Merci d'avance.
Fleur
8 réponses
Importer des fichiers Excel dans Access dont le nom change chaque mois, comme PO_YYMM, pose une problématique d'automatisation de la sélection du fichier correspondant au quotidien.
Plusieurs réponses évoquent des approches pratiques: automatiser le nom du fichier à partir de la date courante, ajouter une boîte de dialogue pour saisir le mois, ou adapter le code existant pour cibler le fichier.
D'autres échanges mentionnent des détails techniques comme réinitialiser les variables, gérer plusieurs répertoires ou noms similaires, et envisager des variantes avec des tables de destination pour écraser les données mensuelles.
En cas de besoin, certains conseils préconisent de partir d'un code existant et d'y ajouter des éléments spécifiques pour sélectionner dynamiquement le fichier cible et gérer les messages d'erreur.
-
Access sait importer des fichiers issus d'un programme de gestion de projet, ou d'un tableur :
Les fichiers au format XLS ainsi que les tâches et ressources de microsoft Project au format xls. Tous les formats excel sont gérés par le même pilote ISAM;
Les importations de fichiers Excel dans access -quelque soit le nom du fichier changeant- se font à travers la création d'une table "par importation depuis Excel.
Si vous n'êtes pas une fervente passionné du SGB -Système de gestion de base de données- je vous suggère d'activer l'Assistance guide dans votre programme ACCESS qui va vous expliquer comment faire.
Il se trouve dans le menu "Outils" pour ACCESS 2003 par exemple. (pour les autres versions je ne sais pas)
Nom supprimé Modération CCM -
Bonjour Djerimay,
Je ne suis pas sûre d'avoir compris vos explications.
ça n'est pas l'importation en elle même qui me pose problème mais le fait que chaque mois, le fichier porte un autre nom.
En fait, j'ai un formulaire (j'aurais peut-être dû le préciser sur mon post), dans lequel je possède un bouton d'importation et d'autres pour exporter des données issues de mes requêtes.
C'est le code de ce bouton qui me pose problème. Je pensais au début créer une boucle qui va chercher le fichier portant le mois le plus haut (exemple 06 pour juin) mais le problème est que j'ai dans ce répertoire des données de 2012 (exemple 201206). Je doute que cela fontionne correctement.
Fleur -
Oui c'est tout à fait cela.
Merci pour votre message ;)
J'avance tout doucement là. Je pense et j'espère qu'avec de l'acharnement je trouverais ;)
Fleur -
Voici les opérateurs logiques (codes VBA) les plus courants :
And, Or, Not, Xor
Qui sont utilisable via l'éditeur de script dans lequel vous avez écrit votre programme relié à votre touche de formlaire "Importer les données".
Il faut cliquer sur l'onglet de la page "Modules" puis double-cliquer dans la liste sur CODE GLOBAL pour ouvrir votre programme -appelé aussi module- dans l'éditeur VBA
A ce niveau, personne d'autre ne peut vous aider, car vous seul savez ce que vous avez écrit ou exécuter dans le script, que vous visualisez sur la page blanche en bas de l'écran.
Vous devez modifiez votre script avec les opérateurs que je vous ai donné pour que votre problème soit résolu.
Nom supprimé Modération CCM -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut,
tu veux faire quoi au juste ?
Sélectionner un fichier via une boite de dialogue, regarder si un fichier a un nom en relation avec la date courante, autre chose ?
Qu'as-tu actuellement dans ton code ?
-
Bonjour Blux
Comme je ne sais pas quelle est la meilleur solution à vrai dire j'aurais aimé une boite de dialogue dans laquelle je rentre par exemple 1304 pour avril 2013 afn q'uil m'importe le fichier sous un nom précis, par exemple POavril.
Avec mon code actuellement je peux importer des données. Mais lorsque dans mon répertoire j'ai PO_1301, PO_1302... j'ai un message d'erreur m'indiquant qu'il ne trouve pas le fichier PO_1301. Par contre si dans ce répertoire j'ai que PO_1302 pas de soucis d'importation.
Quant à la boite de dialogue, je ne me suis pas encore penchée dessus...
Merci
Fleur -
-
Voici mon code, bon désolée je débute alors ce code n'est pas parfait...
Private Sub Imp_Click() Dim dossier As String dossier = Dir("C:\Main\2013*.xls", vbDirectory) Do While dossier <> "" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "POavril", dossier, True dossier = Dir Loop MsgBox "Import PO terminé! " End Sub
Merci
Fleur -
Et donc, on va y rajouter quoi :
- une boite de dialogue pour choisir un fichier dans le répertoire
- une boite de dialogue pour taper un nom que l'on va utiliser ensuite
- du code pour récupérer automatiquement un fichier à partir de la date
- ...
Sous quelle forme sont les noms des fichiers dans le répertoire ? -
-
-
Oui Djerimay, j'ai déjà avancé. J'ai mon code mais qui n'est ni parfait, ni optimisé, qui comporte encore une erreur d'exécution et qui n'effectue pas entièrement ce que je recherche mais je m'y approche doucement ;)
Je travaille encore dessus et le posterais si vraiment je bute toujours.
Merci encore.
Fleur -
Bonjour,
Peux-tu poster ton code car j'ai le même problème que toi avec les noms de fichier qui changent de mois en mois?
Merci d'avance! -
Bonjour à tous,
Il faudrait savoir si vos noms "variables" de fichiers Excel répondent à une logique un peu précise ou bien sont plutôt aléatoires.
S'ils sont logiques, du genre : ABCD & Année & Mois , il est tout à fait possible d'écrire son nom avant la ligne d'importation, par exemple:An = Year(Date) ' Donne l'année en cour
Mois = Month (date) 'donne le mois courant
NomFichierA_Importer = NomFichier & An & Mois
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "", _ NomFichierA_Importer, True
Sinon il est toujours possible de, soit changer le nom du fichier Excel de manière transitoire le temps de faire l'import de telle sorte que les fichiers à importer aient toujours le même nom, soit faire une copie provisoire du fichier avec ce nom, faire l'importation et envoyer le fichier provisoire à la corbeille.
Cela prend 30 secondes et évite tous les soucis.
Bonne suite.