Gestion de plusieurs fichiers Excel. - VB/VBA/VBS - Programmation
Marsh Posté le 11-07-2007 à 10:54:47
La fonction Dir() permet de récupérer la liste des fichiers d'un répertoire avec la possibilité d'utiliser des caractères génériques (? *)
Le sujet est abordé régulièrement sur le forum.
Le problème est qu'on ne peut pas faire un filtre entre bornes avec Dir()
Il faudrait donc plus probablement récupérer dans un tableau tous les noms de fichiers (avec Dir() quand même), transformer la date du fichier en date exploitable par VB (-> CDate(Mid$(...)) ) et filtrer ensuite par rapport à la période saisie.
Marsh Posté le 11-07-2007 à 13:04:17
Comment sont dénommés les fichiers à traiter ?
Ces noms comportent-ils une date et sous quelle forme ? Fichier_20060101.xls ?
Ou est ce la date de création, modification qui doit être prise en compte ?
Marsh Posté le 11-07-2007 à 14:18:07
Hello tegu et kiki29,
Merci à vous deux de vous pencher sur mon problème.
>tegu
Ma réponse st tardiev désolé mais j'étais en train de me reseigner sur la fonction Dir() et CDate().
Pour la fonction Dir, je ne saisi pas comment je peux lister l'intégrale de tous mes fichiers, dans l'aide il me dise que Dir ne renvoi que le premier fichier trouvé, mais si on veut les autres fichiers il faut rappeler la fonction. Mais comment faire si on ne connait pas le nombre exact de fichiers qui composent le classeur.
>kiki29
Mes fichiers sont sous la forme jj-mm-aaaa lot n°............xls.
Merci !
Julien.
Marsh Posté le 11-07-2007 à 14:48:32
Hello tout le monde,
Pour la fonction Dir c'est bon, j'ai pu récuperer tous les fichiers de mon répertoire. (un simple tant que suffisait...)
Par contre j'ai lu l'aide, mais pourquoi faut il que j'utilise un CDate??
Marsh Posté le 11-07-2007 à 16:29:04
Tu vas extraire du nom de tes fichiers la date qui leur est associée (jj-mm-aaaa) par un mid$() ou un truc du genre, puis stocker cette date dans une variable de type Date grâce à CDate().
C'est le meilleur moyen de pouvoir faire des traitements de comparaison de dates (entre bornes pour ton cas).
Marsh Posté le 11-07-2007 à 16:37:04
Re tegu,
D'accord je comprends mieu pourquoi utiliser CDate mais uen fois que j'aurai à part dans uen variables toutes les dates extraites ensuite comment je reviens à mes lignes contenant le nom des différents fichiers pour savoir lesquels suprimer?
Marsh Posté le 11-07-2007 à 17:32:30
Si tu stockes les noms des fichiers dans un tableau en remplissant une zone de celui-ci avec la conversion de date pour chacun des fichiers, tu vas t'en sortir.
Marsh Posté le 11-07-2007 à 19:26:59
avec cette structure c'est faisable à mon avis
Set fs = CreateObject("Scripting.FileSystemObject" )
Set f = fs.GetFolder(specdossier)
Set fc = f.Files
For Each f1 in fc
...tu verifie que ca appartient à la période et tu copie
Next
faut voire
Marsh Posté le 12-07-2007 à 10:21:27
Hello tegu et 86vomito33,
Merci pour vos conseils,
> et ensuite Tegu je fais une sorte de tri personnalisé où je selectionne les colones avec les dates compatibles et je supprimes les dates n'appartenant pas à la période. c'est ça ?
>86vomito33, je vais essayer ta fonction mais je ne comprend pas ce que dois faire de For Each f1 in fc???
Merci.
Marsh Posté le 12-07-2007 à 11:17:00
Dans le code de 86vomito33, fc est la collection des fichiers récupérés.
f1 étant un objet fichier, la syntaxe « for each f1 in fc » signifie qu'il boucle dans la collection des fichiers et à chaque itération copie un objet fichier dans f1.
Donc pour chaque f1 tu pourras lire son nom, en extraire la date (comme je te l'ai dit), puis comparer cette date à ta période, et enfin choisir si tu dois exploiter ce fichier.
C'est plus clair ?
Marsh Posté le 12-07-2007 à 11:53:58
Re tegu,
Donc si j'ai bien compris c'est dans la boucle For il faudra que je sorte la date du fichier et que je la compare avec la période.
Mais existe t'il uen fonction en VBA qui compare toute seule des dates? ou bien dois je reprendre par exemple un code que me donnera un enregistrement de macro sur un filtre personnalisé?
Merci tegu pour ton aide c'est super sympa.
Julien.
Marsh Posté le 12-07-2007 à 13:40:06
Si je te dis de convertir au format Date c'est que la comparaison entre deux variable de type Date se fait aussi simplement qu'entre deux nombres : If date1 > date2 Then...
Tu devrais un peu te renseigner sur le langage que tu utilises, lire l'aide en ligne, et un bouquin. Ça t'éviterai de perdre du temps sur des notions de base.
Marsh Posté le 11-07-2007 à 10:25:33
Bonjour à toutes et à tous,
Tout d'abord je veux remercier ce forum qui continue est continuera à m'enlever de grosses épines du pied!!!
Merci à toutes et à tous pour votre patience et vos idées!
Aujourd'hui je suis confronté à un problème de haut niveau (en tout cas pour moi!) .
Je dispose d'un dossier contenant un certain nombre de fichier Excel, tous renomés sous la forme "lot n°xxxxxxx ../../2006" ou (2007).
Mon but serai de creer par macro, une application qui demanderait à l'utilisateur période qu'il souhaiterai se voir afficher (il taperait donc par ex: 11/05/2006 jusqu'a 11/06/2007) et ensuite irait selectionner les fichiers correspondant à la période pour copier dans chaque fichier 3 cellules se trouvant sur la meme feuille, pour les coller dans un autre nouveau classeur.
Un affichage des valeurs via graphique se fera dans un autre temps.
J'ai déjà lu l'excellent lien de kiki29 qui concerne à peu près le même type d'application mais je n'y comprend malheureusement pas grand chose :
http://forum.hardware.fr/hfr/Progr [...] 0232_1.htm
La première étape serait déja de savoir la dynamique que mon programme doit avoir, mais je n'ai strictement aucune idée de par où commencer!
Première question: Comment je peux faire pour selectionner les fichiers voulu?
Si quelqu'un à une idée, une suggestion, ou même un lien qui parlerait de la même chose qu'il n'hésite pas.
Merci d'avoir lu ce long post et merci d'avance.