Calendrier qui conserve les données

Axel98

XLDnaute Nouveau
Bonjour,

Je viens à votre rencontre car j'ai un problème sur mon calendrier.

Sur le fichier, ci-joint, vous avez 2 feuilles : Accueil qui reprend les données utile pour mon calendrier qui se situe sur la deuxième feuille. On peut changer l'année du calendrier sur la feuille accueil en modifiant simplement l'année et celui-ci se met à jour.
Sur le calendrier, des boutons permettent de remplir les cases en fonctions de ce que les personnes sont entrain de faire : s'ils sont au bureau, en congé, en déplacement etc.


Ma question est : je construis mon planning pendant l'année. Arrivé en décembre, il a des actions qui vont déborder sur l'année prochaine. Mais si je change d'année les informations reste. Je souhaite qu'en changeant d'année les informations disparaisse. Mais si on revient sur une année déjà complétée les informations soient toujours là.

Est ce que c'est possible ?

Merci pour votre réponse,

Bien à vous,

Axel
 

Pièces jointes

  • Gestion Personnel - (Version_1).xlsm
    70.3 KB · Affichages: 24

job75

XLDnaute Barbatruc
Bonjour Axel98, mapomme,

Si la disposition des tableaux des mois est immuable on peut mémoriser les valeurs des mois dans des noms définis.

Le code de la feuille "Calendrier" du fichier joint (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Deactivate()
Dim P As Range, i As Byte, nom As Name
Set P = [B4:AE11] 'à adapter éventuellement
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
For i = 1 To 12
    P.SpecialCells(xlCellTypeBlanks) = "=""""" 'texte vide dans les cellules vides (évite les #N/A)
    Set nom = ThisWorkbook.Names.Add("Memo" & Format(P(-1, 0), "yyyy_mm"), P.Value) 'mémorise dans un nom défini
    'nom.Visible = False 'facultatif, masque le nom
    Set P = P.Offset(13) 'mois suivant
Next
End Sub

Private Sub Worksheet_Activate()
Dim P As Range, i As Byte, nom As String
Set P = [B4:AE11] 'à adapter éventuellement
Application.ScreenUpdating = False
For i = 1 To 12
    nom = "Memo" & Format(P(-1, 0), "yyyy_mm")
    If IsArray(Evaluate(nom)) Then P.FormulaArray = "=" & nom Else P = "" 'restitution par formule matricielle
    P = P.Value 'supprime la formule
    Set P = P.Offset(13) 'mois suivant
Next
End Sub
PS : pourquoi vos mois ont au maximum 30 jours ???

A+
 

Pièces jointes

  • Gestion Personnel(1).xlsm
    81 KB · Affichages: 9

Discussions similaires