Extraire donnees tableau depuis plusieurs documents
Bonjour,
Après avoir recherché longuement une solution, je me décide à poster cette demande.
Je travail sur les approvisionnements de restaurants scolaires de différentes communes.
J'ai deux types de documents :
1. un document par commune qui répertorie les approvisionnements spécifiques à cette commune. Ils ont tous les même structure et sont tous répertorié au même endroit dans un dossier sur le disque C:
2. Un document de synthèse.
Dans les documents des communes, j'ai dans l'onglet OUTILS, le tableau des approvisionnements.
J'aimerais extraire via une macro, les données de tous les tableaux (appelé Tableau1) des communes dans une feuille de mon document de synthèse. J'aimerais pouvoir me référer au dossier et non au nom des documents car le nombre de commune peut augmenter ou diminuer. Je me dis qu'il faudrait que la macro prennent en compte automatiquement tous les documents Excel présent dans le dossier et qu'il recherche les données dans l'onglet OUTILS pour finalement me les afficher (sous forme de valeur) dans une feuille de mon document de synthèse.
J'aimerai aussi que les en-têtes ne soit pas transférer dans mon documents de synthèse.
Je me suis référer à cette macro, mais que je la lance, rien ne s'exécute.
Sub Importfiles()
Dim WbDest As Workbook, WbSource As Workbook
Dim WksNewSheet As Worksheet
Dim NomFichier As String, Chemin As String
Dim I As Long
Set WbDest = ActiveWorkbook
Chemin = "C:\EVALUATION RESTAURATION COLLECTIVE\COMMUNES"
NomFichier = Dir(Chemin & "*.xls") 'définit les fichiers à importer en l’occurence tous les fichiers excel se trouvant dans ce répertoire
Do While NomFichier <> "" 'démarre la boucle jusqu’au dernier fichier disponible dans le répertoire
Set WbSource = Workbooks.Open(Chemin & NomFichier) 'ouvre le fichier actuel à importer
Set WksNewSheet = WbSource.Sheets("OUTILS") 'sélectionne la feuille de données à importer
WksNewSheet.Activate 'active cette feuille
WksNewSheet.Select
Range(Cells(1, 1), Cells(500, 14)).Select 'selection des données que l’on veut importer
Selection.Copy 'copie les données sélectionnées
WbDest.Activate 'retourne vers le fichier de départ
I = ActiveSheet.UsedRange.Rows.Count 'compte le nombre de lignes déjà utilisées dans ce fichier
Cells(I + 1, 1).Select 'sélection de la cellule où on veut coller les données (la première vide)
ActiveSheet.Paste 'colle les données
WbSource.Close 'ferme le fichier source
NomFichier = Dir 'va vers le fichier suivant à importer
Loop 'recommece la boucle avec le fichier suivant
WbDest.Activate
End Sub
Est-ce que je suis partie dans la bonne voie et sauriez-vous me dire ce qui bloque?
Je met en pièce jointe un document avec l'onglet OUTILS et le tableau pour que cela vous donne une idée.
Je m'excuse par avance si cette question est redondante.
Merci beaucoup de votre aide!
Bonjour et bienvenue sur le forum
Juste une anomalie que je note dans ton code.
Entre le chemin et le nom, il doit y avoir un anti-slash (« \ ») et je n’en vois pas.
Essaie d’en mettre un en l’ajoutant à chemin :
Chemin = "C:\EVALUATION RESTAURATION COLLECTIVE\COMMUNES" & "\ "
Et refais l’essai de lancer ta macro.
S’il ne se passe toujours rien, remplace :
Do While NomFichier <> ""
par
Do While Len( NomFichier) > 0
Bonne chance !
Bonjour,
Merci beaucoup pour ce coups de pouce, alors j'ai réussi à faire ouvrir les dossiers avec le code suivant (changements en gras)
[code]Sub Importfiles()
Dim WbDest As Workbook, WbSource As Workbook
Dim WksNewSheet As Worksheet
Dim NomFichier As String, Chemin As String
Dim I As Long
Set WbDest = ActiveWorkbook
Chemin = "C:\EVALUATION RESTAURATION COLLECTIVE\COMMUNES"
ChDir Chemin
NomFichier = Dir("*.xls") 'définit les fichiers à importer en l’occurence tous les fichiers excel se trouvant dans ce répertoire
Do While NomFichier <> "" 'démarre la boucle jusqu’au dernier fichier disponible dans le répertoire
Set WbSource = Workbooks.Open(NomFichier) 'ouvre le fichier actuel à importer
Set WksNewSheet = WbSource.Sheets("OUTILS") 'sélectionne la feuille de données à importer
WksNewSheet.Activate 'active cette feuille
WksNewSheet.Select
Range("Tableau1").Select 'selection des données que l’on veut importer
Selection.Copy 'copie les données sélectionnées
WbDest.Activate 'retourne vers le fichier de départ
I = ActiveSheet.UsedRange.Rows.Count 'compte le nombre de lignes déjà utilisées dans ce fichier
Cells(I + 1, 1).Select 'sélection de la cellule où on veut coller les données (la première vide)
ActiveSheet.Paste 'colle les données
WbSource.Close 'ferme le fichier source
NomFichier = Dir 'va vers le fichier suivant à importer
Loop 'recommece la boucle avec le fichier suivant
WbDest.Activate
End Sub[code\]
Maintenant un autre problème se pose à moi... Ce code fait un copier coller en passant par le presse papier, et d'après ce que j'ai lu il faut éviter cette étape en passant par le code destination. De plus je copie des cellules avec formules (affectées à des noms), mais je veux conserver uniquement les valeurs pour ne pas importer les noms dans ma feuille de synthèse
Pouvez-vous m'aider sur ce point?? Cela me serait d'une très grande aide!
Bonjour
Tu écris :
…je copie des cellules avec formules (affectées à des noms), mais je veux conserver uniquement les valeurs pour ne pas importer les noms dans ma feuille de synthèse
Pouvez-vous m'aider sur ce point??
Ce serait plus simple si tu joignais les fichiers concernés, même allégés et anonymisés…
Bye !