Bonjour,
généralement, si on a besoin d'effectuer un traitement comparable sur un grand nombre d'object, on utilise des boucles.
Par exemple si on veut appliquer le même traitement à tous les fichiers d'un dossier:
Sub appel()
dim fs as Object
dim reffolder a Object
set fs=CreateObject("Scripting.FileSystemObject")
set reffolder=fs.getFolder("D:................)<- chemin du dossier entre " et ()
Call Boucle(reffolder)
end sub
Sub Boucle(reffolder As Object)' parcours tous les fichiers sous le dossier
Dim liste_dossiers
Dim liste_fichiers
Dim refdossier As Object
Dim reffichier As Object
Set liste_dossiers = reffolder.subfolders 'descente récursive de sous-dossier en sous-dossier
For Each refdossier In liste_dossiers
Call Boucle(refdossier)
Next
Set liste_fichiers = reffolder.Files
For Each reffichier In liste_fichiers 'on passe tous les fichiers en revue
Call Fonction_qui_fait_ce_qu'il faut_sur_fichier(reffichier) 'traitement d'un
fichier
Next
End Sub
(Attention, il y a peut-être plus simple.)
Evidemment, il faut pouvoir exprimer l'ensemble des actions à appliquer sur chaque fichier par un seul et même code, ce qui n'est pas toujours évident.
Ensuite, il faut être capable de définir l'ensemble des Objects à traiter.
Il ya alors le cas où ces objects forment déjà un groupe facilement définissable et identifiable (exemple:fichiers contenus dans un dossier, ensemble des classeurs ouverts, etc.)
Dans ce cas, la définition du groupe est plutôt courte et rapide à écrire et l'identification par le système des objects appartenant à ce groupe est relativement instantanée.
Il y a aussi le cas où le groupe est facilement définissable mais plus long à identifier par le système (exemple: tous les fichiers crées lors des trentes derniers jours.)
Pour la définition, je pense qu'un pro d'excel sur ce forum pourrait nous faire ça en une ligne.
En revanche, le système devrait identifier les objects appartenant à cet ensemble à chaque exécution.
.......................................................................................................................
Je place ici une disgresion de mon propos au sujet d'une question annexe qui m'a traversé l'esprit il y a quelques secondes:
C'est au sujet du groupe de fichiers créés lors des trentes derniers jours.
Approche1: on recherche tous les fichiers créés lors des trentes derniers jours. On identifie le groupe qu'ils forment. On execute la fonction-traitement sur les fichiers de ce groupe.
Approche2: on execute la fonction sur tous les fichiers de l'univers. dans la fonction on fait un test:
Si fichier créé il y a plus de trentes jours alors:
sors de là tout de suite.
sinon:
bosse, fonction fainéante!
etc.
Questions: 1)A priori, quelle est l'approche la plus efficace?
2) La fonction vba est-elle susceptible?
Remarquez que les deux approches peuvent être combinées.
........................................................................................................................
Les matheux pourraient aussi nous rappeler qu'un ensemble peut être défini à partir de considérations particulières vis à vis de plusieurs ensembles (unions, intersections, complémentaire)
ps: 1) Mon petit doigt me dit que le premier matheux à passer sur ce fil va prendre le temps de me répondre pour dire que ma phrase est complètement fausse.
2) Et je présente mes excuses à tous ceux qui ont un mauvais souvenir de leur cours de math.
Enfin, il y a le cas le plus pessimiste où, rien n'y fait, vous êtes obligé de définir le groupe à la main; par exemple, en entrant dans le code les "chemins" de tous les fichiers concernés. Si le nombre de fichiers s'exprime au-delà des centaines, vous risquez d'y passer du temps (solution: avoir un ami dévoué...)
En revanche, si vous devez exécuter le programme plusieurs fois, l'ensemble sera facilement identifiable par le système.
Si vous êtes dans le dernier cas, que votre programme doit s'exécuter tous les jours, mais que les fichiers à traiter change à chaque fois, alors il vaut mieux trouver un moyen de ne plus être dans le dernier cas (solution ultime: poster un message sur ce forum.)
Pour en venir à un cas plus particulier par rapport à mon message précédent sur ce fil. Si on a une grande quantité de fichiers à traiter, alors le temps pris par l'ouverture de ces fichiers peut à la fin être conséquent.
Or, l'on peut voir sur ce forum qu'il est possible de récupérer des données sur un fichier sans l'ouvrir.
Mais cela ne veut pas dire que l'on peut tout faire sans jamais ouvrir de fichiers.
Amicalement,
Florian