[Excel/VBA]Utilisation de .Close avec Scripting.FileSystemObject

Utilisation de .Close avec Scripting.FileSystemObject [Excel/VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 29-09-2010 à 10:45:17    

Bonjour !
 
Voila, je suis en train de créer un fichier excel de "monitoring". Ce fichier utilise plusieurs macro afin de récupérer des infos venant de plusieurs fichiers Excel différents.
 
Pour cela, j'utilise la fonction "Scripting.FileSystemObject" afin de parcourir mes différents fichiers et récupérer les datas qui m'intéressent.
Le fonctionnement global est le suivant :  
 
 

Code :
  1. Set Fso = CreateObject("Scripting.FileSystemObject" )
  2. Set NomDossier = Fso.GetFolder(FolderFichiersExcelAParcourir)
  3. For Each objFichier In NomDossier.Files
  4.    ActiveWorkbook.Sheets(FEUILLE1).Cells(FEUILLEDESTINATION, 2).Value = objFichier.Name
  5.    """
  6.    """
  7.    """
  8. Next objFichier


 
 
Mes infos sont bien récupérées et tout fonctionne bien, SAUF le fait que tous ces fichiers Excel que je parcoure semblent rester ouverts en "fond" après l'éxecution de la macro. Si je ne quitte pas le fichier de monitoring d'où sont qui récupére les infos, je ne peux ouvrir les autres fichiers Excel qui sont parcourus qu'en Lecture seule.
 
J'ai tenté de mettre :  
                          NomDossier.Close
En fin de fonction, avant ou après le Next mais VB me sort une  erreur : "Object doesn't support this property or method
 
Quelqu'un aurait une idée de la manière de procéder ?
Merci d'avance ! :)


Message édité par hyperboleske le 29-09-2010 à 11:04:23
Reply

Marsh Posté le 29-09-2010 à 10:45:17   

Reply

Marsh Posté le 30-09-2010 à 11:33:29    

Set NomDossier = Nothing
Set Fso = Nothing
 
Il doit manquer un truc dans ton code présenté, où et comment ouvres tu ces fichiers ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-09-2010 à 12:47:04    

Non non, le code se limite à ça pour aller chercher les infos dans les fichiers. Quand ils sont ouverts, c'est "en tâche de fond". Ils n'apparaissent pas sous Excel. Le reste du code se limite à attribuer des valeurs à des cellules.
 
j'ai posé la question sur un autre forum et la réponse m'a été donnée. Il faut rajouter : Application.Workbooks(objFichier.Name).Close False juste avant le Next objFichier :)
 

Reply

Marsh Posté le 30-09-2010 à 14:01:31    

Hum ok j'avais pas lu entierement ton code, tu ne récuperes que le nom du fichier ou elements de ce genre ? Rien a l'interieur du fichier ? valeurs de cellules etc ?
 
Dans tous les cas, il faut qd meme tuer tes variables NomDossier et Fso

Message cité 1 fois
Message édité par SuppotDeSaTante le 30-09-2010 à 14:04:40

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-09-2010 à 14:30:14    

SuppotDeSaTante a écrit :

Hum ok j'avais pas lu entierement ton code, tu ne récuperes que le nom du fichier ou elements de ce genre ? Rien a l'interieur du fichier ? valeurs de cellules etc ?
 
Dans tous les cas, il faut qd meme tuer tes variables NomDossier et Fso


 
En entrée, j'ai le nom du répertoire dans lequel se trouvent les fichiers à parcourir. La boucle For Each objFichier In NomDossier.Files/NextobjFichier  parcours chaque fichier et je connais la feuille et les coordonnées des cellules à regarder (identiques pour chaque fichier).
 
Je vais rajouter le kill de ces variables :jap:  (et pour info, quelle est l'utilité de le faire ? vider la mémoire ? :) )


Message édité par hyperboleske le 30-09-2010 à 14:30:22
Reply

Marsh Posté le 30-09-2010 à 14:43:25    

Donc si tu regardes des cellules, en effet tes fichiers s'ouvrent.
 
Avec le code que tu as mis ici, ca n'ouvre pas le fichier, ca recupere juste le nom du fichier (sans l'ouvrir) avec la propriete Name de Files, elle meme de GetFolder, qui decoule de Scripting.FileSystemObject. Aucun rapport avec Excel.
Ce genre de chose marche tres bien dans un VBS par exemple.
 
"Vider" la mémoire, oui, mais pour ce genre d'objet, il le fait presque tout seul a tous les coups en sortant de la fonction ou de la procédure.
C'est surtout pour des objets plus chiants (OLE, thread enfants etc.), ca te donne l'habitude de t'en servir.


Message édité par SuppotDeSaTante le 30-09-2010 à 14:45:22

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 02-10-2010 à 11:04:41    

Salut, voir sur http://forum.hardware.fr/hfr/Progr [...] 0026_1.htm et sans doute adapter

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed