Menu

VBA Appliquer sur chaque feuille [Résolu]

- - Dernière réponse :  NeedHelp - 24 oct. 2018 à 10:18
Bonjour,

J'ai besoin d'appliquer cette macro sur toute les feuilles du classeur ( de la feuille 2 à la feuille 7)
Pour le moment elle s'applique à la feuille 2 du classeur source et du classeur destination.
J'ai réussi avec un for i = 2 to 7 next i, le soucis c'est qui ça ouvrait 6 fois tout les classeurs! ca rendait l'opération bien trop lourde et longue. Je suis débutant en vba j'ai peut-être mal utilisé le for i = 2 to 7 next i.

En vous remerciant d'avance pour votre aide.

Option Explicit
Dim L As Integer
Dim BDD As FileDialog 'déclare la variable BDD (Boîte de Dialogue Dossier)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim FS As String 'décalre la variable FS (Fichier Source)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim DEST As Range 'déclare la variable DEST (celllue de DESTination)



Sub Données()
'le chemin d'accès
CA = "S:\DIEPA\Equipes\IEPA\01_Commun\00. ADMIN - SECRETARIAT\PROJETS\Projet mouvement IEPA\2.0\"
Set CD = ThisWorkbook 'définit la classeur destination CD
Set OD = CD.Sheets(2) 'définit l'onglet destination OD
FS = Dir(CA & "*.xlsm") 'définit le premier fichier source Excel contenu dans le dossier ayant CA comme chemin d'accès
Do While FS <> "" ' exécute tant qu'il existe des fichiers source
Workbooks.Open CA & FS 'ouvre le fichier source FS
Set CS = ActiveWorkbook 'définit la classeur source CS
Set OS = CS.Worksheets(2) 'définit l'onglet source OS
'définit la cellule de destination DEST (première cellule vide de la colonne A)
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
L = OS.Range("A" & Rows.Count).End(xlUp).Row + 1 'La variable qui trouve la dernière ligne
OS.Range("A11" & ":J" & L).Copy DEST 'copie la plage de l'onglet source et la colle dans DEST

CS.Close False 'ferme le claseru source CS (sans enregistrer)
FS = Dir 'définit le prochain fichier source excel du dossier ayant CA comme chemin d'accès
Loop 'boucle
End Sub



Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
15691
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 février 2019
3615
2
Merci
Bonjour,

2 choses préalables:
il faut enlever les accents sur les noms d'onglet dans les fichiers source.
la technologie employée est puissante et rapide (ADO-SQL) mais ne reconnait les accents ni les espaces

j'ai travaillé sur 2 fichiers source avec 2 onglets (arrivée et visite), à toi de compléter le code pour les 7 fichiers source et cible.


https://mon-partage.fr/f/jIaNilP0/

nota: ne pas ouvrir le zip mais l'extraire

Dire « Merci » 2

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 56240 internautes nous ont dit merci ce mois-ci

michel_m
Messages postés
15691
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 février 2019
3615 -
edit:
1/avant de tester, remplace mon chemin d'accès par le tien !

2/avant la ligne finale
msgbox "compilation terminée",
insère cette ligne
application.screenupdating=True
Commenter la réponse de michel_m
Messages postés
15691
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 février 2019
3615
0
Merci
Bonjour


Il y a bien 6 classeurs source qui vont alimenter chacun 1 feuille/source dans le classeur cible ?

Au départ, quelle est le première ligne vide dans chaque feuille du classeur cible ?

quel est le nom de sheets(2 ) dans la source ? feuil2 ?

questions car je te propose de travailler avec les classeurs sources restant fermés
Commenter la réponse de michel_m
0
Merci
Non il y a un nombre variable de classeur, tous dans le même répertoire, ca ca fonctionne.
Ils ont tous la feuil2, feuil3, feuil4, feuil5, feul6 et feuil7
Dans le classeur destination, on a pareil feuil2, feuil3, feuil4, feuil5, feul6 et feuil7.
Le classeur destination est alimenté en feuil2 par toute les feuil2 de chaque classeur source. ( ce que fait le code que j'ai mis)

J'aimerais faire cette opération pour la feuil3 etc..
Pour le moment j'y suis parvenu uniquement en lançant l'opération 6 fois (pour chaque feuille), le problème est que ça ouvre 6 fois chaque classeur!! Le but c'est que quand j'ouvre le classeur X il copie directement toutes les feuilles du classeur et qu'il poursuive l'opération sur les autres classeur.

Merci pour ton intérêt.
J'espère avoir réussi à m'exprimer pas si simple haha.
Commenter la réponse de NeedHelp
Messages postés
15691
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 février 2019
3615
0
Merci
OK, mais j'ai ajouté d'autres questions dans mon message + haut

Au départ, quelle est le première ligne vide dans chaque feuille du classeur cible ?

quel est le nom de sheets(2 ) dans la source ? feuil2 ?


encore 1 question:
dans la source feuille2 il y a t'il des ent^tes au dessus de la ligne 11?

j'ai l'algo en t^te, j'espère te proposer un truc demain pm (occupé ailleurs)

Commenter la réponse de michel_m
0
Merci
La première ligne vide de chaque feuille est la ligne 11 sur le classeur cible.
D'ailleurs elle est aussi la première ligne de donnée dans les classeurs sources.

Sur toute les feuilles pareil de chaque classeur, "en-tête" de la ligne 1 à la ligne 10.

Pour le nom des feuilles, elles sont dans tous les classeurs (cible + sources) comme ceci:
Sheets(1) page d'accueil
Sheets(2) Sheets(3) Sheets(4) Sheets(5) Sheets(6) Sheets(7) Feuilles sur lesquels je travailles.

Si tu as besoin des noms exact c'est pour les classeurs sources:

Accueil; Visite; Arrivée; Départ; Hospitalisation; Vacances; Appartement
(dans l'ordre de 1 à 7)

Pour le classeur destination:
Contrôle; Données visite; Données arrivée; données départ; données hospitalisation; donnée vacances; donnée appartement

Les premières feuilles des classeurs ne font pas "partie de la macro"

Un très grand merci pour ton temps.
J'attend avec impatiente ta proposition.
michel_m
Messages postés
15691
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 février 2019
3615 -
OK, sois patient mais le cas m'intéresse ! :-)
Commenter la réponse de NeedHelp
0
Merci
Ouaaah c'est génial!!
Un très très grand merci michel_m !!

Je vais compléter le code cette après-midi et je posterai le code fini si quelqu'un en aurait besoin.


Encore un grand merci ça va faciliter énormément mon travail et celui de mes collègues!!!
michel_m
Messages postés
15691
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 février 2019
3615 -
Je vais compléter le code cette après-midi et je posterai le code fini si quelqu'un en aurait besoin.

NON
D'accord je ne le posterais pas, en tout cas encore un grand merci!!!!
Commenter la réponse de NeedHelp