Recherches de feuilles dans plusieurs fichiers

Le
Jy
Bonjour,

Je cherche à créer une macro qui rassemble sur une même feuille, les
données provenant de feuilles particulières se trouvant dans d'autres
fichiers excel.

Je maitrise à peu près l'étape 1, mais pas la 2, est ce que quelqu'un peut
me donner une direction où chercher?

Etape 1 : ouvre tous les fichiers enregistres dans un repertoire et dont
le nom commence par un mot spécifique.

Etape 2 : pour chaque fichier, ouvre ctoutes les feuilles dont le nom
commencent par un autre mot spécifique (par exemple "A-")

Etape 3 : copie les donnees de chacune de ces feuilles dans un fichier
unique.

Merci pour votre aide,
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FS
Le #19815231
Bonjour,

Pour tes étapes 2 et 3, tu peux essayer le code suivant :

'==================== Sub OuvreEtCopie(NomFichierSource, NomFichierCible)
Dim Source As Workbook, Cible As Workbook, i&
Set Source = Workbooks(NomFichierSource)
Set Cible = Workbooks(NomFichierCible)
With Source
For i = 1 To .Sheets.Count
If Left(.Sheets(i).Name, 2) = "A-" Then
.Sheets(i).Copy after:=Cible.Sheets(Cible.Sheets.Count)
End If
Next i
End With
End Sub
'====================
Les paramètres à passer sont le nom d'un fichier à traiter et celui du
fichier où sont recopiées les feuilles qui correspondent au critère. Par
exemple :

Sub essai()
OuvreEtCopie "ClasseurTestCopie.xls", "ClasseurCible.xls"
End Sub

J'ai déduit de ton étape 1 que tu arrives à ouvrir les classeurs à
traiter. La macro proposée peut s'appeler dans la boucle qui les ouvre.
J'ai supposé que les pages à copier devaient l'être dans un classeur qui
est déjà existant et ouvert également.
Le critère de sélection des feuilles (ici "A-") pourrait être également
passé en paramètre si besoin (plus de souplesse à l'utilisation de la
procédure).

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Jy a écrit :
Bonjour,

Je cherche à créer une macro qui rassemble sur une même feuille, les
données provenant de feuilles particulières se trouvant dans d'autres
fichiers excel.

Je maitrise à peu près l'étape 1, mais pas la 2, est ce que quelqu'un peut
me donner une direction où chercher?

Etape 1 : ouvre tous les fichiers enregistres dans un repertoire et dont
le nom commence par un mot spécifique.

Etape 2 : pour chaque fichier, ouvre ctoutes les feuilles dont le nom
commencent par un autre mot spécifique (par exemple "A-")

Etape 3 : copie les donnees de chacune de ces feuilles dans un fichier
unique.

Merci pour votre aide,




MichDenis
Le #19815391
Bonjour Jy,

Ta macro pourrait ressembler à ceci:

'----------------------------------------------
Sub test()
Dim Chemin As String, F As Workbook, Sh As Worksheet
Dim MaFeuille As Worksheet, DerLig As Long
Dim Colonne As Integer, ligne As Long

'où seront copiées les données dans ce classeur
Set MaFeuille = ThisWorkbook.Worksheets("Feuil2")

Chemin = "c:UsersDMDocuments"

fichier = Dir(Chemin & "Exemple*.xls")

Do While fichier <> ""
Set F = Workbooks.Open(Chemin & fichier)
For Each Sh In F.Worksheets
If UCase(Left(Sh.Name, 2)) = "A-" Then
With MaFeuille
DerLig = .Range("A65536").End(xlUp)(2).Row
End With
With Sh
ligne = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Colonne = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
.Range("A1", Cells(ligne, Colonne)).Copy _
MaFeuille.Range("A" & DerLig)
End With
End If
Next
F.Close False
Loop
End Sub
'----------------------------------------------



"Jy" 4a685a8c$0$22636$
Bonjour,

Je cherche à créer une macro qui rassemble sur une même feuille, les
données provenant de feuilles particulières se trouvant dans d'autres
fichiers excel.

Je maitrise à peu près l'étape 1, mais pas la 2, est ce que quelqu'un peut
me donner une direction où chercher?

Etape 1 : ouvre tous les fichiers enregistres dans un repertoire et dont
le nom commence par un mot spécifique.

Etape 2 : pour chaque fichier, ouvre ctoutes les feuilles dont le nom
commencent par un autre mot spécifique (par exemple "A-")

Etape 3 : copie les donnees de chacune de ces feuilles dans un fichier
unique.

Merci pour votre aide,
MichDenis
Le #19816601
Une petite coquille :

cette ligne de code omet le "point" devant l'expression cells
.Range("A1", Cells(ligne, Colonne)).Copy _

Tu devrais lire :
.Range("A1", .Cells(ligne, Colonne)).Copy _

Dans la procédure :
Chemin = "c:UsersDMDocuments"
indique le répertoire où sont tes fichiers

fichier = Dir(Chemin & "Exemple*.xls")
"Exemple" représente le mot avec lequel débute
tous tes fichiers.



