Bonjour les amis,
je rencontre un petit soucis sur une macros.
J'ai un dossier dans lequel j'ai 74000 fichiers.
je veux y faire quelque recherche (methode find)puis classé les valeurs dans un autre fichier.xlsm.
Le soucis c'est que sur chaque ouverture de fichier la mémoire s'agrandit et arrive a saturation au bout du 2400e fichier traiter.
Je ferme chaque fichier ouvert une fois la boucle de traitement fini mais la ram continue d'augmenter.
Je cherche une raison à cela mais je ne trouve rien je viens donc faire appelle à vos compétence.
voici la macro que j'ai réalisé.
A savoir la partie compteur de boucle, je l'ai mise simplement pour savoir sur quel numero de fichier traité la boucle bug.
merci d'avance les amis.
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 Sub lok() Dim sf As Object 'déclare la variable sf (Système de Fichiers) Dim ca As String 'déclare la variable ca (Chemin d'Accès) Dim d As Object 'déclare la variable d (Dossiers) Dim fs As Object 'déclare la variable fs (FichierS) Dim f As Object 'déclare la variable f (Fichier) Dim cl As Workbook 'déclare la variable cl (CLasseur) Dim exercice As Workbook 'déclare la variable exercice 'variable code de traitement Dim c As Range Dim TaValeur As String Application.ScreenUpdating = False ca = "C:\wamp64\www\annuaire_mairie\annuaire_txt" 'définit le chemin d'accès (à adapter à ton cas)' Set sf = CreateObject("Scripting.FileSystemObject") 'définit le système de fichiers sf Set d = sf.GetFolder(ca) 'définit le dossier d Set fs = d.Files 'définit les fichiers fs For Each f In fs 'boucle sur tous les fichiers f Workbooks.Open (ca & "\" & f.Name) 'ouvre le fichier Set cl = ActiveWorkbook 'définit le classeur cl (la variable cl sera utilisée pour le traitement des données) 'ton code de traitement Workbooks("exercice.xlsm").Worksheets("traitement").Range("a2") = Workbooks("exercice.xlsm").Worksheets("traitement").Range("a2").Value + 1 cl.Close SaveChanges:=FalseThen Set cl = Nothing Next f 'prochain fichier de la boucle End Sub
Partager