SaveCopyAs avec chemin spécifique

Bonjour, je voudrais faire une sauvegarde de mon fichier en fonction de la date :

Sur mon bureau un dossier "2017" et un sous dossier "juillet_2017_save".

Je voudrais pouvoir sauvegarder systématiquement en fonction de la date de sauvegarde sans à avoir à reprendre le code quand les mois changent ainsi que les années:

voici mon code ou je bute sur le chemin d’accès le but étant d'écrire le chemin d’accès en fonction du mois actuel et de l'année :

Sub EnregistrerCopie()

  ThisWorkbook.Save

Dim memPath As String, annee As String, mois As String

annee = Format(Date, "yyyy")
mois = Format(Date, "mmmm")

    'enregistrer les modifications apportées au classeur
    ThisWorkbook.Save
    'mémoriser le path du classeur
    memPath = ThisWorkbook.FullName
    '"enregistrer sous" le classeur (faire une copie) ci dessous fonctionne
    'ThisWorkbook.SaveCopyAs "Bureau\2017\juillet_2017_save\monfichier_save_" & Format(Date, "dd_mm_yyyy") & ".xlsm"

    ' demande d'aide pour la ligne dessous pour qu'elle fasse comme celle du dessus
    ThisWorkbook.SaveCopyAs "Bureau\annee\mois_annee &_save"\monfichier_save_" & Format(Date, "dd_mm_yyyy") & ".xlsm"

    'ouvrir l'ancien classeur (celui d'avant l'"enregistrer sous")
    Application.Workbooks.Open memPath
    'fermer ce classeur (la copie)
    ThisWorkbook.Close False

End Sub

Merci d'avance

Bonjour,

Selon tes indications :

Sub EnregistrerCopie()
    Dim annee$, mois$, chemin$, fichier$
    ThisWorkbook.Save
    annee = Format(Date, "yyyy")
    mois = Format(Date, "mmmm_yyyy") & "_save"
    chemin = "C:\Users\TonNomUtilisateur\Desktop\" & annee & "\" & mois & "\"
    fichier = "monfichier_save_" & Format(Date, "dd_mm_yyyy") & ".xlsm"
    ThisWorkbook.SaveCopyAs chemin & fichier
End Sub

Cordialement.

Nb- Ton nom d'utilisateur est à indiquer dans le chemin...

Et ce que j'ai supprimé, c'est parce que c'était inutile et posait problème !

Bonsoir , t'es un chef !!! un grand merci !!!

Bonjour , j'ai un soucis car je je voudrais que lorsque le fichier save est sauver que lorsque on modifie le fichier d'origine à une date ultérieure qu'il ne fasse pas une nouvelle copie à la date du jour mais qu'il le fasse sur le bon fichier de sauvegarde .

Quand j'ouvre "monfichier_05_07_2017.xlsm" et j'applique la macro il sauvegarde bien le fichier avec la même date sur "monfichier_05_07_2017_save.xlsm" et non pas sur celui de la date du jour , mon code ne marche pas ?

Sub EnregistrerCopie()

If Worksheets("listes").Range("dateenregistrement") = Worksheets("listes").Range("dateouverture") Then 

' si date d enregistrement egale à celle de l'ouverture du fichier on créé une premiere copie
' ou on ecrase le fichier existant

    Dim annee$, mois$, chemin$, fichier$
    ThisWorkbook.Save
    annee = Format(Date, "yyyy")
    mois = Format(Date, "mmmm_yyyy") & "_save"
    chemin = "C:\Users\TonNomUtilisateur\Desktop\" & annee & "\" & mois & "\"
    fichier = "monfichier_save_" & Format(Date, "dd_mm_yyyy") & ".xlsm"
    ThisWorkbook.SaveCopyAs chemin & fichier

    else

    ' sinon

        chemin = "C:\Users\TonNomUtilisateur\Desktop\" & annee & "\" & mois & "\"

    ThisWorkbook.SaveCopyAs chemin

End Sub

Merci d'avance

Bonsoir,

Pas compris ce que tu veux dire... ?

Commence par écrire correctement le code et on s'y retrouvera mieux :

  • Indentation systématique : on doit trouver les blocs d'instructions sur le même alignement en retrait (With et End With, If et Else et End If...)
  • Pas de lignes sautées qui ne font que perturber la lecture.
  • Les déclarations toujours en tête de procédure !
  • Eviter les commentaires inutiles (si tu as encore besoin de t'indiquer que Else c'est Sinon... !!! )
  • Eviter cette répétition lourde de Worksheets("Listes") en le mettant sous bloc With (ça prend moins de place, et ça accélère).

Une fois indenté, tu pourras voir que tu as un If sans End If !

