Re,
J'ai fait un essai en ayant préalablement changé la date de mon pc au 1/1/18. Rien ne se passe: pas de création de fichier de sauvegarde annuelle dans le dossier de destination.
Pour le test, il n'est pas nécessaire de changer la date de ton PC puisque quand tu lances le code pour la première fois dans ton classeur le nom n'existe forcément pas donc, tu entres dans le bloc If ... Then et le fichier de sauvegarde est forcément créé avec l'année 2017 (2018 quand on sera en 2019).
J'ai modifié le code pour qu'il y ai un contrôle en fin de procédure pour indiquer si la sauvegarde a réussie ou pas :
Sub PremOuverture()
Dim Nom As Name
Dim Chemin As String
Dim Fichier As String
On Error Resume Next
Set Nom = ThisWorkbook.Names("PremOuv_" & Year(Date)) 'affecte le nom à la variable
'si il n'existe pas, une erreur est générée donc...
If Err.Number <> 0 Then
'...supprime l'éventuel ancien nom (année en cours moins 1)
Set Nom = ThisWorkbook.Names("PremOuv_" & Year(Date) - 1)
Nom.Delete
Chemin = "C:\Sauvegarde annuelle relevé des gaz\"
Fichier = "Contrôle gaz_année " & Year(Date) - 1 & ".xlsm" '<--- sauvegarde avec l'année précédente
'effectue la sauvegarde
ThisWorkbook.SaveCopyAs Chemin & Fichier
'crée le nouveau nom pour l'année en cours
'tant que l'année ne change pas, le nom existe et donc, pas de sauvegarde annuelle !
ThisWorkbook.Names.Add "PremOuv_" & Year(Date), Year(Date), False
If Dir(Chemin & Fichier) <> "" Then
MsgBox "La sauvegarde du classeur a réussie !" _
& vbCrLf _
& vbCrLf _
& "Le fichier est dans le dossier '" & Chemin & "' et porte le nom : '" & Fichier & "'"
Else
MsgBox "Une erreur est survenue, la sauvegarde n'a pas réussie !"
End If
End If
End Sub
Pour tester le code, parcours le en pas à pas (touche F8) pour voir comment il se comporte ! Je n'est pas testé sur "Workbook_Open()" sinon, à tester sur "Workbook_Activate()"
J'ai aussi mis un fichier excel nommé "PremOuv_2017" dans le dossier "Sauvegardes annuelles", il ne se fait pas supprimer.
Comme la sauvegarde n'est faite qu'une fois par an, il ne doit normalement pas exister de classeur de sauvegarde de l'année qui vient de passer, non ? Sinon, tu peux utiliser Kill pour le supprimer avant en faisant un test avec Dir() :
If Dir(Chemin & Fichier) <> "" Then Kill Chemin & Fichier
Pour savoir si le nom existe dans le classeur, tu peux exécuter cette proc :
Sub Test()
Dim Nom As Name
On Error Resume Next
Set Nom = ThisWorkbook.Names("PremOuv_" & Year(Date))
If Err.Number = 0 Then
MsgBox "Le nom existe !"
Else
MsgBox "Le nom n'existe pas !"
End If
'Nom.Delete 'permet de supprimer le nom du classeur
End Sub
Bon, je te laisse faire quelques tests !