"MichDenis"
Bonjour Jy,

Ta macro pourrait ressembler à ceci:

'----------------------------------------------
Sub test()
Dim Chemin As String, F As Workbook, Sh As Worksheet
Dim MaFeuille As Worksheet, DerLig As Long
Dim Colonne As Integer, ligne As Long

'où seront copiées les données dans ce classeur
Set MaFeuille = ThisWorkbook.Worksheets("Feuil2")

Chemin = "c:UsersDMDocuments"

fichier = Dir(Chemin & "Exemple*.xls")

Do While fichier <> ""
Set F = Workbooks.Open(Chemin & fichier)
For Each Sh In F.Worksheets
If UCase(Left(Sh.Name, 2)) = "A-" Then
With MaFeuille
DerLig = .Range("A65536").End(xlUp)(2).Row
End With
With Sh
ligne = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Colonne = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
.Range("A1", Cells(ligne, Colonne)).Copy _
MaFeuille.Range("A" & DerLig)
End With
End If
Next
F.Close False
Loop
End Sub
'----------------------------------------------



"Jy" 4a685a8c$0$22636$
Bonjour,

Je cherche à créer une macro qui rassemble sur une même feuille, les
données provenant de feuilles particulières se trouvant dans d'autres
fichiers excel.

Je maitrise à peu près l'étape 1, mais pas la 2, est ce que quelqu'un peut
me donner une direction où chercher?

Etape 1 : ouvre tous les fichiers enregistres dans un repertoire et dont
le nom commence par un mot spécifique.

Etape 2 : pour chaque fichier, ouvre ctoutes les feuilles dont le nom
commencent par un autre mot spécifique (par exemple "A-")

Etape 3 : copie les donnees de chacune de ces feuilles dans un fichier
unique.

Merci pour votre aide,
MichDenis
Le #19816871
Et une dernière coquille,

Après la ligne : F.Close False

Il faut ajouter une autre ligne de code :
fichier = dir()

Voici la même procédure avec les corrections apportées :
'-------------------------------------------
Sub test()
Dim Chemin As String, F As Workbook, Sh As Worksheet
Dim MaFeuille As Worksheet, DerLig As Long
Dim Colonne As Integer, ligne As Long, Fichier As String
'où seront copiées les données dans ce classeur
Set MaFeuille = ThisWorkbook.Worksheets("Feuil2")

Chemin = "c:UsersDMDocuments"

Fichier = Dir(Chemin & "Exemple*.xls*")

Do While Fichier <> ""
Set F = Workbooks.Open(Chemin & Fichier)
For Each Sh In F.Worksheets
If Left(Sh.Name, 2) = "A-" Then
With MaFeuille
DerLig = .Range("A65536").End(xlUp)(2).Row
End With
With Sh
ligne = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Colonne = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
.Range("A1", .Cells(ligne, Colonne)).Copy _
MaFeuille.Range("A" & DerLig)
End With
End If
Next
F.Close False
Fichier = Dir()
Loop
End Sub
'-------------------------------------------




"MichDenis"
Une petite coquille :

cette ligne de code omet le "point" devant l'expression cells
.Range("A1", Cells(ligne, Colonne)).Copy _

Tu devrais lire :
.Range("A1", .Cells(ligne, Colonne)).Copy _

Dans la procédure :
Chemin = "c:UsersDMDocuments"
indique le répertoire où sont tes fichiers

fichier = Dir(Chemin & "Exemple*.xls")
"Exemple" représente le mot avec lequel débute
tous tes fichiers.



"MichDenis"
Bonjour Jy,

Ta macro pourrait ressembler à ceci:

'----------------------------------------------
Sub test()
Dim Chemin As String, F As Workbook, Sh As Worksheet
Dim MaFeuille As Worksheet, DerLig As Long
Dim Colonne As Integer, ligne As Long

'où seront copiées les données dans ce classeur
Set MaFeuille = ThisWorkbook.Worksheets("Feuil2")

Chemin = "c:UsersDMDocuments"

fichier = Dir(Chemin & "Exemple*.xls")

Do While fichier <> ""
Set F = Workbooks.Open(Chemin & fichier)
For Each Sh In F.Worksheets
If UCase(Left(Sh.Name, 2)) = "A-" Then
With MaFeuille
DerLig = .Range("A65536").End(xlUp)(2).Row
End With
With Sh
ligne = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Colonne = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
.Range("A1", Cells(ligne, Colonne)).Copy _
MaFeuille.Range("A" & DerLig)
End With
End If
Next
F.Close False
Loop
End Sub
'----------------------------------------------
Jy
Le #19822231
C'est super, ça fonctionne parfaitement, merci beaucoup, beaucoup, beaucoup
de l'avoir écrite en entier.


"MichDenis"
Une petite coquille :

cette ligne de code omet le "point" devant l'expression cells
.Range("A1", Cells(ligne, Colonne)).Copy _

Tu devrais lire :
.Range("A1", .Cells(ligne, Colonne)).Copy _

Dans la procédure :
Chemin = "c:UsersDMDocuments"
indique le répertoire où sont tes fichiers

