Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherches de feuilles dans plusieurs fichiers

7 réponses
Avatar
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,

7 réponses

Avatar
FS
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,




Avatar
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" a écrit dans le message de groupe de discussion :
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,
Avatar
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" a écrit dans le message de groupe de 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" a écrit dans le message de groupe de discussion :
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,
Avatar
MichDenis
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" a écrit dans le message de groupe de discussion :

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" a écrit dans le message de groupe de 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
'----------------------------------------------
Avatar
Jy
C'est super, ça fonctionne parfaitement, merci beaucoup, beaucoup, beaucoup
de l'avoir écrite en entier.


"MichDenis" a écrit dans le message de news:

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" a écrit dans le message de groupe de
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" a écrit dans le message de groupe de discussion
:
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,



Avatar
Jy
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" a écrit dans le message de news:
4a6992be$0$9975$
C'est super, ça fonctionne parfaitement, merci beaucoup, beaucoup,
beaucoup de l'avoir écrite en entier.


"MichDenis" a écrit dans le message de news:

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" a écrit dans le message de groupe de
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" a écrit dans le message de groupe de discussion
:
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,







Avatar
MichDenis
| 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.