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.
@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.
Bonjour Staple1600,
Je suis d'accord, mais la demande est ainsi formulée, avec un calendrier dans chaque semaine, inutile soit....
Si encore ils servaient à quelque chose, pourquoi pas, mais là
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.
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 ?
@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.
@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
@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
@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.
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.
@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.
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)
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
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
@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