Récupération des données de plusieurs fichiers d'un même dossier

nainfa

XLDnaute Junior
Bonjour le forum,

Tout d’abord, un grand merci à ceux qui prendront la peine de me lire.

J’utilise Microsoft Office Professionnel Plus 2010. Ma version est la 14.0.4760.1000 (32 bits)

Dans mon exemple, j’ai 3 fichiers (ce nombre est susceptible d’augmenter ou de diminuer) appelés fichier1 ; fichier2 ; fichier3 (sans surprise, ces noms de ces fichiers ne sont que des exemples). On va dire qu’ils sont situés au chemin d’accès suivant : C:\Users\Utilisateur\Desktop\dossier test

Ces fichiers contiennent chacun des données dans les cellules suivantes :
- feuille 1 A1 C6 F5
- feuille 2 A4 E6 H6

Dans un nouveau fichier (que j’ai appelé « fichier à obtenir), je cherche à avoir une macro qui va aller dans chaque fichier excel du « dossier test » pour récupérer le nom de fichier et les données et me les copier sous la forme suivante :

Colonne A : nom du fichier
Colonne B : valeur de la cellule A1 de la feuille 1
Colonne C : valeur de la cellule C6 de la feuille 1
Colonne D : valeur de la cellule F5 de la feuille 1
Colonne E : valeur de la cellule A4 de la feuille 2
Colonne F : valeur de la cellule E6 de la feuille 2
Colonne G : valeur de la cellule H6 de la feuille 2

Je cherche à avoir une ligne par fichier, sachant que la ligne 1 doit rester inchangée (elle contiendra des titres).

J’espère que mes explications sont claires. Mais si ce n’est pas le cas, n’hésitez pas à me poser toutes les questions que vous avez. Je joins un exemple au topic.

Mes recherches de sujets similaires sont restées infructueuses mais si vous en avez, n'hésitez pas à me donner les liens.

Bonne journée à tous,

Guillaume / Nainfa
 

Pièces jointes

  • exemple compressé.zip
    25.8 KB · Affichages: 56

job75

XLDnaute Barbatruc
Re : Récupération des données de plusieurs fichiers d'un même dossier

Bonjour phil75016, salut Theze,

Ceci fonctionnera, mais seulement si le fichier source est ouvert :

Code:
Range("D" & I).Formula = "=OFFSET('" & Chemin & Fichier & "'!TOTAUXH,,11)"
Si vous voulez pouvoir utiliser le fichier source fermé, nommez CIBLE la cellule recherchée :

Code:
Range("D" & I).Formula = "='" & Chemin & Fichier & "'!CIBLE"
A+
 

phil75016

XLDnaute Junior
Re : Récupération des données de plusieurs fichiers d'un même dossier

bonjour Job75
Je vous remercie. Effectivement, j'aurais souhaité récupérer les données sans avoir à ouvrir les fichiers pour accélérer le processus. Cependant, mes fichiers (+ de 200) n'ont pas les cellules "CIBLE" nommées.
J'ai constaté également qu'il y avait un problème si les onglets contenaient un espace ou si une cellule nommée contenait un _.
Je pense que je vais continuer à faire comme j'ai toujours fait, c'est à dire une macro qui ouvre tous les dossiers et récupère les infos dont j'ai besoin. C'est peut être plus long mais au moins c'est plus facile!! lol
 

Theze

XLDnaute Occasionnel
Re : Récupération des données de plusieurs fichiers d'un même dossier

Bonjour,

Je ne comprend pas, tu dis que si "TOTAUXH" est le nom de la cellule B20 il te retourne L11 ? C'est bizarre, car un offset de 11 colonnes en ligne 20 ne peut retourner l'adresse de la cellule L11 ???
Contrôle tes noms de range pour voir si il n'y a pas conflit ! Teste en nommant B20 de façon différente (adapte dans la formule) pour voir, il doit te retourner M20.

Hervé.
 

phil75016

XLDnaute Junior
Re : Récupération des données de plusieurs fichiers d'un même dossier

Désolé, je viens de me rendre compte que la macro bloque au niveau de la ligne :

Range("A" & I).Offset(0, 2).Formula = "='" & Chemin & "[" & Fichier & "]feuille 1'!" & Range("TOTAUXH").Offset(11, 0).Address(0, 0)

Le message d'erreur est "erreur d'exécution 1004" "La méthode range de l'objet global a échoué"

Je joins les fichiers à titre d'exemple.

Merci pour votre assistance
 

Pièces jointes

  • fichier recup.zip
    18.7 KB · Affichages: 18

kristiano94

XLDnaute Nouveau
Re : Récupération des données de plusieurs fichiers d'un même dossier

Bonjour,

Je souhaiterais appliquer cette macro cependant je souhaiterais également qu'elle parcours les sous dossier ?

Sub TousLesDossiers(LeDossier$, i As Long)
Dim fso As Object, Dossier As Object
Dim sousRep As Object, Flder As Object
Dim Fichier As String
Dim chemin As String

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(LeDossier)


'examen du dossier courant

For Each Flder In Dossier.SubFolders
Fichier = Dir(Flder.Path & "\*.xls*")


'boucle sur tous les classeurs afin de récupérer les valeurs dans la feuille 1 ("feuille 1") et la feuille 2 ("Feuil2")
'adapter le nom des feuille

Do While Fichier <> ""
i = i + 1
Range("A" & i).Value = Fichier
Range("A" & i).Offset(0, 1).Formula = "='" & chemin & "[" & Fichier & "]feuille1'!E21"


'et ne garde que les valeurs
Range("A" & i).Offset(0, 1).Value = Range("A" & i).Offset(0, 1).Value


Fichier = Dir
Loop
Next

'traitement récursif des sous dossiers
For Each sousRep In Dossier.SubFolders
TousLesDossiers sousRep.Path, i
Next sousRep
Set fso = Nothing
End Sub 'fs
Sub test()
TousLesDossiers "C:\Documents and Settings\moi\Mes documents\", 1
End Sub



Ce code fonctionne mais lors du changement de dossier il me demande ou se trouve le fichier


Merci a vous :)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 040
Messages
2 084 827
Membres
102 684
dernier inscrit
flint125