Charger les feuilles d'un fichier dont le nom évolue

Signaler
-
 David -
Bonjour,

Je cherche importer d'un classeur qui évolue au fil des semaines et dont le nom change chaque semaine. Le répertoire est toujours le même, le nombre de feuille et nom des feuilles également.

Je souhaite vérifier si un fichier plus récent existe dans le répertoire "D:\Documents\Access"
Le nom du classeur est composé de son nom : "Classeur" &"N° semaine"
Je peux récupérer le N° de semaine du classeur actuellement chargé dans la table A, colonne3,Ligne2.
Si un classeur existe dans le répertoire avec un N° de semaine > à l'actuel, je voudrais que les tables soient chargées avec ses données.

Comment dois je procéder ?

D'avance merci

6 réponses

Messages postés
10269
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 avril 2020
579
bonjour,
"importer": dans quoi?
"Je peux récupérer le N° de semaine du classeur actuellement chargé dans la table A, colonne3,Ligne2": où se trouve cette table A?

je pense que tu dois commencer par acquérir des bases en VBA.
Bonjour,

J'ai déjà développé quelques appli avec vba Excel , mais pas depuis access c'est pourquoi j'ai besoin de vos conseils.

Je souhaite importer dans la base access ou se trouve la table A, le fichier avec les différentes feuilles mises à jour au fil des semaines.
yg_be
Messages postés
10269
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 avril 2020
579 > David
qu'as-tu commencé? as-tu une question?
Oui, effectivement pour le moment j'en suis la :

identifier si un nouveau fichier est présent dans le répertoire :

Private Sub test()

DoCmd.OpenTable "TableA", acViewNormal, acEdit
DoCmd.GoToRecord acDataTable, "TableA", acFirst, 2
DoCmd.SelectObject acTable, "TableA", False
var = Screen.ActiveDatasheet.Controls(4)


Dim Chemin As String, Fichier As String, Resultat As String, NewFichier As Integer
'Définir le chemin d'accés
Chemin = "d:\Users\Desktop\DonnéesAccess\"
Fichier = Dir(Chemin & "*xlsb", vbNormal)
NewFichier = var + 1

'Si il y a un fichier qui contient un N° de semaine >= à la semaine présente dans la tableA alors
le fichier est identifier "NewWeek"
Do While Fichier <> ""
If Mid(Fichier, 15, 2) >= NewFichier Then
Resultat = "NewWeek"
Exit Do
End If
Fichier = Dir
Loop


Une fois le fichier identifié, j'aimerais pouvoir mettre à jour les différentes tables de la base Access avec les différentes feuilles du nouveau fichier.
Quelles sont les instructions ?

des tables déjà existantes dont les noms n'ont pas changées mais dont les données ont pu évoluer.

Merci d'avance pour vos conseils.
yg_be
Messages postés
10269
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 avril 2020
579
yg_be
Messages postés
10269
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 avril 2020
579
je vois que tu utilises ta table A comme si c'était un tableau Excel. par ailleurs, la technique que tu utilises pour extraire les données de la table est assez inhabituelle et compliquée.
si tu es content comme cela, parfait. quoi qu'il sera encore un peu plus compliqué de mettre à jour la table avec cette technique.
si tu veux améliorer, commençons par la structure de ta table A: quels sont les champs, leur noms et leur contenus?
Bonjour,

Merci pour ton lien, j'ai cependant une erreur sur l’exécution, "Erreur exécution 13"

    If Resultat = "NewWeek" Then
DoCmd.TransferSpreadsheet acImport, "TableA", "d:\Users\Desktop\DonnéesAccess\Semaine" & NewFichier & "xlsb", True
Else
DoCmd.TransferSpreadsheet acImport, "TableA", "d:\Users\Desktop\DonnéesAccess\Semaine" & var & "xlsb", True

End If


La première partie du code fonctionne, j'arrive a avoir le N° de la semaine actualisé dans la Table A, ce qui me permet de vérifier si des fichiers plus récents existent et de déterminer le chemin d’accès. mais le code ci dessus ne fonctionne pas.
As tu une idée ?
Comment procéderais tu ?
La table A contient environ 35 colonnes, et environ 1500 lignes, mais c'est variable car actualisé toutes les semaines.
Dans la colonne4 on retrouve le N° de la semaine actualisé.
yg_be
Messages postés
10269
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 avril 2020
579
peux-tu utiliser les balises de code (en précisant basic) quand tu partages du code VBA?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

chaque fois que tu communiques un erreur, prend soin de préciser à quelle ligne elle se produit.

peux-tu être plus précis:
- "La première partie du code": quelle première partie?
- "avoir le N° de la semaine actualisé dans la Table A", que veux-tu dire par "avoir": lire ou écrire?
- "le code ci dessus": tout ton code est au dessus
- "ne fonctionne pas": quel est le symptôme?
La première partie présente dans mon mail du 20 Mars 16h27 fonctionne, il me permet de lire le N° de la semaine actuellement dans la base Access et de vérifier si un nouveau fichier a été déposé dans le répertoire défini.

le code :
If Resultat = "NewWeek" Then
DoCmd.TransferSpreadsheet acImport, "TableA", "d:\Users\Desktop\DonnéesAccess\Semaine" & NewFichier & "xlsb", True
Else
DoCmd.TransferSpreadsheet acImport, "TableA", "d:\Users\Desktop\DonnéesAccess\Semaine" & var & "xlsb", True
End If


l'erreur est sur :
DoCmd.TransferSpreadsheet acImport, "TableA", "d:\Users\Desktop\DonnéesAccess\Semaine" & NewFichier & "xlsb", True
yg_be
Messages postés
10269
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 avril 2020
579
il serait préférable que tu montres ton code complet, et pas des morceaux.
je vois une erreur évidente dans ta ligne de code sur laquelle tu obtiens une erreur.
pour t'aider à la découvrir, je suggère de la remplacer par:
dim cheminnouveaufichier as string
cheminnouveaufichier = "d:\Users\Desktop\DonnéesAccess\Semaine" & NewFichier & "xlsb"
if dir(cheminnouveaufichier) = "" then
   msgbox "oups, pas de fichier " + cheminnouveaufichier 
else
    DoCmd.TransferSpreadsheet acImport, "TableA", cheminnouveaufichier , True
end if
Merci pour ton retour,

j'ai modifié et testé ton code, j'ai rajouté le point ".xlsb".

il y a encore une erreur sur le après le Else,
 DoCmd.TransferSpreadsheet acImport, "TableA", cheminnouveaufichier , True

Erreur d’exécution 13.

Le fichier excel contenant plusieurs onglet, ne doit on pas préciser l'onglet que l'on souhaite importer ?

Merci d'avance,
yg_be
Messages postés
10269
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 avril 2020
579
les informations à préciser sont expliquées en #5.
Oui merci j'ai lu le lien