Créer un calendrier déroulant, Excel VBA
Créer un calendrier déroulant (ou un sélecteur de date) dans Excel à l’aide de VBA (Visual Basic for Applications) implique généralement l’utilisation d’un contrôle calendrier ou d’une boîte de dialogue personnalisée. Cependant, Excel ne fournit pas directement un contrôle calendrier dans toutes les versions, mais on peut contourner cela en utilisant un contrôle de formulaire ou une UserForm (un formulaire personnalisé).
Voici les étapes détaillées pour créer un calendrier déroulant à l’aide de VBA dans Excel, avec un code VBA simple :
Étape 1 : Ajouter un contrôle de calendrier dans une UserForm
1. Ouvrir l’éditeur VBA :
- Ouvrez Excel et appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
2. Créer une nouvelle UserForm :
- Dans l’éditeur VBA, allez dans le menu Insertion et sélectionnez UserForm pour créer une nouvelle UserForm.
3. Ajouter un contrôle calendrier :
- Dans la boîte à outils de l’éditeur VBA, recherchez un contrôle Microsoft Date and Time Picker Control ou Microsoft Calendar Control. Si ces contrôles ne sont pas disponibles (cela peut varier selon la version d’Excel), nous allons simuler un calendrier via un autre mécanisme (voir plus bas).
Si le contrôle n’est pas visible, faites un clic droit sur la boîte à outils, choisissez « Contrôles supplémentaires », puis ajoutez le contrôle calendrier si possible.
4. Ajouter un bouton pour ouvrir le calendrier :
- Vous pouvez ajouter un Bouton à la feuille Excel pour ouvrir la UserForm.
Étape 2 : Créer un bouton pour afficher le calendrier
Retournez à votre feuille Excel, puis ajoutez un bouton en suivant ces étapes :
1. Insérer un bouton :
- Allez dans l’onglet Développeur, puis cliquez sur Insérer et choisissez un bouton de formulaire.
- Placez le bouton sur la feuille.
2. Attribuer une macro au bouton :
- Cliquez droit sur le bouton, puis choisissez « Attribuer une macro », puis sélectionnez « Nouvelle » pour créer une macro.
Étape 3 : Code VBA pour afficher le calendrier
Voici un exemple de code VBA pour ouvrir un calendrier déroulant lorsque vous cliquez sur un bouton. Ce code utilise une UserForm simple avec un contrôle DatePicker, et il affiche la date sélectionnée dans une cellule de la feuille Excel.
Code pour la UserForm : Si vous avez ajouté un contrôle calendrier sur la UserForm, voici le code à utiliser :
' Code de la UserForm Private Sub Calendar1_Click() ' Une fois qu'une date est sélectionnée dans le calendrier, on met cette date dans la cellule active ActiveCell.Value = Calendar1.Value ' Fermer la UserForm après sélection Me.Hide End Sub
Code pour afficher la UserForm avec le calendrier : Ce code ouvre la UserForm lorsque vous cliquez sur le bouton dans Excel.
Sub OuvrirCalendrier() ' Afficher la UserForm contenant le calendrier UserForm1.Show End Sub
Étape 4 : Utilisation de l’UserForm
Maintenant que vous avez créé la UserForm et attaché la macro au bouton :
- Cliquez sur le bouton sur la feuille Excel.
- La UserForm contenant le calendrier s’affiche.
- Vous sélectionnez une date, et elle est automatiquement insérée dans la cellule active de la feuille Excel.
Option sans contrôle DatePicker (si pas disponible)
Si le contrôle DatePicker n’est pas disponible, vous pouvez créer un calendrier personnalisé avec des boutons et des labels pour afficher les mois et années. Voici un exemple simple :
- Créer un calendrier à l’aide de labels et de boutons : Vous pouvez générer un calendrier personnalisé avec des boutons représentant les jours d’un mois donné. C’est un peu plus complexe et nécessite d’utiliser des boucles et des événements pour mettre à jour le calendrier chaque mois.
Code VBA pour un calendrier sans contrôle DatePicker
Voici un code pour créer un calendrier simple dans une UserForm avec des boutons représentant les jours.
Private Sub UserForm_Initialize() ' Initialisation du calendrier Dim i As Integer Dim j As Integer Dim d As Date Dim startDay As Integer Dim lastDay As Integer Dim currentMonth As Integer Dim currentYear As Integer currentMonth = Month(Date) currentYear = Year(Date) ' Premier jour du mois d = DateSerial(currentYear, currentMonth, 1) startDay = Weekday(d, vbSunday) ' Dernier jour du mois lastDay = Day(DateSerial(currentYear, currentMonth + 1, 1) - 1) ' Effacer les anciens boutons For i = 1 To 42 Me.Controls("Button" & i).Visible = False Next i ' Remplir les boutons avec les jours For i = 1 To lastDay Me.Controls("Button" & (startDay + i - 1)).Caption = i Me.Controls("Button" & (startDay + i - 1)).Visible = True Next i End Sub Private Sub CommandButton1_Click() ' Fonction pour revenir au mois précédent currentMonth = currentMonth - 1 If currentMonth = 0 Then currentMonth = 12 currentYear = currentYear - 1 End If Call UserForm_Initialize End Sub Private Sub CommandButton2_Click() ' Fonction pour aller au mois suivant currentMonth = currentMonth + 1 If currentMonth = 13 Then currentMonth = 1 currentYear = currentYear + 1 End If Call UserForm_Initialize End Sub
Conclusion
Cette approche montre comment vous pouvez créer un calendrier déroulant dans Excel en utilisant une UserForm. Vous pouvez personnaliser le calendrier pour répondre à vos besoins spécifiques, par exemple, en ajustant la mise en forme, les boutons, ou même en permettant à l’utilisateur de sélectionner une date dans une liste déroulante. Si vous avez des limitations sur les contrôles disponibles dans votre version d’Excel, une solution avec des boutons et des labels peut être une bonne alternative.