Traitements par lots

topo

XLDnaute Junior
Bonjour à tous!

J'aurais besoin d'un petit coup de main, mais je vous avouerais que je ne sais pas si c'est un problème de VBA ou d'Excel ...
Chaque trimestre je dois affecter deux macros à une cinquantaine de fichiers Excel.
Les Macros sont enregistrés en .xla et directement au démarrage de Excel.

Est-il possible de demander à Excel de faire un traitement par lots (comme dans Photoshop un peu) où je lui indique l'emplacement des fichiers à retraiter et les macros à utiliser ? Comme ça, une fois ces informations données, il mouline tout seul.

Merci beaucoup.
 

topo

XLDnaute Junior
Re : Traitements par lots

re salut James007

Merci, mais t'inquiète, je ne suis pas à la seconde !!!
Mais je dois t'avouer un truc, ma macro pour l'instant ne fonctionne absolument pas !!!!
Elle analyse bien le nombre de fichiers que j'ai dans mon dossier, mais elle se lance que sur un seul des fichiers : si j'ai 10 fichiers et je lance la macro, elle va faire 10 fois la manip sur le même fichier.

Je pense que la solution est bien de lui mettre une boucle aussi pour les fichiers: ouverture, lancement de la macro, enregistrement, fermeture, ouverture du fichier suivant ...
Mais là, ça dépasse mes compétences, et de loin !!!!

Merci beaucoup de ton aide!
 

youky(BJ)

XLDnaute Barbatruc
Re : Traitements par lots

Bonjour à vous tous,
J'ai une solution et l'envie me tente trop pour ne pas la donner.
Dans la macro changer MesXls par le nom du fichier qui contiens la macro.
Tous les classeurs doivent être dans le même répertoire sinon changer Dossier=?????
DisplayAlerts peut être supprimé ...ceci pour éviter les messages
PHP:
Sub boucle()
Dim Dossier As String, Fichier As String
Dossier = ThisWorkbook.Path & "/" 'si dans mm répertoire
Fichier = Dir(Dossier & "*.xls")
Application.DisplayAlerts = False
Do While Fichier <> ""
If Fichier <> "MesXls.xls" Then 'Ne pas ouvrir ce fichier
Workbooks.Open Dossier & Fichier
'MsgBox Fichier & " ouvert"
Application.Run "nettoyage"
Workbooks(Fichier).Close
End If
Fichier = Dir
Loop
Application.DisplayAlerts = True
End Sub
 

James007

XLDnaute Barbatruc
Re : Traitements par lots

Bonjour Topo,

Dans ton code, tu utilises la boucle
Code:
For I = 1 To nfic
mais elle t'impose que le nom des fichier soit connu et incrémenté ...

Or, dans to cas, si j'ai bien compris, ce n'est pas le cas ... d'où la nécessité que tu utilises une boucle du genre
Code:
For Each Dossier In oApp.Namespace(NomComplet).Items
soit oApp = Object Application
avec .Namespace pour définir l'espace visé
de NomComplet pour le Chemin défini
et chacun des Items ... donc des dossiers contenus dans cet espace...

J'espère que c'est plus clair ...
Si tu as encore des obstacles, tu re-postes ton code ...

A+
 

topo

XLDnaute Junior
Re : Traitements par lots

Merci à tous les deux!

Youky, ta macro marche très bien, la seule différence, avec celle d'avant, c'est qu'elle doit être dans le même dossier, alors que l'autre peut se lancer à n'importe quelles conditions.

James007, je veux quand même finir celle qu'on a commencé; il ne me manque plus qu'une chose je pense pour que ça marche, c'est définir le dossier :
Sub Nettoyage_dossier()
Dim fic() ' liste des fichiers à l'aide du File Object System (FSO)
Set fso = CreateObject("Scripting.FileSystemObject")
Chemin = "C:\Documents and Settings\jbav\Mes Documents\Liasses à transformer" ' chemin à modifier
Set Folder = fso.GetFolder(Chemin)
Set collfic = Folder.Files
tempname = "xxxxx.xxx"
nfic = collfic.Count
ReDim fic(nfic + 1)
n = 0 ' tableau des fichiers du répertoire "Chemin"
For Each curfic In collfic
n = n + 1
fic(n) = curfic.Name
Next ' ajout d'un \ en fin de Chemin
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
z = 0
For Each Dossier In oApp.Namespace(Chemin).Items
Application.Run "nettoyage"
Next
End Sub