fichier = Dir(Chemin & "Exemple*.xls")
"Exemple" représente le mot avec lequel débute
tous tes fichiers.



"MichDenis" discussion :

Bonjour Jy,

Ta macro pourrait ressembler à ceci:

'----------------------------------------------
Sub test()
Dim Chemin As String, F As Workbook, Sh As Worksheet
Dim MaFeuille As Worksheet, DerLig As Long
Dim Colonne As Integer, ligne As Long

'où seront copiées les données dans ce classeur
Set MaFeuille = ThisWorkbook.Worksheets("Feuil2")

Chemin = "c:UsersDMDocuments"

fichier = Dir(Chemin & "Exemple*.xls")

Do While fichier <> ""
Set F = Workbooks.Open(Chemin & fichier)
For Each Sh In F.Worksheets
If UCase(Left(Sh.Name, 2)) = "A-" Then
With MaFeuille
DerLig = .Range("A65536").End(xlUp)(2).Row
End With
With Sh
ligne = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Colonne = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
.Range("A1", Cells(ligne, Colonne)).Copy _
MaFeuille.Range("A" & DerLig)
End With
End If
Next
F.Close False
Loop
End Sub
'----------------------------------------------



"Jy" :
4a685a8c$0$22636$
Bonjour,

Je cherche à créer une macro qui rassemble sur une même feuille, les
données provenant de feuilles particulières se trouvant dans d'autres
fichiers excel.

Je maitrise à peu près l'étape 1, mais pas la 2, est ce que quelqu'un
peut
me donner une direction où chercher?

Etape 1 : ouvre tous les fichiers enregistres dans un repertoire et
dont
le nom commence par un mot spécifique.

Etape 2 : pour chaque fichier, ouvre ctoutes les feuilles dont le nom
commencent par un autre mot spécifique (par exemple "A-")

Etape 3 : copie les donnees de chacune de ces feuilles dans un fichier
unique.

Merci pour votre aide,



Jy
Le #19823721
J'ai oublié de préciser, j'ai fait un seul changement, j'ai rajouté la
ligne "fichier = Dir" avant Loop. Sinon, le macro réouvrait le premier
fichier au lieu de passer au deuxieme.

Next
F.Close False
fichier = Dir
Loop
End Sub

"Jy" 4a6992be$0$9975$
C'est super, ça fonctionne parfaitement, merci beaucoup, beaucoup,
beaucoup de l'avoir écrite en entier.


"MichDenis"
Une petite coquille :

cette ligne de code omet le "point" devant l'expression cells
.Range("A1", Cells(ligne, Colonne)).Copy _

Tu devrais lire :
.Range("A1", .Cells(ligne, Colonne)).Copy _

Dans la procédure :
Chemin = "c:UsersDMDocuments"
indique le répertoire où sont tes fichiers

fichier = Dir(Chemin & "Exemple*.xls")
"Exemple" représente le mot avec lequel débute
tous tes fichiers.



"MichDenis" discussion :

Bonjour Jy,

Ta macro pourrait ressembler à ceci:

'----------------------------------------------
Sub test()
Dim Chemin As String, F As Workbook, Sh As Worksheet
Dim MaFeuille As Worksheet, DerLig As Long
Dim Colonne As Integer, ligne As Long

'où seront copiées les données dans ce classeur
Set MaFeuille = ThisWorkbook.Worksheets("Feuil2")

Chemin = "c:UsersDMDocuments"

fichier = Dir(Chemin & "Exemple*.xls")

Do While fichier <> ""
Set F = Workbooks.Open(Chemin & fichier)
For Each Sh In F.Worksheets
If UCase(Left(Sh.Name, 2)) = "A-" Then
With MaFeuille
DerLig = .Range("A65536").End(xlUp)(2).Row
End With
With Sh
ligne = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Colonne = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
.Range("A1", Cells(ligne, Colonne)).Copy _
MaFeuille.Range("A" & DerLig)
End With
End If
Next
F.Close False
Loop
End Sub
'----------------------------------------------



"Jy" :
4a685a8c$0$22636$
Bonjour,

Je cherche à créer une macro qui rassemble sur une même feuille, les
données provenant de feuilles particulières se trouvant dans d'autres
fichiers excel.

Je maitrise à peu près l'étape 1, mais pas la 2, est ce que quelqu'un
peut
me donner une direction où chercher?

Etape 1 : ouvre tous les fichiers enregistres dans un repertoire et
dont
le nom commence par un mot spécifique.

Etape 2 : pour chaque fichier, ouvre ctoutes les feuilles dont le nom
commencent par un autre mot spécifique (par exemple "A-")

Etape 3 : copie les donnees de chacune de ces feuilles dans un fichier
unique.

Merci pour votre aide,







MichDenis
Le #19824261
| J'ai oublié de préciser, j'ai fait un seul changement, j'ai rajouté la
| ligne "fichier = Dir" avant Loop.

Je pense que tu as surtout oublié de lire la totalité des
messages que j'ai commis sur ce fil.
Publicité
Poster une réponse
Anonyme