Sub Masquer_Jour()
Application.ScreenUpdating = False
With Feuil1
.Columns(31).Hidden = Month(.[AE10]) > Month(.[C10])
.Columns(32).Hidden = Month(.[AF10]) > Month(.[C10])
.Columns(33).Hidden = Month(.[AG10]) > Month(.[C10])
.Range("C11:AG50") = ""
End With
Application.ScreenUpdating = True
End Sub
Dim Mois, Année, jour
Private Sub ComboBox1_Change()
MesJours
End Sub
Private Sub ComboBox2_Change()
MesJours
End Sub
Private Sub Worksheet_Activate()
ComboBox1.List = Array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")
ComboBox2.List = Array(2019, 2020, 2021, 2022, 2023, 2025, 2026, 2027, 2028, 2029, 2030)
End Sub
Sub MesJours()
Année = ComboBox2: Mois = ComboBox1
On Error Resume Next
jour = CDate("1-" & Mois & "-" & Année)
Application.ScreenUpdating = 0
Application.EnableEvents = False: [C10] = jour
Columns(31).Hidden = Month([AE10]) > Month([C10])
Columns(32).Hidden = Month([AF10]) > Month([C10])
Columns(33).Hidden = Month([AG10]) > Month([C10])
Application.EnableEvents = True
End Sub
le calendrier marche nickel merci bon boulot. sauf que comme sur les images jointes à ce message, les absences se superposentRe
Si tu relis bien mon précédent message, il n'avait pas que la macro à modifier, non ?
Voir ce qui est écrit juste après les deux points
Sinon , je crois avoir compris ce que tu voulais
Donc je remplace les contrôles formulaires par des contrôles ActiveX
Puis dans le code de la feuille 1, je colle le code VBA "du dimanche" ci-dessous.
Ainsi on se passe de la référence à la feuille CONFIG pour ce qui est de la liste des mois et des années.
PS: test OK sur ton fichier (si toutes les modifications des messages 3 et 5 ont bien été faites)
VB:Dim Mois, Année, jour Private Sub ComboBox1_Change() MesJours End Sub Private Sub ComboBox2_Change() MesJours End Sub Private Sub Worksheet_Activate() ComboBox1.List = Array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre") ComboBox2.List = Array(2019, 2020, 2021, 2022, 2023, 2025, 2026, 2027, 2028, 2029, 2030) End Sub Sub MesJours() Année = ComboBox2: Mois = ComboBox1 On Error Resume Next jour = CDate("1-" & Mois & "-" & Année) Application.ScreenUpdating = 0 Application.EnableEvents = False: [C10] = jour Columns(31).Hidden = Month([AE10]) > Month([C10]) Columns(32).Hidden = Month([AF10]) > Month([C10]) Columns(33).Hidden = Month([AG10]) > Month([C10]) Application.EnableEvents = True End Sub
Ainsi on se passe de la référence à la feuille CONFIG pour ce qui est de la liste des mois et des années.
Option Explicit
Dim Mois, Année, jour
Private Sub ComboBox1_Change()
MesJours
End Sub
Private Sub ComboBox2_Change()
MesJours
End Sub
Private Sub Worksheet_Activate()
ComboBox1.List = Array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")
ComboBox2.List = Array(2019, 2020, 2021, 2022, 2023, 2025, 2026, 2027, 2028, 2029, 2030)
End Sub
Sub MesJours()
Année = ComboBox2: Mois = ComboBox1
On Error Resume Next
jour = CDate("1-" & Mois & "-" & Année)
Application.ScreenUpdating = 0
Application.EnableEvents = False: [C10] = jour
Columns(31).Hidden = Month([AE10]) > Month([C10])
Columns(32).Hidden = Month([AF10]) > Month([C10])
Columns(33).Hidden = Month([AG10]) > Month([C10])
Application.EnableEvents = True
End Sub
Sub Masquer_Jour()
Application.ScreenUpdating = False
With Feuil1
.Columns(31).Hidden = Month(.[AE10]) > Month(.[C10])
.Columns(32).Hidden = Month(.[AF10]) > Month(.[C10])
.Columns(33).Hidden = Month(.[AG10]) > Month(.[C10])
.Range("C11:AG50") = ""
End With
Application.ScreenUpdating = True
End Sub
Columns(31).Hidden etc..
dans les deux codes ?Marcel, tu jettes le bouchon un peu trop loin ...Pour info
Je ne joins jamais de fichier Excel
(Et ce depuis le 22/05/1968 à 22h43)