Bonjour,
J'ai créé une macro dans un fichier dit de gestion, permettant d'aller récupérer des informations dans des fichiers remplis par des utilisateurs, qui sont formatés de telle sorte à ce que les informations à récupérer soient bien toujours aux mêmes endroits (même nom d'onglet, mêmes cellules).
Pour chaque utilisateur qui aura déposé son fichier dans le répertoire commun, je récupère (manuellement) le nom que je reporte dans mon fichier de gestion (ligne 2, colonnes 11, 13, 15...).
La macro permet ensuite d'ouvrir chacun des fichiers correspondant à ce nom, puis d'aller copier les données saisies par l'utilisateur, et de les coller dans le fichier de gestion. Comme certains utilisateurs peuvent ne remplir qu'une partie des champs et renvoyer d'autres données ultérieurement, je fais un test sur la présence d'information dans mon fichier de gestion : je n'écrase donc pas une information qui aurait été saisie auparavant.
Tout cela fonctionne bien, mais j'ai quand même l'impression que mon code est lourd (même si le temps d'exécution avec 2 fichiers test est assez raisonnable, je me pose la question quand j'en aurai 50 ou plus...). Y'a-t-il moyen de l'optimiser ? Est-ce que ce sont les ouvertures de fichiers qui sont longues ?
Par avance, merci pour vos suggestions.
Voici le code en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 Sub BoucleFichiers() Dim CheminP As String, NomFichierGestion As String Dim NomP As String Dim i As Integer Dim FichierGestion As Workbook Dim OngletGestionRes As Worksheet Dim NomFichierP As String Dim FichierPro As Workbook Dim OngletP As Worksheet Application.ScreenUpdating = False 'Définit le répertoire contenant les fichiers CheminP = "C:\MonRep\" NomFichierGestion = ThisWorkbook.Name Set FichierGestion = ThisWorkbook Set OngletGestionRes = FichierGestion.Worksheets("Rés") OngletGestionRes.Unprotect 'Boucle sur tous les fichiers xls du répertoire. NomFichierP = Dir(CheminP & "*.xls*") Do While Len(NomFichierP) > 0 i = 11 Do While OngletGestionRes.Cells(2, i).Value <> "" NomP = OngletGestionRes.Cells(2, i).Value If NomFichierP Like "*" & NomP & "*" Then Workbooks.Open Filename:=CheminP & NomFichierP Set FichierPro = ActiveWorkbook Set OngletP = FichierPro.Worksheets("Donnees a recup") For lig = 3 To 38 If OngletGestionRes.Cells(lig, i) = "" Then OngletGestionRes.Cells(lig, i) = OngletP.Cells(lig + 3, 7) OngletGestionRes.Cells(lig, i + 1) = OngletP.Cells(lig + 3, 8) End If Next ' Récupération des 2 autres données intéressantes OngletGestionRes.Cells(55, i) = OngletP.Cells(2, 9) OngletGestionRes.Cells(56, i) = OngletP.Cells(3, 9) FichierPro.Close End If i = i + 2 Loop NomFichierP = Dir() Loop OngletGestionRes.Protect Application.ScreenUpdating = True End Sub
Partager