Comment éviter les doublons de fichiers au format date

Résolu
Blackjack23 -  
 Blackjack23 -
Bonjour, j’ai un souci lorsque j’enregistre mes fichiers « Xlsm » car je ne peux pas vérifier s’ils existent déjà dans le répertoire de destination à cause de leur format, je m’explique :
Mes fichier sont enregistrés au format suivant « numéro de série + date du jour » >> ex : 888881_dd_mm_yyyy
Si j’enregistre mon fichier aujourd’hui et le même le même jour, pas de problème, j’ai bien une boite de dialogue qui s’affiche pour me dire : « le fichier existe déjà, voulez vous le remplacer »
Si j’enregistre mon fichier un jour plus tard avec le même numéro de série, je me retrouve avec deux fois le même fichier « 888881 » mais avec deux dates différentes
Quel code pourrait me permettre de remplacer le fichier identique enregistré quelques jours plus tôt en allant lire que le numéro de série « 888881 ».
Voici le code me permettant d’enregistrer mes fichiers dont le nom est égal au nom se trouvant dans une cellule (Cellule N11 du fichier à enregistrer) mais ne me permettant pas de vérifier si les numéros de série sont identiques.

Sub Save_classeur()

Dim chemin, nom As String

'le chemin pour ouvrir le bon répertoire en allant chercher le numéro du répertoire se trouvant dans la cellule N8 du fichier à enregistrer

chemin = "C:\Documents and Settings\toto\Mes documents\dossier import test\" & Range("N8").Value & "\"

'le nom du fichier sera enregistré sous le nom indiqué dans la cellule N11 (n° de série)

nom = Range("N11").Value

‘Lancement de l’enregistrement au format Xlsm
'ActiveWorkbook.SaveAs Filename:=chemin & nom & Format(Now(), "_dd_mm_yyyy") & ".xlsm", FileFormat:=xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

End Sub

En espérant avoir été suffisamment clair dans mes explications

Merci

6 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Pour détecter un fichier ayant le même nom dans un répertoire:

    MsgBox chemin  & Dir(chemin  & "\\" & nom & "*")


    Ceci te donne le chemin complet du fichier ayant le même nom, remplacer MsgBox par un variable et après tu adaptes pour supprimer le 1er fichier dont tu connais le chemin complet (regarder sur Google: supprimer un fichier) et enregistrer le nouveau
    0
    1. Blackjack23
       
      Merci cs_Le Pivert mais je ne dois pas être assez doué pour faire la suite car je vois effectivement le message arriver en MsgBox mais lorsque je veux créer ma variable, ça ne marche pas et donc même chose pour la condition que je dois mettre après avec If,Then afin de supprimer le fichier si déjà existant.
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Sub Save_classeur() 
    
    Dim chemin, nom, val  As String 
    
    'le chemin pour ouvrir le bon répertoire en allant chercher le numéro du répertoire se trouvant dans la cellule N8 du fichier à enregistrer 
    
    chemin = "C:\Documents and Settings\toto\Mes documents\dossier import test\" & Range("N8").Value & "\" 
    
    'le nom du fichier sera enregistré sous le nom indiqué dans la cellule N11 (n° de série) 
    
    nom = Range("N11").Value 
    
    ‘Lancement de l’enregistrement au format Xlsm 
    'ActiveWorkbook.SaveAs Filename:=chemin & nom & Format(Now(), "_dd_mm_yyyy") & ".xlsm", FileFormat:=xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False 
    val = chemin  & Dir(chemin  & "\\" & nom & "*")
    If val = "" Then
    Exit Sub
    Else
    Kill val
    End Sub 
    

    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      correction:

      Sub Save_classeur() 
      
      Dim chemin, nom, val  As String 
      
      'le chemin pour ouvrir le bon répertoire en allant chercher le numéro du répertoire se trouvant dans la cellule N8 du fichier à enregistrer 
      
      chemin = "C:\Documents and Settings\toto\Mes documents\dossier import test\" & Range("N8").Value & "\" 
      
      'le nom du fichier sera enregistré sous le nom indiqué dans la cellule N11 (n° de série) 
      
      nom = Range("N11").Value 
      
      'supprimer fichier si existant
      val = chemin  & Dir(chemin  & "\\" & nom & "*")
      If val = "" Then
      Exit Sub
      Else
      Kill val
      
      ‘Lancement de l’enregistrement au format Xlsm 
      'ActiveWorkbook.SaveAs Filename:=chemin & nom & Format(Now(), "_dd_mm_yyyy") & ".xlsm", FileFormat:=xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False 
      
      End Sub 
      0
  3. Blackjack23
     
    Le fichier est bien effacé si le numéro de série et la date sont les mêmes mais si la date est différente, il n’écrase pas l’ancien fichier.

    Exemple si le même fichier est enregistré une seconde fois 3 jours plus tard :

    555555_10_12_2015 ancien fichier

    555555_13_12_2015 le nouveau est fichier créé et l’ancien reste
    0
  4. Blackjack23
     
    Pour être plus clair, j'ai lancer le programme indiqué mais lorsqu'il ne trouve pas le même numéro de série, la procédure s’arrête sur "Kill val"et le MsgBox suivant apparaît: "Fichier introuvable";
    j'ai donc modifié la procédure de la façon suivante mais mon problème de doublon réapparaît si le fichier existe déjà ce qui est normal car je reviens à mon point de départ, ça fonctionne dans un sens mais pas dans l'autre.

    val = chemin & dir(chemin & "\\" & nom & "*")
    If val = "" Then
    Exit Sub
    Else
    'Kil val

    ActiveWorkbook.SaveAs Filename:=chemin & nom & Format(Now(), "_dd_mm_yyyy") & ".xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

    End If

    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Il y a un problème avec Kill, voici une autre approche:

    Sub Save_classeur()
    Dim chemin, nom, val As String
    Dim objFSO As Variant
     'le chemin pour ouvrir le bon répertoire en allant chercher le numéro du répertoire se trouvant dans la cellule N8 du fichier à enregistrer
    chemin = "C:\Documents and Settings\toto\Mes documents\dossier import test\" & Range("N8").Value & "\"
    'le nom du fichier sera enregistré sous le nom indiqué dans la cellule N11 (n° de série)
    nom = Range("N11").Value
    On Error Resume Next 'si pas de fichier existant
    'supprimer fichier si existant
    val = chemin & Dir(chemin & "\\" & nom & "*")
    'on va supprimer le fichier
       Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.DeleteFile (val)
    'Lancement de l’enregistrement au format xls
    ActiveWorkbook.SaveAs Filename:=chemin & nom & Format(Now(), "_dd_mm_yyyy") & ".xls", FileFormat:= _
    xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
    MsgBox "Enregister"
    End Sub

    0
  7. Blackjack23
     
    merci, cette fois ci tout semble fonctionner, c'est parfait
    0