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