Et, mais ça tu aurais dû le voir en l'écrivant, enregistrer avec un chemin sans nom de fichier, ça peut pas marcher...

Je ne vois d'ailleurs pas à quoi sert ce If... pour écraser le fichier antérieur, on l'enregistre au même endroit sous le même nom !

Et on place unes instruction : Application.DisplayAlerts = False pour éviter le message d'alerte.

Bonsoir oui le "end if" y est sur mon code vba , c'est mon copier coller qui est pas bon.

Je génère tous les jours des fichiers qui s'enregistrent avec la date du jour par exemple : "monfichier_05_07_2017" , je veux faire une sauvegarde de ce fichier "monfichier_save_05_07_2017" à la fermeture du classeur sur un autre dossier( classeur que l'on ouvre et l'on ferme plusieurs fois par jour ).

Si j'apporte une modification pour corriger une erreur le 10 juiillet sur le fichier "monfichier_05_07_2017" il l'enregistre sur "monfichier_save_10_07_2017" à la fermeture !!! , alors que je voudrais qu'il modifie le fichier de sauvegarde qu'il lui est associé avec sa date ( "monfichier_save_05_07_2017" ), d'où la comparaison de la date pour savoir si l'on travaille sur le fichier le même jour , là , j'applique ton code.

Merci

Il faut limiter ta condition à la définition du nom de fichier, avant de passer à la sauvegarde !

Re, il faut déclarer une variable pour le nom du fichier et la faire une comparaison ?

Merci.

Tu en as déjà une ! Tu y mets le nom qui convient en fonction de ton test.

Si j'ai bien compris ton souci, il n'y a que le nom du fichier qui change selon la condition que tu mets. Le reste ne change pas.

Salut , bon ben je m'en sors pas

Sub EnregistrerCopie()
    Dim annee$, mois$, chemin$, fichier$, d
    If Worksheets("listes").Range("dateenregistrement") = _
     Worksheets("listes").Range("dateouverture") Then
        d = Date
    Else
        d '=??? quelle? tu ne l'indiques pas
    End If
    ThisWorkbook.Save
    annee = Format(d, "yyyy")
    mois = Format(d, "mmmm_yyyy") & "_save"
    chemin = "C:\Users\TonNomUtilisateur\Desktop\" & annee & "\" & mois & "\"
    fichier = "monfichier_save_" & Format(d, "dd_mm_yyyy") & ".xlsm"
    ThisWorkbook.SaveCopyAs chemin & fichier
End Sub

Bonsoir ,

Il faut aller sur "chemin" voir sir le fichier avec le "_save " de la même date existe ou pas... si il existe on mais le code sous Else

d = Date tu ajoutes une variable qui va servir à ça ?

genre :

"monfichier_save_" & d & ".xlsm" ?

il faut que quand je modifie monfichier_14_07_2017.xslm à fermeture il sauvegarde bien sur le fichier monfichier_14_07_2017_save.xslm quelque soit le jour ou je fasse la modification ....

Sub EnregistrerCopie()
    Dim annee$, mois$, chemin$, fichier$, d
    If Worksheets("listes").Range("dateenregistrement") = _
     Worksheets("listes").Range("dateouverture") Then
        d = Date
    Else
' ici on sauvegarde le fichier existant correspondant à celui d'origine

        d '=??? quelle? tu ne l'indiques pas

   End If
' ici on fait une sauvegarde du fichier ci celui ci n'existe pas encore qui correspond à la date d'enregistrement dans les conditions
    ThisWorkbook.Save
    annee = Format(d, "yyyy")
    mois = Format(d, "mmmm_yyyy") & "_save"
    chemin = "C:\Users\TonNomUtilisateur\Desktop\" & annee & "\" & mois & "\"
    fichier = "monfichier_save_" & Format(d, "dd_mm_yyyy") & ".xlsm"
    ThisWorkbook.SaveCopyAs chemin & fichier
End Sub

Merci pour ta patience ...

Je dois avouer que je m'y perds !

Tu disais que si ta modification concernait une autre date que la date du jour, c'est le fichier à cette date qu'il fallait écraser...

Il y a donc bien lieu de nommer le fichier en fonction de la date...

Peut-être aussi le chemin doit-il être adapté ! Je ne l'ai pas fait, mais s'il y a changement de mois, voire d'année, le dossier change donc aussi.

Mais une fois ces deux éléments définis, à partir de ta condition (dont je ne connais pas le résultat concret puisque je ne sais strictement rien du contenu des cellules que tu compares, je considère donc que tu sais ce que tu fais...), le reste de l'opération demeure identique : un fichier doit être enregistré !

Oui lol complqiué , bon je vais faire sans.

Merci !!!

Rechercher des sujets similaires à "savecopyas chemin specifique"