VBA Appliquer sur chaque feuille

Résolu/Fermé
NeedHelp - 23 oct. 2018 à 14:49
 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



A voir également:

6 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
24 oct. 2018 à 09:31
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
2
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
24 oct. 2018 à 10:08
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 23 oct. 2018 à 15:31
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
0
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.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 oct. 2018 à 15:43
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)

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 oct. 2018 à 16:42
OK, sois patient mais le cas m'intéresse ! :-)
0
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!!!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
24 oct. 2018 à 10:15
Je vais compléter le code cette après-midi et je posterai le code fini si quelqu'un en aurait besoin.

NON
0
D'accord je ne le posterais pas, en tout cas encore un grand merci!!!!
0