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

Archiver tous les fichiers différents d'un fichier précis - VB/VBA/VBS - Programmation

Marsh Posté le 29-05-2013 à 10:55:09    

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 :)

Reply

Marsh Posté le 29-05-2013 à 10:55:09   

Reply

Marsh Posté le 29-05-2013 à 15:30:19    

 
           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
 

Reply

Marsh Posté le 30-05-2013 à 13:30:31    

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
Reply

Marsh Posté le 30-05-2013 à 17:10:59    

 
           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.
 

Reply

Marsh Posté le 31-05-2013 à 09:47:39    

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
Reply

Marsh Posté le 31-05-2013 à 11:11:40    

 
           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

 

Reply

Marsh Posté le 03-06-2013 à 11:23:57    

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!  :)

Reply

Sujets relatifs:

Leave a Replay

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