XL 2016 [Réglé]calendrier annuel avec seulement certains jours.

Bearn 64

XLDnaute Occasionnel
Bonjour à tous,

Je dois créer des calendriers mais un peu spéciaux.

Sur un an uniquement lundi mercredi ou jeudi.
Idem mais que avec lundi mercredi samedi.
Et encore aussi bizarre en fait pouvoir choisir les jours qui composent le calendrier par leur nom.
Comment puis je m'en sortir.

Merci de votre aide.
 

Bearn 64

XLDnaute Occasionnel
Bonjour Victor21,

Je me suis mal expliquer, a partir d'un calendrier créer en tirant les dates 01/01/2018 et 02/01/2018 je crée une suite jusqu'au 31/12/2018.
Et je souhaiterai n'avoir que les lundi, mercredi, jeudi ou lundi, mercredi, samedi.

merci
 

Pièces jointes

  • Béarn.xlsx
    16.1 KB · Affichages: 35

Victor21

XLDnaute Barbatruc
re,

...Je me suis mal expliquer, a partir d'un calendrier créer en tirant les dates 01/01/2018 et 02/01/2018 je crée une suite jusqu'au 31/12/2018.
Et je souhaiterai n'avoir que les lundi, mercredi, jeudi ou lundi, mercredi, samedi....
Je suis curieux et impatient que vous m'expliquiez en quoi ma proposition ne correspond pas à vos souhaits. Quelles sont les dates générées par ces formules qui ne sont pas conformes ?
 

Victor21

XLDnaute Barbatruc
Re,

Rien à voir avec le fichier exemple que vous avez communiqué qui ne contient que le résultat souhaité, sans point de départ.
Je pense que vous devrez passer au VBA, et à partir d'une année complète, supprimer tous les jours non voulus.
Je laisse donc la place aux VBAistes que je salue :)
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Une possibilité en VBA
(test OK)
Lancer la macro idoine selon le choix indiqué dans le commentaire
VB:
Sub test_I()
'Sur un an uniquement lundi mercredi ou jeudi.
CalendrierSpecial 2, 4, 5
End Sub
Sub test_II()
'Idem mais que avec lundi mercredi samedi.
CalendrierSpecial 2, 4, 7
End Sub
Private Sub CalendrierSpecial(J1, J2, J3)
Dim x, l&: Columns(1).Cells.Clear
annee = InputBox("Année?", "Calendrier", Year(Date)): x = DateValue("31/12/" & annee): [A1] = DateValue("1/1/" & annee): l = DatePart("y", x)
Range("A1:A" & l).DataSeries 2, 3, 1, 1, CLng(x), False
Range("B1:B" & l).FormulaR1C1 = "=MATCH(WEEKDAY(RC[-1]),{" & J1 & ";" & J2 & ";" & J3 & "},0)"
Columns("B:B").SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete: Columns("B:B").Clear
Range("A1:A" & l).NumberFormat = "dddd dd mmmm yyyy"
End Sub
 

Bearn 64

XLDnaute Occasionnel
Bonjour Ce lien n'existe plus,

Merci pour cette macro.
Effectivement elle fonctionne a merveille.
J'ai appris de son contenu.
Question complémentaire serait-il possible d'avoir le résultat en ligne.

Un grand merci pour la rapidité de la solution et de l'efficacité de cette macro.

Bearn 64
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Version modifiée
Le dernier paramètre permet de choisir: en ligne ou en colonne
VB:
Sub test_I_C()
'Sur un an uniquement lundi mercredi ou jeudi.
Cells.Clear
Application.ScreenUpdating = False
CalendrierSpecial 2, 4, 5, 2
End Sub
Sub test_II_L()
'Idem mais que avec lundi mercredi samedi.
Cells.Clear
Application.ScreenUpdating = False
CalendrierSpecial 2, 4, 7, 1
End Sub
Private Sub CalendrierSpecial(J1, J2, J3, Sens As XlRowCol)
Dim x, l&, p As Range, z As Range
annee = InputBox("Année?", "Calendrier", Year(Date)): x = DateValue("31/12/" & annee): [A1] = DateValue("1/1/" & annee): l = DatePart("y", x)
Set p = Range(Cells(1, 1), Choose(Sens, Cells(1, l), Cells(l, 1))): p.DataSeries Sens, 3, 1, 1, CLng(x), False
p.Offset(Choose(Sens, 1, 0), Choose(Sens, 0, 1)).Formula = "=MATCH(WEEKDAY(A1),{" & J1 & ";" & J2 & ";" & J3 & "},0)"
Set z = Range("A1").CurrentRegion.SpecialCells(xlCellTypeFormulas, 16)
Select Case Sens
Case 1: z.EntireColumn.Delete: Rows(2).Delete
Case 2: z.EntireRow.Delete: Columns("B:B").Clear
End Select
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Pour le fun, une dernière version
(avec la possibilité de choisir le format)
VB:
Sub test_I_Ca()
'Sur un an uniquement lundi mercredi ou jeudi.
Cells.Clear
Application.ScreenUpdating = False
CalendrierSpecial 2, 4, 5, 2, "ddd-d"
End Sub
Sub test_II_Lb()
'Idem mais que avec lundi mercredi samedi.
Cells.Clear
Application.ScreenUpdating = False
CalendrierSpecial 2, 4, 7, 1, "ddd dd mmmm yyyy"
End Sub
Private Sub CalendrierSpecial(J1, J2, J3, Sens As XlRowCol, dFormat As String)
Dim x, l&, p As Range, z As Range
annee = InputBox("Année?", "Calendrier", Year(Date)): x = DateValue("31/12/" & annee): [A1] = DateValue("1/1/" & annee): l = DatePart("y", x)
Set p = Range(Cells(1, 1), Choose(Sens, Cells(1, l), Cells(l, 1))): p.DataSeries Sens, 3, 1, 1, CLng(x), False
p.Offset(Choose(Sens, 1, 0), Choose(Sens, 0, 1)).Formula = "=MATCH(WEEKDAY(A1),{" & J1 & ";" & J2 & ";" & J3 & "},0)"
Set z = Range("A1").CurrentRegion.SpecialCells(xlCellTypeFormulas, 16)
Select Case Sens
Case 1: z.EntireColumn.Delete: Rows(2).Delete
Case 2: z.EntireRow.Delete: Columns("B:B").Clear
End Select
Range("A1").CurrentRegion.NumberFormat = dFormat
End Sub
 

Statistiques des forums

Discussions
312 104
Messages
2 085 337
Membres
102 865
dernier inscrit
FreyaSalander