Créer un calendrier déroulant, Excel VBA

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 : 

  1. Cliquez sur le bouton sur la feuille Excel. 
  2. La UserForm contenant le calendrier s’affiche. 
  3. 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 : 

  1. 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. 

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
1
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x