Sauvegarder sous le même répertoire - année dans nom fichier

Bonsoir à tous,

Je souhaiterais sauvegarder un fichier dans le même répertoire que celui ouvert mais avec un changement du nom qui contient l'année (on aurait des nouveaux classeurs de saisie par année) ; sachant que lorsque la dernière semaine de décembre comporte au plus 3 jours, elle est considérée comme semaine 1, ce qui fait basculer en l'année suivante.

J'ai écrit le code suivant. Il génère 2 dysfonctionnements :

  • dans la cellule (1,15), la macro met jj/mm/aaaa au lieu de "aaaa"
  • au moment de la sauvegarde sous, une fenêtre indique une erreur 1004 avec les précisions suivantes : le nom du fichier ou le chemin n'existe pas ou le fichier est actuellement utilisé par un autre programme ou le classeur que vous essayez d'enregistrer porte le même nom qu'un classeur actuellement ouvert.
J'avoue que j'ai encore beaucoup de mal à jongler avec les variables "dates".

Votre aide sera la bienvenue et je vous en remercie par avance.

Option Explicit

Public Function IsoWeekNumber(InDate As Date) As Long

IsoWeekNumber = DatePart("ww", InDate, vbMonday, vbFirstFourDays)

End Function

Sub Changement_annee()

Dim x As Long, var_annee As Date, var_semaine As Integer, Nomfichier As String

x = range("F" & Rows.Count).End(xlUp).Row

var_annee = Year(Cells(x, 6))

var_semaine = IsoWeekNumber(Cells(x, 6))

Nomfichier = var_annee + 1 & " - Indicateurs de Performance"

If (var_annee = Cells(1, 15)) And (var_semaine >= 1) Or (var_annee = Cells(1, 15) + 1) Then

Worksheets("Saisie").range(Cells(17, 1), Cells(x - 1, 22)).Delete

Cells(1, 15) = Year(var_annee + 1)

ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Nomfichier

End If

End Sub


J'ai déclaré var_annee as Long, il m'affiche un nombre inattendu !

Bonjour

Atemi a écrit :

J'ai déclaré var_annee as Long, il m'affiche un nombre inattendu !

Pas dans le code

Sub Changement_annee()
Dim x As Long, var_annee As Date, var_semaine As Integer, Nomfichier As String

Corriges déjà cela et le nom du fichier ne devrait plus poser problème

Ensuite cette instruction me parait bizarre

Cells(1, 15) = Year(var_annee + 1)

Tu veux écrire l'année d'une année : Bien un nombre est une date, mais dans ce cas tu veux écrire un truc du genre

Cells(1, 15) = Year(2014 + 1)

A voir aussi

Si des difficultés joins ton fichier

Merci pour ton aide Banzai64 ; elle m'a permis de voir mes erreurs. L'ambiguïté est dans les no.semaine et les no.semaine.iso. J'ai modifié le code comme suit (ça peut servir à d'autres) :

Option Explicit

Function WeekNumber(D As Date, FW As Integer) As Integer

WeekNumber = CInt(Format(D, "ww", FW))

End Function

Sub Changement_annee()

Dim x As Long, var_annee As Long, annee_en_cours As Date, var_semaine As Integer, Nomfichier As String

x = range("F" & Rows.Count).End(xlUp).Row

var_annee = Year(Cells(x, 6))

annee_en_cours = Year(Now())

var_semaine = WeekNumber(Cells(x, 6), 2)

Nomfichier = var_annee + 1 & " - Indicateurs de Performance"

If (annee_en_cours And (var_semaine > 52)) Or (var_annee = Cells(1, 15) + 1) Then

Worksheets("Saisie").range(Cells(17, 1), Cells(x - 1, 22)).Delete

Cells(1, 15) = var_annee + 1

ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Nomfichier

End If

End Sub

Rechercher des sujets similaires à "sauvegarder meme repertoire annee nom fichier"