Importer des données d'autres classeurs sans connaitre leur noms

Fermé
OrsonWels Messages postés 1 Date d'inscription mercredi 7 août 2019 Statut Membre Dernière intervention 7 août 2019 - Modifié le 7 août 2019 à 16:51
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 8 août 2019 à 23:43
Bonjour,

Je suis face à un challenge qui me donne du fil à retordre. J'ai essayé pas mal d'idées mais aucune ne fonctionne ..

Je m'explique;

Dans un dossier j'ai plusieur classeurs .xlsm (leurs noms peuvent varier) dont un recevra les données des autres (son nom à lui est toujours le-même).

J'ai besoin par une macro d'ouvrir successivement tous les autres classeurs du dossier, d'aller chercher les info dont j'ai besoin (ca j'ai su codé, ca s'appelle "Ma_macro_d_exportation" dans l'exemple ci-dessous) et de les refermer sans sauver.

Pour ce faire j'ai adapté un code pour obtenir :

Sub TEST_Extraction()

Dim CD As Workbook 'déclare la variable CD (Classeur Destination)'
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)'
Dim CS As Workbook 'déclare la variable CS (Classeur Source)'
Dim OS As Worksheet 'déclare la variable OD (Onglet Source)'
Dim CA As String 'déclare la variable CA (Chemin dAccès)'
Dim F As String 'déclare la variable F (Fichiers)'

Application.ScreenUpdating = False 'masque les rafraîchissements décran'
Set CD = ThisWorkbook 'définit le classeur destination CD'
Set OD = CD.Sheets("QUOTATION") 'définit longlet destination OD'
CA = CD.Path & "\" 'définit le chemin daccès CA'"

F = Dir(CA & "*.xlsm") 'définit le premier fichier F avec lextension ".xlsm" dans le dossier CA'
Do While F <> "" 'exécute tant quil existe des fichiers F'
    Application.Workbooks.Open (F) 'ouvre le fichier F'
    Set CS = ActiveWorkbook 'définit le classeur source CS'
    Set OS = CS.Sheets("Export_Quotation")
    Ma_macro_d_exportation
    ActiveWorkbook.Close False 'Ferme sans sauver'
    F = Dir 'fichier suivant, avec lextension ".xlsm" dans le dossier CA'
Loop

End Sub


Et de manière tout à fait chronique, quand je lance la macro je recois un message d'erreur qui semble concerner l'instruction : Application.Workbooks.Open (F)


Nb : Evidemment je souhaite que le Classeur qui receille les info des autres Classeurs ne soit ouvert par cette macro (lui son nom sera toujours le meme). De plus, le chemin d'acces (dossier dans le quel se trouvent les classeurs) peut varier d'un utilisateur à l'autre.

Est-ce que quelqu'un pourrait me sauver ? :D

Un tout grand merci d'avance !
A voir également:

2 réponses

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
7 août 2019 à 18:23
bonjour, moi j'essaierais en donnant le nom complet du fichier à ouvrir, le message d'erreur montrant bien que le nom est incomplet.
0
Salut

Merci pour ta réponse

Justement je ne peux pas renseigner les noms qui sont suceptibles de changer.

Le nom du classeur qui apparait dans le message d'erreur est le bon (celui du classeur dans le dossier).
Au moment ou j'applique F = Dir(CA & "*.xlsm") il trouve bien le premier classeur par ordre alphabétique, mais l'instruction d'ouvrir le classeur plante ...
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
8 août 2019 à 11:13
Le nom du classeur qui apparaît dans le message d'erreur est incomplet: comment Excel peut-il deviner dans quel dossier se trouve ce classeur?
0
Un grand merci pour ton éclairage !
En effet en tapant

Workbooks.Open (CA & F)

tout fonctionne très bien !
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
8 août 2019 à 13:59
parfait, peux-tu alors marquer comme résolu, via la roue dentée à droite du titre?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
8 août 2019 à 23:43
Bonjour,

pour répondre à ton NB, Thisworkbook.name te donne le nom du classeur ayant cette macro.
A comparer avec F avant d'ouvrir le fichier.
eric
0