Macro copie coller des données d'un classeur à un autre
Fermé
namy89
Messages postés
6
Date d'inscription
vendredi 1 avril 2016
Statut
Membre
Dernière intervention
24 novembre 2016
-
1 avril 2016 à 14:10
namy89 Messages postés 6 Date d'inscription vendredi 1 avril 2016 Statut Membre Dernière intervention 24 novembre 2016 - 4 avril 2016 à 13:19
namy89 Messages postés 6 Date d'inscription vendredi 1 avril 2016 Statut Membre Dernière intervention 24 novembre 2016 - 4 avril 2016 à 13:19
A voir également:
- Copier coller vba excel entre 2 classeurs
- Dessin sms copier coller zizi ✓ - Forum Réseaux sociaux
- Liste déroulante excel - Guide
- Copier coller pdf - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Si et excel - Guide
2 réponses
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
2 avril 2016 à 16:37
2 avril 2016 à 16:37
Bonjour Namy, bonjour le forum,
Le peu d'explications données ne me permet de te proposer qu'un code générique à adapter à ton cas :
Ouvre un classeur vierge, copie ce code dans un module standard, enregistre-le dans le même dossier que celui où se trouvent les autres classeurs (les bases) avec l’extension .xlsm.
Attention ! Le code implique que seules les bases et ce classeurs se trouvent dans le même dossier. Aucun autre fichier Excel ne peut s'y trouver sous peine d'erreur ou de plantage...
Le peu d'explications données ne me permet de te proposer qu'un code générique à adapter à ton cas :
Sub Macro1() Dim CC As Workbook 'déclare la variable CC (Classeur Cible) Dim OC As Worksheet 'déclare la variable OC (Onglet Cible) Dim F As String 'déclare la variable F (Fichiers) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet Source) Dim PL As Range 'déclare la variable PL (PLage) Dim DEST As Range 'déclare la variable DEST (cellule de DESTination) Set CC = ThisWorkbook 'définit le classeur cible CC Set OC = CC.Sheets(1) 'définit l'onglet cible OC (à adapter) F = Dir(CC.Path & "\*.xls?") 'définit le fichier F (premier fichier Excel du dossier contenant ce classeur) Do While F <> "" 'boucle tant qu'il existe des fichiers If Not F = CC.Name Then 'condition : si F n'est pas ce classeur Workbooks.Open (F) 'ouvre le fichier F Set CS = ActiveWorkbook 'définit le classeur source CS Set OS = CC.Sheets(1) 'définit l'onglet source OS (à adapter) Set PL = OS.Range("A1:L1") 'définit la plage PL (à adapter, peut aussi être PL=OS.Rows(1)) 'définit la cellule de destination DEST (A1 si A1 est vide, 'sinon la première cellule vide de la colonne 1 (=A) de l'onglet cible OC (à adapter) Set DEST = IIf(OC.Range("A1").Value = "", OC.Range("A1"), OC.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)) PL.Copy DEST 'copy la plage PL dans DEST CS.Close 'ferme le classeur source End If 'fin de la condition F = Dir 'redéfinit le fichier F (prochain fichier Excel du dossier contenant ce classeur) Loop 'boucle End Sub
Ouvre un classeur vierge, copie ce code dans un module standard, enregistre-le dans le même dossier que celui où se trouvent les autres classeurs (les bases) avec l’extension .xlsm.
Attention ! Le code implique que seules les bases et ce classeurs se trouvent dans le même dossier. Aucun autre fichier Excel ne peut s'y trouver sous peine d'erreur ou de plantage...
4 avril 2016 à 11:08
Merci pour votre aide.
J'ai essayé d'adapter le code mais j'ai un souci avec la déclaration de l'onglet. Lorsque je lance le programme, un message d'erreur s'affiche au niveau de cette déclaration
J'ai remplacé dans la parenthèse le nom de l'onglet mais il ne reconnait pas.
Pour détailler un peu plus ma problématique :
j'ai en fait une centaine de sujets et chaque sujet a un fichier excel contenant des mesures dans différents onglets.
J'ai envie de regrouper certaines mesures de ces sujets dans un seul classeur donc créer une nouvelle base.
Les mesures se trouvent dans un onglet qui porte le même nom dans chaque classeur et dans la même plage à savoir J2:AP2.
Je veux alors pour chaque sujet donc pour chaque classeur aller dans l'onglet, récupérer cette plage et la copier dans un nouveau classeur , les uns après les autres.
Au final chaque ligne de mon nouveau classeur correspond à la plage de mesure d'un sujet.
Ci dessous le code adapté à ma problématique avec l'erreur que j'ai exposé ci-dessus
Merci encore pour votre aide
A+