Microsoft 365 Génération automatique calendrier par année

Etoto

XLDnaute Barbatruc
Hello la team, ça faisait un moment, j'espère que vous allez bien.

On m'a confié un travail de rendre un planning d'absences plus automatique. Si vous voyez dans le fichier joint, l'année dans la cellule A1 permet de générer le tableau de dessous grâce à des formules et MFC.

Je rencontre toutefois deux problèmes, le premier est que les bordures MFC créent des trous dans les bordures 'permanentes', est-ce possible de régler ce problème ?

Le deuxième problème est que dans la ligne 3, j'ai fait une formule dynamique qui permet d'afficher le mois de manière dynamique si on change l'année, toutefois, avoir des formules qui s'enchaînent empêche les textes d'apparaître en entier, je sais pas i une approche VBA serait utile dans le cas présent.

Si vous avez d'autres idées ou des suggestions pour le rendre meilleur, dites-le-moi également, je suis toujours ouvert à vos suggestions de qualité.

Je reste à disposition si besoin de plus d'infos.

PS : Les noms sont falsifiés bien évidemment.
 

Pièces jointes

  • Planning test - Copie.xlsx
    38.4 KB · Affichages: 4
Solution
Bonjour.
Le problème des bordures venait de ce que la MeFC définissait ça sans bordure autre que celle de gauche. Effacer tout puis mettre seulement bordure gauche pour laisser les autres comme assumées par ailleurs.
J'ai ajouté ça dans le module de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address <> "$A$1" Then Exit Sub
   Application.EnableEvents = False
   [B4].FormulaR1C1 = "=DATE(RIGHT(R1C1,4),1,1)"
   [C4:JC4].FormulaR1C1 = "=RC[-1]+(WEEKDAY(RC[-1],2)=5)*2+1"
   With [B3:JC3]
      .FormulaR1C1 = "=IF(MONTH(R4C)<>MONTH(R4C[-1]),TEXT(R4C,""mmmm""),NA())"
      .SpecialCells(xlCellTypeFormulas, 16).ClearContents
 
      .HorizontalAlignment = xlCenterAcrossSelection
      End With...

Dranreb

XLDnaute Barbatruc
Bonjour.
Le problème des bordures venait de ce que la MeFC définissait ça sans bordure autre que celle de gauche. Effacer tout puis mettre seulement bordure gauche pour laisser les autres comme assumées par ailleurs.
J'ai ajouté ça dans le module de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address <> "$A$1" Then Exit Sub
   Application.EnableEvents = False
   [B4].FormulaR1C1 = "=DATE(RIGHT(R1C1,4),1,1)"
   [C4:JC4].FormulaR1C1 = "=RC[-1]+(WEEKDAY(RC[-1],2)=5)*2+1"
   With [B3:JC3]
      .FormulaR1C1 = "=IF(MONTH(R4C)<>MONTH(R4C[-1]),TEXT(R4C,""mmmm""),NA())"
      .SpecialCells(xlCellTypeFormulas, 16).ClearContents
 
      .HorizontalAlignment = xlCenterAcrossSelection
      End With
   [B5:JC5].FormulaR1C1 = "=MID(""LuMaMeJeVe"",2*WEEKDAY(R[-1]C,2)-1,2)"
   Application.EnableEvents = True
   End Sub
Ce n'est pas parfait, il faudrait encore veiller à ce que la dernière colonne ne concerne pas l'année suivante …
 

Pièces jointes

  • ClasEtoto.xlsm
    35.9 KB · Affichages: 5
Dernière édition:

Etoto

XLDnaute Barbatruc
Hello,

C'est vraiment super pour les bordures, ça donne bien et classe.

Concernant l'affichage des mois, certains mois renvoient l'erreur NA selon l'année sélectionnée, il semblerait que le problème est dû à la formule
VB:
=IF(MONTH(R4C)<>MONTH(R4C[-1]),TEXT(R4C,""mmmm""),NA())
qui ne se place pas entre deux mois mais au début de certains, ce qui renvoient un FAUX dans le IF.

Tu as une solution ? Merci beaucoup pour ton aide d'ailleurs, j'ai toujours trouvé compliqué l'idée de placer une formule automatiquement et dynamiquement à une donnée.

Merci.
 

Pièces jointes

  • ClasEtoto.xlsm
    25.9 KB · Affichages: 1

Discussions similaires

  • Question
Microsoft 365 Planning
Réponses
2
Affichages
2 K