XL 2016 Cliquer sur un jour du calendrier pour aller dans une autre feuille

ReneDav14000

XLDnaute Occasionnel
Bonsoir à tous,
Dans le fichier joint, il y a une feuille "Calendrier" dans laquelle se trouve un calendrier des douze mois de l'année.
Dans les autres feuilles il y a le détail du mois à plat. Ces feuilles serviront d'agenda de travail.
Je souhaiterai mettre en place un code qui me permettrait lorsque je clique sur un jour du calendrier des 12 mois, d'aller directement à ce jour dans une feuille du classeur.
Par exemple : Je clique sur le 15 mars, alors la feuille Mars s'affiche et on se positionne au 15.
Avez-vous une idée de comment réaliser cela ?
J'ai essayé de chercher mais ce n'est pas facile de trouver les bons mots à mettre dans les moteurs de recherche.
Merci par avance pour vos suggestions.
 

Pièces jointes

  • agenda_macro .xlsm
    85.3 KB · Affichages: 14
Solution
Re

@ReneDav14000
Donc finalement, c'était bien des points ;)

Une formule possible pour masquer les jours "hors mois"
Ici pour janvier
=MOIS(C7)<>MOIS(DATE($F$2;1;1))

NB: Ta formule ne fonctionnait pas car C2 ce n'est pas une date, mais un nombre
(l'année sur 4 chiffres)

PS: J'ai oublié de te dire bravo pour ta persévérance ;)
Je vois que tu as réussi à mettre toutes les formules et la liste de validation.

Il reste le problème de la semaine 52/53 à traiter car selon le mois, on ne sera pas dans le bon agenda.
Exemple: En 2023
Semaine 52 en B7 et en AQ20, sauf que ce n'est pas la même année ;)
Donc problème pour le VBA dans la procédure évènementielle.

Staple1600

XLDnaute Barbatruc
Re

J'avais prévenu ;)
Staple à dit:
(et voir qu'il y aura des soucis à venir)
Selon la norme ISO, le 01/01/23 est dans la semaine 52.

NB: Quand la structure d'un classeur n'est pas "optimale", rien n'empeche de changer son fusil d'épaule ou son point de vue.

Qui formule la demande ?
Toi ?
Un tiers ?

PS: Il y a de nombreux exemples de calendriers/agenda sur le forum

Un exemple d'agencement simple est:
une seule feuille
avec deux spinbutton pour le choix de l'année et du mois.

Cela évite bien des complications et des messages d'erreur en provenance de VBA ;)
 
Dernière édition:

ReneDav14000

XLDnaute Occasionnel
Re

J'avais prévenu ;)

Selon la norme ISO, le 01/01/23 est dans la semaine 52.

NB: Quand la structure d'un classeur n'est pas "optimale", rien n'empeche de changer son fusil d'épaule ou son point de vue.

Qui formule la demande ?
Toi ?
Un tiers ?

PS: Il y a de nombreux exemples de calendriers/agenda sur le forum

Un exemple d'agence simple est:
une seule feuille
avec deux spinbutton pour le choix de l'année et du mois.

Cela évite bien des complications et des messages d'erreur en provenance de VBA ;)
J'ai regardé le lien que tu m'as donné il y des choses intéressantes.
La demande est faite par mon supérieur (pas facile)...
Je vais protéger les zones où ils ne devront pas aller en expliquant que l'on doit cliquer sur la première cellule, ça détournera le problème sans le régler, je l'avoue.
Merci encore mille fois pour ton aide. 👏
Je reviendrai en cas de besoin.
 

ReneDav14000

XLDnaute Occasionnel
Re

Pour sélectionner selon la semaine, tu peux voir de ce côté
(et voir qu'il y aura des soucis à venir)
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim N_SEM$
N_SEM = CStr(Application.IsoWeekNum(Target))
Worksheets(N_SEM).Activate
End Sub
Par exemple quid si tu sélectionnes la cellule Q6 de la feuille Calendrier ?
A partir de ce code, comment l'appliquer uniquement pour la zone k5:bk5
Merci
 

Staple1600

XLDnaute Barbatruc
Re

@ReneDav14000
Voici un petit exemple fait sur le pouce (le temps que ma soupe refroidisse)
(que permet Excel 365)
Juste deux formules (avec SEQUENCE) , deux MFC, et une liste de validation et controle de formulaire
(pas de VBA)
NB: J'ai oublié : il y a une troisième formule pour le N° de semaine.
Exemple_Calendrier.png
 

Staple1600

XLDnaute Barbatruc
Re

@ReneDav14000
Pour répondre à ta demande
(mais là encore, il y aura un problème)
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim N_SEM$
On Error Resume Next
If Not Intersect(Target, [B6:BK6]) Is Nothing Then
N_SEM = CStr(Application.IsoWeekNum(Target))
Worksheets(N_SEM).Activate
End If
End Sub

EDITION: Bonsoir job75
Merci pour la précision.
 

ReneDav14000

XLDnaute Occasionnel
Re

@ReneDav14000
Voici un petit exemple fait sur le pouce (le temps que ma soupe refroidisse)
(que permet Excel 365)
Juste deux formules (avec SEQUENCE) , deux MFC, et une liste de validation et controle de formulaire
(pas de VBA)
NB: J'ai oublié : il y a une troisième formule pour le N° de semaine.
Regarde la pièce jointe 1154570
Merci beaucoup Staple1600, c'est très intéressant comme approche.
Serait-il possible d'avoir ton exemple pour que je puisse l'adapter afin qu'apparaissent les semaines en agenda.
Sinon, ce ne pas grave je vais essayer de le faire ça pourra permettre d'avoir 3 propositions à présenter à mon chef.
Encore merci pour l'idée
 

Staple1600

XLDnaute Barbatruc
Re

@ReneDav14000
Retrouvé dans mes archives
J'ai fait une petite macro juste pour que tu puisses tester plus facilement
Donc sur un classeur vierge, lance la macro ci-dessous
NB: La macro ne doit servir qu'à insérer les formules.
Puisque l'interet est de montrer qu'on peut réaliser un petit calendrier avec une seule formule matricielle.
Code:
Sub Calendrier_Formule_MAT()
[B3:H3] = [{"L","M","M","J","V","S","D"}]: [B1] = "2022": [F1] = "12": [E1] = "=(""1-""&RC[1])*1"
[I1] = "=DATE(RC[-7],RC[-3],1)-WEEKDAY(DATE(RC[-7],RC[-3],1),2)": [B4:H9].FormulaArray = "={0;1;2;3;4;5}*7+{1,2,3,4,5,6,7}+R[-3]C[7]"
[B4:H9].NumberFormat = "d/mm": [E1].NumberFormat = "mmmm": [I1].NumberFormat = ";;;": [A1] = "ANNEE": [D1] = "MOIS"
[B3].CurrentRegion.Borders.Value = 1: [B1,F1].Interior.Color = vbYellow: [B1,F1].Font.Bold = -1
End Sub
Ensuite pour tester, ne modifie que les cellules jaunes.
(en B1 saisir une année (sur 4 chiffres) et en F1 un mois de 1 à 12)
Il ne faut pas saisir de date

Redis-moi si cela fonctionne sur ton PC
(ou si tu as des questions sur la formule matricielle que tu peux voir en sélectionnant la plage de cellules B4:H9)

(On peut ensuite ajouter quelques améliorations esthétiques avec MFC et Données/Validation (choix année) et l'ajout d'un contrôle formulaire (choix des mois) => une toupie ou une barre de défilement)

Ci-dessous, le résultat de la macro avec quelques ajouts cités plus haut.
Calendrier2.png
 

ReneDav14000

XLDnaute Occasionnel
Re

@ReneDav14000
Retrouvé dans mes archives
J'ai fait une petite macro juste pour que tu puisses tester plus facilement
Donc sur un classeur vierge, lance la macro ci-dessous
NB: La macro ne doit servir qu'à insérer les formules.
Puisque l'interet est de montrer qu'on peut réaliser un petit calendrier avec une seule formule matricielle.
Code:
Sub Calendrier_Formule_MAT()
[B3:H3] = [{"L","M","M","J","V","S","D"}]: [B1] = "2022": [F1] = "12": [E1] = "=(""1-""&RC[1])*1"
[I1] = "=DATE(RC[-7],RC[-3],1)-WEEKDAY(DATE(RC[-7],RC[-3],1),2)": [B4:H9].FormulaArray = "={0;1;2;3;4;5}*7+{1,2,3,4,5,6,7}+R[-3]C[7]"
[B4:H9].NumberFormat = "d/mm": [E1].NumberFormat = "mmmm": [I1].NumberFormat = ";;;": [A1] = "ANNEE": [D1] = "MOIS"
[B3].CurrentRegion.Borders.Value = 1: [B1,F1].Interior.Color = vbYellow: [B1,F1].Font.Bold = -1
End Sub
Ensuite pour tester, ne modifie que les cellules jaunes.
(en B1 saisir une année (sur 4 chiffres) et en F1 un mois de 1 à 12)
Il ne faut pas saisir de date

Redis-moi si cela fonctionne sur ton PC
(ou si tu as des questions sur la formule matricielle que tu peux voir en sélectionnant la plage de cellules B4:H9)

(On peut ensuite ajouter quelques améliorations esthétiques avec MFC et Données/Validation (choix année) et l'ajout d'un contrôle formulaire (choix des mois) => une toupie ou une barre de défilement)

Ci-dessous, le résultat de la macro avec quelques ajouts cités plus haut. Regarde la pièce jointe 1154580
Bonjour Staple1600
Merci beaucoup pour cet exemple.
Où dois-je insérer cette macro, dans thisworkbook, la feuille ?
Je vais essayer dans l'une ou l'autre en attendant.
Encore merci
 

ReneDav14000

XLDnaute Occasionnel
Je viens de tester, le code dans un module et appelle dans la feuille.
C'est très intéressant comme façon de faire. Il faudrait pouvoir y adjoindre un code pour accéder aux autres feuilles en cliquant sur la cellule du jour.
Il faudrait également cacher les jours qui n'ont rien à voir avec le mois. Avec des MFC je devrais pouvoir y arriver.
Il faut aussi calculer les numéros de semaine
 
Dernière édition:

ReneDav14000

XLDnaute Occasionnel
Re

@ReneDav14000
Pour répondre à ta demande
(mais là encore, il y aura un problème)
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim N_SEM$
On Error Resume Next
If Not Intersect(Target, [B6:BK6]) Is Nothing Then
N_SEM = CStr(Application.IsoWeekNum(Target))
Worksheets(N_SEM).Activate
End If
End Sub

EDITION: Bonsoir job75
Merci pour la précision.
Comment dire que si dans la sélection il y une cellule vide alors la macro ne se déclenche pas ?
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki