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 :
- 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. - 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 »). - 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é). - 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. - 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. - 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. - 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. - Message de confirmation :
À la fin, un message MsgBox s’affiche pour informer l’utilisateur que le calendrier a été créé.
Utilisation du code :
- Accéder à l’éditeur VBA :
Ouvrez Excel, puis appuyez sur Alt + F11 pour ouvrir l’éditeur VBA. - Ajouter un module :
Dans l’éditeur VBA, allez dans Insertion > Module pour créer un nouveau module. - Copier le code :
Copiez le code ci-dessus et collez-le dans le module. - 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.