Importer des données des multiples classeurs
Bonjour à tous
Tout d’abord mes excuses si ma question à été abordé auparavant.
Mon projet consiste au début à importer des données (valeurs des certaines cellules) de plusieurs classeurs qui se trouvent dans un répertoire précis et les copier dans un autre classeur afin de créer un fichier de synthèse (Synthesedonnées.xls).
Je n’arrive pas à trouver le code qui permet d’aller ouvrir tous les classeurs successivement et les lire. Ne connaissant pas leurs noms mais seulement leur répertoire.
On peut considérer que le répertoire qui contient les classeurs de source se nom : C :\ Répértoire Clients\
Celui de destinateur C:\ Répertoire de Synthèse\Synthesedonnées.xls
Merci d’avance de votre aide
Dahlia
Bonjour à tous (bienvenue sur le forum dahlia),
C'est possible par VBAjmd a écrit :sans connaître les noms des classeurs ?
Ah là ça va être plus difficile effectivement. Parce que si on sait pas quoi copier et oùjmd a écrit :ni leur organisation interne ?
Donc question : dans quelles cellules se trouvent les données à importer ? et dans quelles cellules est-ce que ça doit être copié ?
vba-new a écrit :Bonjour à tous (bienvenue sur le forum dahlia),
C'est possible par VBAjmd a écrit :sans connaître les noms des classeurs ?
A condition que ce soit bien tous les classeurs du répertoire ! Ah là ça va être plus difficile effectivement. Parce que si on sait pas quoi copier et oùjmd a écrit :ni leur organisation interne ?
Donc question : dans quelles cellules se trouvent les données à importer ? et dans quelles cellules est-ce que ça doit être copié ?
Bonjour
On connaît les noms des classeurs et leur organisation interne.
Le nom de répertoire qui contient que des fichiers client Excel est connu. Leurs classeurs ont la même structure (nombre des feuilles et disposition des cellules)
Une fois qu’on a réussi à ouvrir un classeur on cherche dans une feuille (nom connu aussi) des données dans des cellules précises.
Le problème n’est pas d’importer les données externes d’un classeur vers un autre mais plutôt comment ouvrir successivement les classeurs dans un répertoire connu pour faire l'importation.
J’espère avoir mieux exposé le problème.
Merci d’avance
Dahlia
re,
Oui on sait !dahlia.m a écrit :Le nom de répertoire qui contient que des fichiers client Excel est connu
En fait, ce que je te demandais c'est justement de me donner toutes ces informations pour pouvoir adapter un code ! Tu me donnes le nom de la feuille, tu me dis exactement quelles cellules copier, dans quelles cellules coller !dahlia.m a écrit :Une fois qu’on a réussi à ouvrir un classeur on cherche dans une feuille (nom connu aussi) des données dans des cellules précises.
D'où mes questions concernant quoi copier et où pour te donner un code qui fait ce que tu demandes !dahlia.m a écrit :Le problème n’est pas d’importer les données externes d’un classeur vers un autre mais plutôt comment ouvrir successivement les classeurs dans un répertoire connu pour faire l'importation.
Il était déjà tout à fait bien exposé, manque plus que 2-3 infos sur les cellules !dahlia.m a écrit :J’espère avoir mieux exposé le problème.
A+
vba-new a écrit :re,
Oui on sait !dahlia.m a écrit :Le nom de répertoire qui contient que des fichiers client Excel est connu
En fait, ce que je te demandais c'est justement de me donner toutes ces informations pour pouvoir adapter un code ! Tu me donnes le nom de la feuille, tu me dis exactement quelles cellules copier, dans quelles cellules coller !dahlia.m a écrit :Une fois qu’on a réussi à ouvrir un classeur on cherche dans une feuille (nom connu aussi) des données dans des cellules précises.
D'où mes questions concernant quoi copier et où pour te donner un code qui fait ce que tu demandes !dahlia.m a écrit :Le problème n’est pas d’importer les données externes d’un classeur vers un autre mais plutôt comment ouvrir successivement les classeurs dans un répertoire connu pour faire l'importation.
Il était déjà tout à fait bien exposé, manque plus que 2-3 infos sur les cellules !dahlia.m a écrit :J’espère avoir mieux exposé le problème.
A+
Merci vba-new pour ton aide
Nom de la feuille de chaque classeur : « Feuille entraineur »
Nom de la feuille de classeur de destination : « fonction de recherche »
Données importées sur la ligne 10
E2 > B10
G2 > C10
E3 > D10
F3 > E10
E4 > F10
E5 > G10
E6 > H10
E7 > I10
B10 > J10
C10 > K10
E10 > L10
F10 > M10
B12 > N10
C12 > O10
E12 > P10
F12 > Q10
B14 > R10
C14 > S10
E14 > T10
F14 > U10
B16 > V10
E18 > W10
E22 > X10
Mais peut être y'aura d’autres cellules à rajouter par la suite...
Euh...une question me taraude.
Les cellules de destination sont toujours les mêmes ? Dans ce cas-là, à chaque fois que tu fais l'import de données, les données de la ligne 10 seront écrasées non ?
vba-new a écrit :Euh...une question me taraude.
Les cellules de destination sont toujours les mêmes ? Dans ce cas-là, à chaque fois que tu fais l'import de données, les données de la ligne 10 seront écrasées non ?
Bonsoir vba-new
Effectivement j'avais oublié ce détail désolée !
En effet les données de chaque classeur se positionnent sur une ligne de ce nouveau classeur.
Dahlia
Ok. Essaie ce code (à lancer depuis le classeur de synthèse) :
Sub import()
Dim synthese As ThisWorkbook, fichier As String, i As Integer
Dim tablo
Application.ScreenUpdating = False
ReDim tablo(0, 1 To 23)
i = 10
Set synthese = ThisWorkbook
fichier = Dir("C:\Répertoire Clients\*.xls")
Do While fichier <> ""
If fichier <> synthese.Name Then
Workbooks.Open Filename:="C:\Répertoire Clients\" & fichier
With Sheets("Feuille entraineur")
tablo(0, 1) = .[E2]
tablo(0, 2) = .[G2]
tablo(0, 3) = .[E3]
tablo(0, 4) = .[F3]
tablo(0, 5) = .[E4]
tablo(0, 6) = .[E5]
tablo(0, 7) = .[E6]
tablo(0, 8) = .[E7]
tablo(0, 9) = .[B10]
tablo(0, 10) = .[C10]
tablo(0, 11) = .[E10]
tablo(0, 12) = .[F10]
tablo(0, 13) = .[B12]
tablo(0, 14) = .[C12]
tablo(0, 15) = .[E12]
tablo(0, 16) = .[F12]
tablo(0, 17) = .[B14]
tablo(0, 18) = .[C14]
tablo(0, 19) = .[E14]
tablo(0, 20) = .[F14]
tablo(0, 21) = .[B16]
tablo(0, 22) = .[E18]
tablo(0, 23) = .[E22]
End With
synthese.Sheets("fonction de recherche").Range("B" & i & ":X" & i) = tablo
i = i + 1
Workbooks(fichier).Close
Else
MsgBox "Un fichier porte le même nom que le fichier de synthèse", vbInformation
End If
fichier = Dir
Loop
End Subvba-new a écrit :Ok. Essaie ce code (à lancer depuis le classeur de synthèse) :
Sub import() Dim synthese As ThisWorkbook, fichier As String, i As Integer Dim tablo Application.ScreenUpdating = False ReDim tablo(0, 1 To 23) i = 10 Set synthese = ThisWorkbook fichier = Dir("C:\Répertoire Clients\*.xls") Do While fichier <> "" If fichier <> synthese.Name Then Workbooks.Open Filename:="C:\Répertoire Clients\" & fichier With Sheets("Feuille entraineur") tablo(0, 1) = .[E2] tablo(0, 2) = .[G2] tablo(0, 3) = .[E3] tablo(0, 4) = .[F3] tablo(0, 5) = .[E4] tablo(0, 6) = .[E5] tablo(0, 7) = .[E6] tablo(0, 8) = .[E7] tablo(0, 9) = .[B10] tablo(0, 10) = .[C10] tablo(0, 11) = .[E10] tablo(0, 12) = .[F10] tablo(0, 13) = .[B12] tablo(0, 14) = .[C12] tablo(0, 15) = .[E12] tablo(0, 16) = .[F12] tablo(0, 17) = .[B14] tablo(0, 18) = .[C14] tablo(0, 19) = .[E14] tablo(0, 20) = .[F14] tablo(0, 21) = .[B16] tablo(0, 22) = .[E18] tablo(0, 23) = .[E22] End With synthese.Sheets("fonction de recherche").Range("B" & i & ":X" & i) = tablo i = i + 1 Workbooks(fichier).Close Else MsgBox "Un fichier porte le même nom que le fichier de synthèse", vbInformation End If fichier = Dir Loop End Sub
Merci beaucoup vba ça fonctionne.
C'est super...
Dahlia
