Excel calendrier interactif

 Excel Pros : Créez un calendrier interactif + notes pour planifier rendez-vous, réunions, projets... pour tous les mois de l'année !



🎯 Dans ce tutoriel Excel, je vais vous montrer comment créer un calendrier mensuel interactif et le dupliquer facilement pour les douze mois de l'année.


📅 La mise en forme conditionnelle appliquée sur le calendrier vous signale que vous avez programmé une réunion, ou des rendez-vous sur des dates.


🔗 De plus, grâce à des liens hypertextes pour chaque jour du calendrier, vous pouvez facilement accéder aux détails de chaque note que vous avez enregistrée.


👀 Vous bénéficiez ainsi d'une vue d'ensemble claire et structurée de votre emploi du temps !

👍 Mais ce n'est pas tout, ce calendrier peut être facilement adapté et utilisé pour les années suivantes, vous assurant une organisation continue et sans faille.


🔋 Par ailleurs, même en cas de coupure d'Internet, votre planning reste toujours accessible, vous assurant ainsi une organisation en toutes circonstances. 👍



Voir la vidéo pour découvrir les différentes étapes :


Excel Pros : Calendrier mensuel Interactif + Notes pour Planifier Rendez-vous, Réunions, Projets... pour les douze mois de l'année



Pour vous entraîner et répéter les étapes de ce tutoriel :

-> Télécharger le fichier Excel utilisé dans la vidéo
👇
Après avoir ouvert le lien,
  • vous cliquez sur "Fichier",
  • puis sur "Enregistrer sous", ou sur "Créer une copie"
  • et sur "Télécharger une copie".



📌↪️→ Code VBA à utiliser pour créer un calendrier interactif par mois

1ère macro à insérer sur une feuille de module : 

Sub CreerFeuillesPourLAnnee()
    Dim ws As Worksheet
    Dim newWs As Worksheet
    Dim mois As Integer
    Dim i As Integer
    
    ' Boucle pour chaque mois de l'année
    For mois = 1 To 12
        ' Ajouter une nouvelle feuille
        Set newWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        newWs.Name = StrConv(MonthName(mois), vbProperCase)
        
        ' Copier les formules de la feuille de base
        ThisWorkbook.Sheets("Matrice").Cells.Copy Destination:=newWs.Cells
        
        ' Modifier les formules pour le mois courant
        newWs.Cells(3, 3).Formula = "=DATE($B$1," & mois & ",1) - WEEKDAY(DATE($B$1," & mois & ",1), 2) + 1"
        For i = 4 To 8
            newWs.Cells(i, 3).Formula = "=C" & i - 1 & "+7"
        Next i
        For i = 3 To 8
            newWs.Cells(i, 4).Formula = "=C" & i & "+1"
            newWs.Cells(i, 5).Formula = "=C" & i & "+2"
            newWs.Cells(i, 6).Formula = "=C" & i & "+3"
            newWs.Cells(i, 7).Formula = "=C" & i & "+4"
            newWs.Cells(i, 8).Formula = "=C" & i & "+5"
            newWs.Cells(i, 9).Formula = "=C" & i & "+6"
        Next i
        
        ' Ajouter le nom de l'onglet dans la cellule A1
        newWs.Cells(1, 1).Value = newWs.Name
        
        ' Formater les colonnes L et M
        With newWs.Range("L3:L33")
            .NumberFormat = "hh:mm"
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .ColumnWidth = 7
            .WrapText = True
        End With
        With newWs.Range("M3:M33")
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlCenter
            .ColumnWidth = 36
            .WrapText = True
        End With
        
        ' Ajouter et formater la colonne N
        With newWs.Range("N3:N33")
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlCenter
            .ColumnWidth = 31
            .WrapText = True
        End With
        
        ' Définir la hauteur initiale des lignes à 35
        newWs.Rows("3:33").RowHeight = 35
    Next mois
End Sub
Sub AppliquerMiseEnFormeConditionnelle()
    Dim ws As Worksheet
    Dim mois As Integer
    Dim formule1 As String
    Dim formule2 As String
    
    ' Boucle pour chaque mois de l'année
    For mois = 1 To 12
        ' Définir le nom de la feuille
        Set ws = ThisWorkbook.Sheets(MonthName(mois))
        
        ' Construire les formules dans des variables
        formule1 = "=ET(RECHERCHEV(JOUR(C3);$K$3:$K$33;1;FAUX)=JOUR(C3);MOIS(C3)=" & mois & ")"
        formule2 = "=MOIS(C3)<>MOIS(DATE($B$1;" & mois & ";1))"
        
        ' Appliquer les mises en forme conditionnelles
        With ws.Range("C3:I8").FormatConditions
            .Delete
            .Add Type:=xlExpression, Formula1:=formule1
            .Item(1).Interior.Color = RGB(255, 204, 204) ' Couleur de remplissage
            .Add Type:=xlExpression, Formula1:=formule2
            .Item(2).Font.Color = RGB(166, 166, 166) ' Couleur de police
        End With
    Next mois
End Sub
Sub AjouterLiensHypertextesAvecFormules()
    Dim ws As Worksheet
    Dim cell As Range
    Dim mois As Integer
    
    ' Boucle pour chaque mois de l'année
    For mois = 1 To 12
        ' Définir le nom de la feuille
        Set ws = ThisWorkbook.Sheets(MonthName(mois))
        
        ' Boucle pour chaque cellule du calendrier
        For Each cell In ws.Range("C3:I8")
            ' Vérifier si la cellule contient une date valide et si le mois correspond
            If IsDate(cell.Value) And Month(cell.Value) = mois Then
                ' Construire le lien hypertexte vers la cellule correspondante dans la colonne K
                ws.Hyperlinks.Add Anchor:=cell, address:="", subAddress:="'" & ws.Name & "'!K" & (Day(cell.Value) + 2), textToDisplay:=CStr(cell.Value)
            End If
        Next cell
        
        ' Boucle pour chaque cellule de la colonne K
        For Each cell In ws.Range("K3:K33")
            ' Ajouter un lien hypertexte vers la cellule A1 sans afficher de texte
            ws.Hyperlinks.Add Anchor:=cell, address:="", subAddress:="'" & ws.Name & "'!A1", textToDisplay:=" "
        Next cell
    Next mois
End Sub
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    ' Faire défiler jusqu'à la cellule sélectionnée
    Application.Goto Reference:=Range(Target.subAddress), Scroll:=True
End Sub




2ème macro à insérer dans "Thisworkbook" :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim cell As Range
    Dim rng As Range
    Set rng = Intersect(Target, Sh.Range("L3:N33"))
    
    If Not rng Is Nothing Then
        For Each cell In rng
            If cell.WrapText = True Then
                cell.Rows.AutoFit
                If cell.RowHeight < 35 Then
                    cell.RowHeight = 35
                End If
            End If
        Next cell
    End If
End Sub





Un autre tutoriel qui pourrait vous intéresser :








Posts les plus consultés de ce blog

Suivi des stocks et inventaire avec alerte

Listes déroulantes multi-sélections

Cases à cocher interactives sur Excel