Problème de ram dans une boucle vba
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:
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 |