Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
711 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Archiver tous les fichiers différents d'un fichier précis

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Archiver tous les fichiers différents d'un fichier précis

n°2192058
val_ou
Posté le 29-05-2013 à 10:55:09  profilanswer
 

Bonjour à tous,
 
J'aimerais créer une macro qui m'archiverait tous les fichiers différents de celui du mois.
Actuellement, ma macro archive les fichiers du mois précédents à l'aide de variable.
 
Le soucis est que parfois je n'ai pas de fichier du mois précédent, mais de deux mois en arrière par exemple, ou bien des fichiers de décembre - et lorsque l'on sera en janvier, ça bloquera.
 
Ce que j'aimerais donc faire, c'est d'archiver tout ce qui n'est pas du mois.
 
Mes fichiers sont de la forme : NomFic = "FILE NAME" & Format(DateDeb, "MM-YY" ) & " to " & Format(DateFin, "MM-YY" ) & ".xlsx"
Sachant que mes variables étaient :  
DateDeb = DateSerial(Year(Date) - 1, Month(Date) - 1, 1)
DateFin = DateSerial(Year(Date), Month(Date) - 2, 1)
 
J'aimerais que mes nouvelles varialbes soient :
DateDeb = DateSerial(Year(Date) -1, Month(Date), 1)
DateFin = DateSerial(Year(Date), Month(Date) - 1, 1)
 
Et que les fichiers différents de NomFic soient archivés dans un Path donné.
 
J'ai essayé de créer une variable NomFic2 pour ensuite mettre mon chemin & NomFic2 mais ca ne fonctionne pas.
Je ne peux pas créer de variable Dim NomFic2 <> NomFic, donc j'ai testé un NomFic2 = "FILE NAME" & * & "xlsx", en pendant que l'étoile serait reconnu, mais non.
 
J'espère avoir été plutôt claire... Je ne sais même pas si c'est possible  :ange:  
Si vous avez une idée ... Merci d'avance :)

mood
Publicité
Posté le 29-05-2013 à 10:55:09  profilanswer
 

n°2192106
Marc L
Posté le 29-05-2013 à 15:30:19  profilanswer
 

 
           Bonjour,
 
           tout est quasiment possible quand tout est clair !
 
           Par exemple, archiver consiste en quoi précisément ?
           On aurait bien aimer voir la macro archivant le mois précédent …
           (en utilisant l'icône prévue à cet effet, sinon, comme d'autres, je zappe ‼)
 
           Sans boule de cristal, je peux juste conseiller de consulter l'aide de la fonction  Dir
           répondant bien au besoin de lister les fichiers d'un répertoire;
           reste ensuite à les comparer avec le nom du fichier du mois en cours afin de les archiver
 

n°2192224
val_ou
Posté le 30-05-2013 à 13:30:31  profilanswer
 

Bonjour,
Merci d'avoir prit le temps dé répondre.
 
Quand je parle d'archiver, c'est le fait que tous le mois mes fichiers sont enregistrés dans un dossier "FILE NAME". J'ai un sous dossier "archive", et j'aimerais qu'il n'y ait que la dernière version qui reste dans ce dossier.
 
Voici mon code actuel qui archive le fichier du mois précédent (et qui ne fonctionne pas en janvier, pour le fichier de décembre) :
 

Code :
  1. Dim NomFic As String
  2. Dim DateDeb As Date
  3. Dim DateFin As Date
  4. Dim Path As String
  5. Dim Path2 As String
  6. DateDeb = DateSerial(Year(Date) - 1, Month(Date) - 1, 1)
  7. DateFin = DateSerial(Year(Date), Month(Date) - 2, 1)
  8. NomFic = "FILE NAME " & Format(DateDeb, "MM-YY" ) & " to " & Format(DateFin, "MM-YY" ) & ".xlsx"
  9. Path = "\\chemin\...\" & NomFic
  10. Path2 = "\\chemin\...\Archives\" & NomFic
  11. FileCopy Path, Path2
  12. Kill Path


Message édité par val_ou le 30-05-2013 à 15:40:41
n°2192284
Marc L
Posté le 30-05-2013 à 17:10:59  profilanswer
 

 
           Ton code m'a l'air pas mal, pas de message d'erreur ?
 
           Si la problématique n'a pas changée, ma réponse précédente reste valable :
           parcours des fichiers un à un (Dir) puis comparaison avec le fichier du mois en cours pour l'archivage.
 

n°2192335
val_ou
Posté le 31-05-2013 à 09:47:39  profilanswer
 

Oui mon code fonctionne, pas de message d'erreur mais il ne traite que le mois précédent.
 
Avec la fonction DIR, je n'arrive pas à faire le copier coller des path vu qu'un fichier ce trouve sur un serveur, et que le chemin cible est sur un autre.
 