Merci à tous les deux
 

James007

XLDnaute Barbatruc
Re : Traitements par lots

Je crois encore une fois que c'est uniquement dans la définition de tes variables qu'il y a un tout petit hic ...
Code:
Dim fso As Scripting.FileSystemObject
Dim Folder As Scripting.Folder
Dim fso_file As Scripting.file

Set fso = New Scripting.FileSystemObject
Set Folder = fso.GetFolder(Chemin)
Set fso = CreateObject("Scripting.FileSystemObject")
For Each fso_file In Folder.Files  ' ou collFic si tu veux,si collFic = Folder.Files
....

Il faudrait que tu essayes ce code ...
A +
 

James007

XLDnaute Barbatruc
Re : Traitements par lots

Re

De rien , James
Je précise pour le fil que :
permet de ne pas cocher la référence à Microsoft Scripting Runtime dans VBE.
alors que la 1ère l'oblige ;)

...Décidément ... je vais rentrer me coucher ...;)
j'ai en plus oublié de signaler qu'il faut l'usage de la librairie scrrun.dll ... et comme tu le dis, dans VBE Outils Références : cocher MS scripting runtime ...

A +
 

topo

XLDnaute Junior
Re : Traitements par lots

ah, je me disais aussi, ça marchait pas ... lol

bon j'ai rien compris à votre petite conversation, mais j'ai l'impression que vous êtes d'accord!

James007, je ne sais pas vraiment où rentrer tes écritures dans le programme, est-ce que tu peux me montrer où tu les insères dans la macro complète?

Merci bcp!
 

topo

XLDnaute Junior
Re : Traitements par lots

alors, voici en première partie le code à auj.

PHP:
Sub Nettoyage_dossier()
Dim fic() ' liste des fichiers à l'aide du File Object System (FSO)
Set fso = CreateObject("Scripting.FileSystemObject")
Chemin = "C:\Documents and Settings\jbav\Mes Documents\Liasses à transformer" ' chemin à modifier
Set Folder = fso.GetFolder(Chemin)
Set collfic = Folder.Files
tempname = "xxxxx.xxx"
nfic = collfic.Count
ReDim fic(nfic + 1)
n = 0 ' tableau des fichiers du répertoire "Chemin"
For Each curfic In collfic
n = n + 1
fic(n) = curfic.Name
Next ' ajout d'un \ en fin de Chemin
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
z = 0
For Each Dossier In oApp.Namespace(Chemin).Items
Application.Run "nettoyage"
Next
End Sub

D'après le peu que je comprends, il manque à définir quelques trucs, mais je sais pas à quel niveau.

La macro est sensé fonctionner comme ça :
- elle ouvre le premier fichier situé dans le répértoire "C:\Documents and Settings\jbav\Mes Documents\Liasses à transformer".
- elle active la macro nettoyage (nettoie les cellules jaunes) que j'ai dans mon excel.
- elle enregistre
- elle ferme le fichier
- elle ouvre le suivant dans le dossier et fait la même manip pour la totalité des fichiers

J'espère qu'il y aura assez d'info. Tins moi au courant si tu as besoin d'autres choses ...

Merci
 

Pièces jointes

  • Classeur1.xls
    21.5 KB · Affichages: 31
  • Classeur1.xls
    21.5 KB · Affichages: 35
  • Classeur1.xls
    21.5 KB · Affichages: 58

James007

XLDnaute Barbatruc
Re : Traitements par lots

Le classeur que tu as posté ne contient pas ta macro nettoyage que tu devras donc rajouter ...
Mais ci-joint la macro qui lance le tout avec la référence VBE pour MS Scripting Runtime ...

A +
 

Pièces jointes

  • ClasseurTopo.xls
    21.5 KB · Affichages: 53

Discussions similaires

Statistiques des forums

Discussions
312 779
Messages
2 092 045
Membres
105 164
dernier inscrit
publd2