J'ai besoin de votre aide, est-il possible a l'aide d'un bouton et d'une macro de créer un onglet avec le numéro de semaine en cours.
afin de pouvoir créer automatique cet l'onglet chaque semaine a l'aide du bouton.
Sub ajout_feuille()
Dim Nom As String, i As Byte, Verif As Boolean
recom:
Verif = False
Nom = InputBox("Définissez le nom de votre nouvelle feuille", "Ajout nouvelle feuille")
If Nom = "" Then Exit Sub
For i = 1 To Sheets.Count
If Sheets(i).Name = Nom Then Verif = True
Next
If Verif = True Then
MsgBox "la feuille " & Nom & " existe déjà, veuillez choisir un autre nom"
GoTo recom
End If
Sheets.Add(after:=Sheets(Sheets.Count)).Name = Nom
End Sub
'Si l'onglet existe déjà, il n'est pas créé
Function FeuilleExiste(Nom As String) As Boolean
On Error Resume Next
FeuilleExiste = Sheets(Nom).Name <> ""
On Error GoTo 0
End Function
Sub CreationOngletIndividuel()
Application.ScreenUpdating = False
Application.EnableEvents = False
Nom$ = Application.WorksheetFunction.IsoWeekNum(Date)
For Each ws In Worksheets
If ws.Name = Nom Then MsgBox "La feuille existe déjà": Exit Sub: Application.EnableEvents = True
Next ws
If Nom = "" Or Nom Like "*[-./\#[?!()']*" Or Len(Nom) > 30 Then
MsgBox "le nom n'est pas valide": Application.EnableEvents = True: Exit Sub
End If
Sheets("Test").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Nom
End Sub
bonsoir le fil, re celtar
un petit peu comme jbarbe, mais avec le nom défini par le numéro de semaine
VB:
'Si l'onglet existe déjà, il n'est pas créé
Function FeuilleExiste(Nom As String) As Boolean
On Error Resume Next
FeuilleExiste = Sheets(Nom).Name <> ""
On Error GoTo 0
End Function
Sub CreationOngletIndividuel()
Application.ScreenUpdating = False
Application.EnableEvents = False
Nom$ = Application.WorksheetFunction.IsoWeekNum(Date)
For Each ws In Worksheets
If ws.Name = Nom Then MsgBox "La feuille existe déjà": Exit Sub: Application.EnableEvents = True
Next ws
If Nom = "" Or Nom Like "*[-./\#[?!()']*" Or Len(Nom) > 30 Then
MsgBox "le nom n'est pas valide": Application.EnableEvents = True: Exit Sub
End If
Sheets("Test").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Nom
End Sub
Bonsoir
Merci pour ton code je voudrais l'intégrer a mon code mais je n'y arrive pas
je te mets le fichier si tu peux regarder je t'en remercie d'avance.
A partir du bouton tableau recap je souhaite que l'onglet ce créer mais avec ta macro
fais un essai de ma macro pour te montrer ce qu'il créé.
@celtar : le projet VBE de ton fichier n'était pas déverrouillé !!!!! Il faut tout faire soi même....
Voici donc le code de notre ami GALOUGALOU que j'ai repris car IsoWeekNum ne fonctionne pas chez moi (XL 2010) .
Bonne journée à toutes & à tous
@+ Eric c
re celtar, bonjour eric c, bonjour le forum
le projet vba du fil #7 est verrouillé, donc inaccessible. malgré tout eric c vous a fait une proposition interessante
À partir de ce qui était visible, je vous ai construit un classeur exemple, (je ne déprotége pas les classeurs proposé sur xld) dont voici le code adapté sur l'antépénultième ligne de code.
VB:
'Si l'onglet existe déjà, il n'est pas créé
Function FeuilleExiste(Nom As String) As Boolean
On Error Resume Next
FeuilleExiste = Sheets(Nom).Name <> ""
On Error GoTo 0
End Function
Sub CreationOngletIndividuel()
Application.ScreenUpdating = False
Application.EnableEvents = False
Nom$ = Application.WorksheetFunction.IsoWeekNum(Date)
For Each ws In Worksheets
If ws.Name = Nom Then MsgBox "La feuille existe déjà": Exit Sub: Application.EnableEvents = True
Next ws
If Nom = "" Or Nom Like "*[-./\#[?!()']*" Or Len(Nom) > 30 Then
MsgBox "le nom n'est pas valide": Application.EnableEvents = True: Exit Sub
End If
Sheets("Récapitulatif").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Nom
End Sub
eric c pour excel 2010, je te propose d'essayer cette solution, que tu as peut-être mis en application, je n'ai pas vu ton code.
une fonction proposée par kiki que l'on peut trouver sur ce fil
Bonjour à vous tous et tous mes voeux pour cette nouvelle année Pourriez vous me dire s'il est possible de mettre la formule si dessous en Vba afin de m'en servir dans une procédure =ENT(MOD(ENT((A1-1)/7)+3/5;52+5/28))+1 Merci d'avance pour vos réponses MAN
excel-downloads.com
Code:
Function NumSem(dDate As Date) As Integer
Dim t As Long
t = DateSerial(Year(dDate + (8 - Weekday(dDate)) Mod 7 - 3), 1, 1)
NumSem = ((dDate - t - 3 + (Weekday(t) + 1) Mod 7)) \ 7 + 1
End Function