Créer un calendrier, Excel VBA

Créer un calendrier, Excel VBA

Créer un calendrier dans Excel avec VBA est un projet intéressant qui permet d’automatiser la création d’un calendrier mensuel dans une feuille Excel. Ce projet peut être utile pour générer des calendriers personnalisés, marquer des événements, ou simplement avoir un calendrier dynamique dans vos feuilles de calcul. 

Code VBA pour créer un calendrier 

Sub CreerCalendrier() 
    Dim ws As Worksheet 
    Dim mois As Integer 
    Dim annee As Integer 
    Dim premierJour As Date 
    Dim dernierJour As Date 
    Dim jour As Integer 
    Dim cellule As Range 
    Dim i As Integer, j As Integer 
    ' Demander à l'utilisateur le mois et l'année 
    mois = InputBox("Entrez le numéro du mois (1-12):") 
    annee = InputBox("Entrez l'année:") 
    ' Vérification de la validité du mois et de l'année 
    If mois < 1 Or mois > 12 Then 
        MsgBox "Mois invalide. Veuillez entrer un mois entre 1 et 12.", vbCritical 
        Exit Sub 
    End If 
    If annee < 1900 Or annee > 9999 Then 
        MsgBox "Année invalide. Veuillez entrer une année valide.", vbCritical 
        Exit Sub 
    End If 
    ' Créer une nouvelle feuille pour le calendrier 
    Set ws = ThisWorkbook.Sheets.Add 
    ws.Name = "Calendrier " & mois & "-" & annee 
    ' Calcul du premier et du dernier jour du mois 
    premierJour = DateSerial(annee, mois, 1) 
    dernierJour = DateSerial(annee, mois + 1, 0) 
    ' Titre du calendrier (mois et année) 
    ws.Cells(1, 1).Value = "Calendrier de " & MonthName(mois) & " " & annee 
    ws.Cells(1, 1).Font.Size = 16 
    ws.Cells(1, 1).Font.Bold = True 
    ws.Cells(1, 1).HorizontalAlignment = xlCenter 
    ws.Range("A1:F1").Merge 
    ' Entêtes des jours de la semaine 
    ws.Cells(2, 1).Value = "Dim" 
    ws.Cells(2, 2).Value = "Lun" 
    ws.Cells(2, 3).Value = "Mar" 
    ws.Cells(2, 4).Value = "Mer" 
    ws.Cells(2, 5).Value = "Jeu" 
    ws.Cells(2, 6).Value = "Ven" 
    ws.Cells(2, 7).Value = "Sam" 
    ws.Rows(2).Font.Bold = True 
    ' Remplir le calendrier avec les jours 
    jour = 1 
    For i = 3 To 8 ' Lignes du calendrier 
        For j = 1 To 7 ' Colonnes (jours de la semaine) 
            ' Si c'est le premier jour du mois, on commence à la bonne colonne 
            If i = 3 And j = Weekday(premierJour, vbSunday) Then 
                ws.Cells(i, j).Value = jour 
                jour = jour + 1 
            ' Remplir les jours suivants 
            ElseIf jour <= Day(dernierJour) Then 
                ws.Cells(i, j).Value = jour 
                jour = jour + 1 
            End If 
        Next j 
    Next i 
    ' Ajuster la taille des cellules 
    ws.Columns("A:G").ColumnWidth = 4 
    ws.Rows("2:8").RowHeight = 25 
    ' Format de la cellule pour les jours 
    For i = 3 To 8 
        For j = 1 To 7 
            Set cellule = ws.Cells(i, j) 
            cellule.HorizontalAlignment = xlCenter 
            cellule.VerticalAlignment = xlCenter 
        Next j 
    Next i 
    MsgBox "Calendrier créé pour " & MonthName(mois) & " " & annee, vbInformation 
End Sub

Explications du code : 

  1. Demande du mois et de l’année :
    Le code commence par demander à l’utilisateur de saisir le mois (de 1 à 12) et l’année via des boîtes de dialogue InputBox. Si les valeurs saisies sont incorrectes (par exemple, un mois en dehors de la plage 1-12), une alerte s’affiche et le processus est interrompu. 
  2. Création de la feuille de calcul :
    Une nouvelle feuille est créée pour afficher le calendrier. Cette feuille est renommée avec le format « Calendrier M-AAAA » (par exemple, « Calendrier 12-2024 »). 
  3. Calcul des dates :
    Le premier jour du mois est déterminé par DateSerial(annee, mois, 1) et le dernier jour du mois est trouvé en utilisant DateSerial(annee, mois + 1, 0), ce qui renvoie le dernier jour du mois précédent (donc du mois souhaité). 
  4. Titre du calendrier :
    Le titre « Calendrier de mois année » est inséré dans la cellule A1, et cette cellule est fusionnée avec les autres cellules de la ligne pour occuper toute la largeur du calendrier. 
  5. Entêtes des jours de la semaine :
    Les entêtes des jours de la semaine (Dimanche, Lundi, etc.) sont ajoutées dans la ligne 2. Ces cellules sont mises en gras pour mieux les distinguer. 
  6. Remplissage des jours du mois :
    Le remplissage du calendrier se fait ligne par ligne. Le code utilise une boucle pour ajouter les jours dans les bonnes cellules, en tenant compte du jour de la semaine du 1er jour du mois (Weekday(premierJour, vbSunday)). Il continue ensuite à remplir les jours suivants jusqu’au dernier jour du mois. 
  7. Ajustement de la taille des cellules :
    Les colonnes sont ajustées à une largeur fixe, et la hauteur des lignes est modifiée pour rendre le calendrier plus lisible. Les cellules sont également alignées au centre. 
  8. Message de confirmation :
    À la fin, un message MsgBox s’affiche pour informer l’utilisateur que le calendrier a été créé. 

Utilisation du code : 

  1. Accéder à l’éditeur VBA :
    Ouvrez Excel, puis appuyez sur Alt + F11 pour ouvrir l’éditeur VBA. 
  2. Ajouter un module :
    Dans l’éditeur VBA, allez dans Insertion > Module pour créer un nouveau module. 
  3. Copier le code :
    Copiez le code ci-dessus et collez-le dans le module. 
  4. Exécuter le code :
    Pour exécuter le code, appuyez sur F5 ou allez dans Exécution > Exécuter Sub/UserForm. 

Le calendrier sera généré dans une nouvelle feuille de calcul, avec le mois et l’année spécifiés. 

Personnalisation : 

  • Vous pouvez ajouter des événements ou des couleurs spécifiques aux jours du calendrier en modifiant la logique qui remplit les cellules. 
  • Vous pouvez également personnaliser les tailles de police et d’autres aspects visuels du calendrier. 
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x