Copier-coller des fichiers d'un même dossier dans un classeur
Bonjour à tous et à toutes,
Je suis nouveau sur le forum donc si je fais des erreurs, veuillez me pardonner d'avance.
J'ai déjà lu des sujets similaires mais pas qui correspondent exactement à ma situation et je ne suis pas très doué en VBA. Je suis donc à la recherche d'une macro qui me permettra de copier les fichiers excel qui sont tous dans un même dossier, dans un classeur mais qui comporte des feuilles déjà faites. Je m'explique.
Chaque semaine nous recevons des fichiers excel par jour et par équipe du type :
-20210329A
-20210329B
-20210329C
Ces fichiers excel ne comporte qu'un seul onglet. Et je tiens à préciser qu'il n'y a pas forcement tous les jours, ni toutes les équipes par jour. En fin de semaine il n' y a pas toujours du travail le samedi ou le dimanche.
J'ai un classeur excel dans lequel je copie ces fichiers par jour et par équipe, c'est-à-dire:
-Lun A
-Lun B
-Lun C
Ainsi de suite.
Mais dans ce classeur j'ai également deux onglets qui se nomme "Semaine" pour le récapitulatif et "Suivi" pour le suivi avec des graphiques sont donc une synthèse de ces documents.
Ce que j'aimerais c'est que le code puisse reconnaître le jour, donc Lundi, Mardi, Mercredi... et puisse les coller par équipe A, B, C.
Malheureusement je ne peux partager de documents en raison de la confidentialité de l'entreprise dans laquelle je travaille.
Je vous remercie d'avance.
Edit: J'ajoute 3 fichiers qui, je l'espère, vous permettront de comprendre.
Bonjour
Merci de compléter ton profil en indiquant ta version Excel
Des fichiers vides ne servent pas à grand chose...
De plus il n'est pas dit clairement si on colle l'onglet complet du fichier 2021...dans le le classeur global ou le contenu dans un onglet existant
Prend au moins le temps de créer 10 lignes dans chaque classeur avec un nombre de colonnes et leurs titres réels, un contenu dont le type de données correspond au réel mais sans données confidentielles.
Bonjour,
Tout d'abord merci d'avoir pris le temps de répondre. Je viens de compléter mon profil, je suis sous excel 2010.
Concernant les documents je viens de les remplir un peu plus mais je ne peux malheureusement pas mettre plus de chose mais il n'est pas nécessaire car au final ce que je veux c'est effectivement copier tout l'onglet des fichiers 2021, comme ce sont des modèles toutes les colonnes et lignes sont identiques.
Ce que je voudrais c'est copier tout le contenu de l'onglet "Déclaration" par jour et par équipe.
Par exemple dans le fichier 20210329A il est bien indiqué la date et l'équipe et je voudrais pouvoir coller dans le classeur Test, au Lun A.
RE
Avec 2010 et des tableaux non normalisés seul VBA possible
Un VBiste va passer par là...
Merci 78chris
Bonjour à tous,
Je viens de trouver ce code et je voulais savoir s'il était adapté à mon problème.
Merci d'avance.
Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim OD As Object 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Object 'déclare la variable OS (Onglet Source)
Set CD = ThisWorkbook 'définit le classeur destination CD
CH = CD.Path & "/" 'définit le chemin d'accès CH
Set OD = CD.Sheets("Feuil1") 'définit l'onglet destination OD
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CS = Workbooks("Mon_Classeur_Source.xlsx") 'définit le classeur source (génère une erreur si le classeur est fermé)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'suprime l'erreur
Workbooks.Open (CH & "Mon_Classeur_Source.xlsx") 'ouvre le classeur source
Set CS = ActiveWorkbook 'définit le classeur source
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OS = CS.Sheets("Feuil1") 'définit l'onglet source
'travail...
OS.Range("A1").Copy OD.Range("A1") 'pour l'exemple
'fin de travail...
CS.Close SaveChanges:=False 'ferme le classeur source CS
End Sub
Bonjour à tous,
Je reviens vers vous car j'ai un peu de nouveau après avoir passer la semaine dessus.
Voici un code qui marche (à peu près) :
Sub MacroTest()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim SF As Object 'déclare la variable SF (Système de Fichiers)
Dim D As Object 'déclare la variable D (Dossiers)
Dim EF As Object 'déclare la variable EF (Ensemble des Fichiers)
Dim F As Object 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable CD (Onglet Source)
Dim DEST As Range 'déclare la variable CD (Classeur Destination)
Set CD = ThisWorkbook 'définit le classeur destination CD
CH = CD.Path & "\" 'définit le chemin d'accès CH
Set OD = CD.Sheets(3) 'définit l'onget destination OD
Set SF = CreateObject("Scripting.FileSystemObject") 'définit le système de fichiers SF
Set D = SF.GETFolder(CH) 'définit le dossier de travail D
Set EF = D.Files 'définit l'ensemble des fichiers EF du dossier de travail D
For Each F In EF 'boucle sur tous les fichiers F de l'ensemble ds fichiers EF
If F.Name <> ThisWorkbook.Name And F.Name Like "*.xls*" Then 'condition : si le nom du fichier n'est pas le nom de ce fichier et si le fichier a une extension commençant par ".xls"
Workbooks.Open (F), UpdateLinks:=0 'ouvre le fichier
Set CS = ActiveWorkbook 'définit le classeur CS
Set OS = CS.Sheets(1) 'définit l'onglet OS
Set DEST = OD.Cells.Range("A1")
OS.Range("A1:AK50").Copy DEST 'copie les données de l'onglet source OS et les colle dans DEST
CS.Close False 'ferme le classeur source
Set CS = Nothing 'initialise la variable CS
Worksheets(ActiveSheet.Index + 1).Select 'pour selectionner l'onglet suivant
End If 'fin de la condition
Next F 'prochain fichier de la boucle
'CD.Save 'enregistre ce fichier
End Sub
Le seul problème que j'ai c'est que je n'arrive pas à coller mon deuxième documents sur l'onglet suivant de mon classeur destination.
J'ai conscience que le "Worksheets(ActiveSheet.Index + 1).Select 'pour selectionner l'onglet suivant" est mal placé et que je dois sans doute faire une boucle à partir de "Set OS = CS.Sheets(1) 'définit l'onglet OS" mais je ne sais vraiment pas comment faire pour que les cellules de mon deuxième fichier se colle sur l'onglet suivant.
Merci d'avance pour vos aides.
Bonjour à tous
Je reviens vers le forum car j'ai bien trouvé ce que je voulais faire avec le code suivant.
Sub Macrote()
Application.DisplayAlerts = False
Dim CD As Workbook 'déclare la varaible CD (Classeur Destinsation)
Dim OD As Worksheet 'déclare la varaible OD (Onglet Destinsation)
Dim CA As String 'déclare la varaible CA (Chemin d'Accès)
Dim F As String 'déclare la varaible F (Fichier)
Dim CS As Workbook 'définit la variable CS (Classeur Source)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim J As Long
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Lun A") 'définit l'onglet Destination
CA = CD.Path & "\" 'définit la chemin d'acces du dossier des fichiers source
F = Dir(CA & "*.xlsx") 'définit le premier fichier F avec extension .xlsx ayant CA comme chemin d'accès (extension à adapter)
Do While F <> ThisWorkbook.Name And F Like "*.xlsx"
For J = 1 To ThisWorkbook.Worksheets.Count
Application.Workbooks.Open (CA & F), UpdateLinks:=0 'ouvre le fichier F
Set CS = ActiveWorkbook 'définit le classeur CS
Set OS = CS.Sheets(1) 'définit l'onglet OS
'définit la cellule de destination DEST (A1 si A1 est vide sinon, la première cellule vide de la colonne A de l'onglet OD)
OS.Range("A1:AK50").Copy 'copie les données de l'onglet source OS et les colle dans DEST
ThisWorkbook.Sheets(J).Activate
Range("A1").Activate
Range("A1").Select
Range("A1").PasteSpecial xlPasteAll
CS.Close False 'ferme le classeur source sans enregistrer
Set CS = Nothing 'initialise la variable CS
F = Dir 'définit le prochain fichier F ayant avec extension .xlsx ayant CA comme chemin d'accès
Next J
Loop 'boucle
Application.DisplayAlerts = True
End Sub
Cela m'a prit du temps mais au moins j'ai réussi et merci à Chris.
Simple dernière modification que j'aimerais faire.
"For J = 1 To ThisWorkbook.Worksheets.Count" Pour cette ligne j'aimerais rendre le "1" variable, c'est-à-dire que j'aimerais mettre une cellule dans une de mes feuilles qui me demanderas par quel nombre je veux commencer 1, 2 ou 3, comment puis je faire cela ?
Merci d'avance.