Mon code que j'ai essayé d'écrire est le suivant :
 

Code :
  1. Dim DateDeb As Date
  2. Dim DateFin As Date
  3. DateDeb = DateSerial(Year(Date) - 1, Month(Date) - 1, 1)
  4. DateFin = DateSerial(Year(Date), Month(Date) - 2, 1)
  5. Dim Path As String, Repertoire As String, Path2 As String, Fich As String
  6. Repertoire = "\\serveur\chemin\chemin\dossier\sous dossier\"
  7. Path = Dir(Repertoire & "FILE NAME**-** to **-**.xlsx" )
  8. Path2 = "\\serveur2\chemin\chemin\dossier\sous dossier\Archives\"
  9. Fich = "FILE NAME" & Format(DateDeb, "MM-YY" ) & " to " & Format(DateFin, "MM-YY" ) & ".xlsx"
  10. Do While Path <> Fich
  11. If Path <> Fich Then
  12. FileCopy Path, Path2
  13. End If
  14. Loop


 
Mais ça ne fonctionne pas vu que Path est tout un chemin et non pas mon fichier que je veux déplacer


Message édité par val_ou le 31-05-2013 à 09:51:29
n°2192347
Marc L
Posté le 31-05-2013 à 11:11:40  profilanswer
 

 
           Path étant une propriété existante déjà dans le VBA, mieux vaut donc ne pas l'utiliser comme nom de variable …
 
           Mais le souci ne vient pas de là mais de la mauvaise utilisation de la fonction  Dir  dans sa valeur et dans la boucle !
           Dir  renvoie uniquement un nom de fichier sans répertoire …
 
           Dans ta ligne n°9, le  ?  est plus approprié que le signe  *  
           car le caractère  ?  représente un seul caractère tandis que le caractère  *  peut en représenter plusieurs …
           A comparer avec la ligne n°11 du code ci-dessous (si le répertoire source contient uniquement des fichiers comme la variable Fich) …
 
           Le test de ta ligne n°12 n'est pas bon car dès que le fichier de la variable Fich est rencontré la boucle s'arrête
           même s'il reste d'autres fichiers à traiter !      Pourtant avec l'exemple de l'aide de  Dir  …
           Et du reste seul le premier fichier rencontré est traité car il manque une ligne ‼     (voir ma ligne n°19)
 
           Comme il s'agit de déplacer un fichier, il manque aussi la suppression du fichier source après la copie, voir ma ligne n°16 …
 
           Code à tester :

Code :
  1.     Dim DateDeb As Date, DateFin As Date, Fich As String, _
  2.         FichDS As String, RepDes As String, RepSrc As String
  3.    
  4.     DateDeb = DateSerial(Year(Date) - 1, Month(Date) - 1, 1)
  5.     DateFin = DateSerial(Year(Date), Month(Date) - 2, 1)
  6.    
  7.     Fich = "FILE NAME" & Format(DateDeb, "MM-YY" ) & " to " & Format(DateFin, "MM-YY" ) & ".xlsx"
  8.    
  9.     RepDes = "\\serveur2\chemin\chemin\dossier\sous dossier\Archives\"
  10.     RepSrc = "\\serveur\chemin\chemin\dossier\sous dossier\"
  11.     FichDS = Dir(RepSrc & "FILE NAME*.xlsx" )
  12.    
  13.     Do While FichDS > ""
  14.         If FichDS <> Fich Then
  15.             FileCopy RepSrc & FichDS, RepDes & FichDS
  16.             Kill RepSrc & FichDS
  17.         End If
  18.        
  19.         FichDS = Dir
  20.     Loop

 

n°2192589
val_ou
Posté le 03-06-2013 à 11:23:57  profilanswer
 

Merci beaucoup Marc!
 
Le code a fonctionné, je l'ai donc étendu à tous mes fichiers et ça fonctionne.
J'ai archivé les anciens fichiers .xls à la main, et tous les .xlsx se sont archivés.
 
Encore merci pour ton aide et surtout pour tes explications!  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Archiver tous les fichiers différents d'un fichier précis

 

Sujets relatifs
Récupérer des données dans plusieurs fichiersSortir des infos d'une base MySQL à partir d'un fichier txt ou csv
Passer chemin d'un fichier comme variableproblème d'enregistrement ds fichier TMP j'ai besoin d'aide
Variable DOS = nom_de_fichier[VBA] comparaison de 2 fichiers excel
[Résolu][Perl] Découper un fichier en plusieurs et optimisation[résolu] un fichier cpp, 2 compilateurs (g++ et avr-g++)
FICHIER TEXTE en JAVA 
Plus de sujets relatifs à : Archiver tous les fichiers différents d'un fichier précis


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR