Nommer une feuille automatiquement en fonction de la date d'une cellule

Bonjour à tous,

Via une macro, j'ai réussi à créer autant de feuilles dans mon classeur excel que contient une année (une feuille par jour)

La date dans chacune de mes feuilles se met à jour automatiquement mais j'aimerais que cette date s'affiche dans le nom de la feuille sous la forme suivante :

1ère lettre du jour de la semaine, puis le mois sous forme numérique ( "J 20-03" pour Jeudi 20 mars - "V 21-03" pour Vendredi 21 mars et ainsi de suite)

Je vous remercie d'avance pour l'aide que vous pourrez m'apporter

voici la macro que j'utilise actuellement :

Public Sub CreerOnglets()

' Ctrl + w pour démarrer la procédure
Dim année, i, z
Dim x As Date, y As Date
année = Val(InputBox("Quelle année ?"))
If année = 0 Then Exit Sub
Application.ScreenUpdating = False
x = DateSerial(année, 3, 20)
y = DateValue("27 novembre " & année)
z = y - x
For i = 1 To z
Sheets("Modèle").Copy After:=Sheets(i)
ActiveSheet.Name = Format(x + i, "dd-mmm-yyyy")
ActiveSheet.Range("B2") = Format(x + i, "dd-mmm-yyyy")
Next i
Worksheets("Modèle").Activate
Cells(1, 1).Select
End Sub

Bonjour,

Voici le petit script qui vous permet de récupérer les dates sur les deux format souhaités, il vous suffit de les exploiter comme vous le souhaitez.

Variables -> jour et dateComplete

Sub test()
    Dim valAnnee As Integer
    Dim dateDebut As Date, dateFin As Date

    lstjour = Array("L", "M", "M", "J", "V", "S", "D")

    valAnnee = Val(InputBox("Quelle année ?"))
    If valAnnee = 0 Then Exit Sub

    dateDebut = DateSerial(valAnnee, 1, 1)
    dateFin = DateSerial(valAnnee, 12, 31)

    For cpt = dateDebut To dateFin
        jour = lstjour(Weekday(cpt, vbMonday) - 1) & " " & Format(Day(cpt), "00") & "-" & Format(Month(cpt), "00")
        dateComplete = Format(cpt, "dd-mmm-yyyy")
    Next cpt
End Sub

MErci pour votre réponse.

dois je créer un nouveau module avec ce code

ou puis-je l'insérer ou l'adapter au code que je vous ai soumis

re,

bonjour mimudes, salut jpbt84

dans la même macro + véification si la feuille n'existe pas encore

Public Sub CreerOnglets()

     ' Ctrl + w pour démarrer la procédure
     Dim année, i, z
     Dim x As Date, y As Date
     année = Val(InputBox("Quelle année ?"))
     If année = 0 Then Exit Sub
     Application.ScreenUpdating = False
     x = DateSerial(année, 3, 20)
     y = DateValue("27 novembre " & année)
     z = y - x
     For i = 1 To z
          Sheets("Modèle").Copy After:=Sheets(Sheets.Count)
          s = Mid("LMMJVSD", Weekday(x + i, 2), 1) & " " & Format(x + i, "dd-mm-yyyy")
          On Error Resume Next
          For j = 0 To 99
               s1 = s & IIf(j = 0, "", "(" & j & ")")
               Set sh = Nothing: Set sh = Sheets(s1)     'verifier si cette feuille n'existe pas
               If sh Is Nothing Then ActiveSheet.Name = s1: Exit For
          Next
          On Error GoTo 0
          ActiveSheet.Range("B2") = s
     Next i
     Worksheets("Modèle").Activate
     Cells(1, 1).Select
End Sub

Bonjour BsAlv,

J'ai essayé votre script et VBA me surligne le "s="

savez vous pourquoi ?

merci

re,

et si vous ajoutez ce s dans les déclarations, par exemple cette ligne

Dim année, i, z, s

Je vous remercie de m'aider.

Je ne maitrise pas le VBA et donc c'est compliqué.

Pourriez-vous peut-être m'orienter en me surlignant les champs que je dois modifier ? et par quelle information ?

par exemple le s1 ... est le nom de la feuille ?

je suis en apprentissage.. débutante :)

merci merci

re,

voici un fichier avec la macro (et une autre pour supprimer toutes les feuilles sauf "modèle")

15mymides.xlsb (25.86 Ko)

Oh c'est formidable

merci merci beaucoup BsAlv ça fonctionne parfaitement !!!!!!!!!!!!!!!!!!!!!!!

en cellule B3 j'ai une formule de ce type =DROITE(CELLULE("nomfichier";A1);NBCAR(CELLULE("nomfichier";A1))-TROUVE("]";CELLULE("nomfichier";A1);1))

avant votre macro, la date s'affichait date sous le format " jeudi 20 mars 2025 "

et maintenant de ce fait la date s'écrit comme dans le nom de la feuille à savoir J 20-03

Est-ce possible de dissocier les deux, que dans ma feuille la date s'affiche entièrement mais que le nom soit J 20-03

Ya t'il une parade ?

je rappelle également cette date en T3 via (=B3)

re,

maintenant en rouge et en gras (vous pouvez supprimer ces lignes, s'elles ne sont pas nécessaires.

9mymides.xlsb (48.15 Ko)

impossible de voir vos modifications pour une question de sécurité je crois

pouvez vous me copier coller la macro ici

s'il vous plait

merci

re,

il faut cocher quelque chose dans l'Explorer

https://excel-pratique.com/fr/astuces_vba/debloquer-les-macros

Public Sub CreerOnglets()

     ' Ctrl + w pour démarrer la procédure
     Dim année, debut, fin, i As Long, j, s, s1, sH

     année = Val(InputBox("Quelle année ?"))
     If année = 0 Then Exit Sub

     Application.ScreenUpdating = False
     debut = DateSerial(année, 3, 20)
     fin = DateSerial(année, 11, 27)

     For i = debut To fin                    'boucle du premier jusqu'au dernier jour
          j = WorksheetFunction.IsoWeekNum(i)
          jour = WorksheetFunction.Text(i, "[$-fr-fr]dddd")     'le jour de la semaine
          On Error Resume Next
          Set sH = Nothing: Set sH = Sheets(jour)     'chercher la feuille nommée lundi, mardi, ....
          On Error GoTo 0
          If sH Is Nothing Then
               MsgBox "la feuille origine du " & jour & " n'existe pas", vbCritical
          Else
               sH.Copy After:=Sheets(Sheets.Count)     'copiez feuille "modèle" (lundi, mardi, mercredi ....) et collez-la comme dernière feuille
               s = Mid("LMMJVSD", Weekday(i, 2), 1) & " " & Format(i, "dd-mm")     'le date en texte, 1 charactère du jour de la semaine et la date

               ActiveSheet.Range("B3") = s   ' écrivez ce nom dans la cellule B2 de la nouvelle feuille

               With ActiveSheet.Range("B2")  'votre cellule B2
                    .Value = i               'la date
                    .NumberFormat = "dddd dd mmmm yyyy"     'le format
                    .Font.Color = RGB(255, 0, 0)     'couleur du texte
                    .Font.Bold = True        'en gras
               End With

               ActiveSheet.Tab.ColorIndex = WorksheetFunction.IsoWeekNum(i)     'chaquesemaine un autre couleur pour le tab

               On Error Resume Next          'continuer en cas d'erreur
               For j = 0 To 99               'on essayera 100 fois à nommer la nouvelle feuille
                    s1 = s & IIf(j = 0, "", "(" & j & ")")     'le nom de la feuille, si cette feuille existe déjà, on ajoutera un index entre parenthèses
                    Set sH = Nothing: Set sH = Sheets(s1)     'verifier si cette feuille (avec eventuel parnthèses et index) n'existe pas
                    If sH Is Nothing Then ActiveSheet.Name = s1: Exit For     'cette feuille n'existe pas encore, donc renommez la nouvelle feuille comme-çà
               Next
               On Error GoTo 0
          End If
     Next i

     Application.Goto Worksheets("lundi").Cells(1, 1)     'retourner vers A1 de la feuille "Modèle"

merci pour votre retour

je ne pouvais pas débloquer la sécurité

Bonsoir BsAlv,

J'ai pu utiliser votre macro dans mon fichier restaurant et je vous en remercie.

les feuilles modèles (lundi, mardi, mercredi, jeudi, vendredi, samedi et dimanche) se dupliquent bien sur toute la période en suivant entre le 20 mars et le 27 novembre et le nom des feuilles se mets bien a jour.

juste un souci avec la feuille (modelChefSem) qui ne s'est pas dupliquer du tout, j'aimerai qu'elle se duplique juste après la feuille nommé "dimanche"

j'ai essayé plusieurs choses mais je ne maitrise pas.

pourriez vous m'indiquer la formule à utiliser svp et où la placer dans la macro que vous m'avez donnée ci dessus

merci d'avance

Rechercher des sujets similaires à "nommer feuille automatiquement fonction date"