Création d’un Sélecteur d’Heure (Time Picker) dans un UserForm, Excel VBA

Création d’un Sélecteur d’Heure (Time Picker) dans un UserForm, Excel VBA
Un Sélecteur d’Heure dans un UserForm Excel permet aux utilisateurs de sélectionner facilement une heure au lieu de la saisir manuellement. Étant donné qu’Excel VBA n’a pas de contrôle intégré pour un sélecteur d’heure, nous allons créer un sélecteur d’heure personnalisé à l’aide de ListBox, SpinButtons et TextBoxes.
Caractéristiques de notre Sélecteur d’Heure Personnalisé

  • Sélection des heures, des minutes et AM/PM
  • Boutons Spin pour augmenter/diminuer les heures et les minutes
  • Liste déroulante pour sélectionner AM ou PM
  • Boutons OK et Annuler pour confirmer ou fermer le sélecteur
  • Validation de l’entrée de l’heure

Étapes de la Mise en Œuvre
1. Conception du UserForm
Nous allons créer un UserForm nommé TimePickerForm avec les contrôles suivants :

Type de Contrôle Nom But
Label lblHeures Affiche le texte « Heures »
TextBox txtHeures Affiche l’heure sélectionnée
SpinButton spnHeures Augmente/Diminue l’heure
Label lblMinutes Affiche le texte « Minutes »
TextBox txtMinutes Affiche les minutes sélectionnées
SpinButton spnMinutes Augmente/Diminue les minutes
Label lblAMPM Affiche le texte « AM/PM »
ComboBox cmbAMPM Permet de sélectionner AM ou PM
Button btnOK Confirme l’heure sélectionnée
Button btnCancel Annule et ferme le formulaire

2. Code VBA pour le UserForm
Voici le code VBA détaillé pour gérer les fonctionnalités du sélecteur d’heure.
Code VBA pour le UserForm :

Option Explicit
' Déclare une variable pour stocker l'heure sélectionnée
Public SelectedTime As String
' Initialiser le sélecteur d'heure lors du chargement du formulaire
Private Sub UserForm_Initialize()
    ' Définir l'heure par défaut à 12:00 AM
    txtHeures.Text = "12"
    txtMinutes.Text = "00"
    ' Remplir la liste déroulante AM/PM
    cmbAMPM.AddItem "AM"
    cmbAMPM.AddItem "PM"
    cmbAMPM.ListIndex = 0 ' Par défaut AM
    ' Définir les propriétés des boutons Spin
    spnHeures.Min = 1
    spnHeures.Max = 12
    spnHeures.Value = 12
    spnMinutes.Min = 0
    spnMinutes.Max = 59
    spnMinutes.Value = 0
End Sub
' Gérer le changement de l'heure avec le bouton Spin
Private Sub spnHeures_Change()
    txtHeures.Text = Format(spnHeures.Value, "00")
End Sub
' Gérer le changement des minutes avec le bouton Spin
Private Sub spnMinutes_Change()
    txtMinutes.Text = Format(spnMinutes.Value, "00")
End Sub
' Gérer la saisie manuelle dans la TextBox des heures
Private Sub txtHeures_Change()
    Dim h As Integer
    If IsNumeric(txtHeures.Text) Then
        h = CInt(txtHeures.Text)
        If h >= 1 And h <= 12 Then spnHeures.Value = h Else txtHeures.Text = "12" ' Réinitialiser si la saisie est invalide End If Else txtHeures.Text = "12" End If End Sub ' Gérer la saisie manuelle dans la TextBox des minutes Private Sub txtMinutes_Change() Dim m As Integer If IsNumeric(txtMinutes.Text) Then m = CInt(txtMinutes.Text) If m >= 0 And m <= 59 Then
            spnMinutes.Value = m
        Else
            txtMinutes.Text = "00" ' Réinitialiser si la saisie est invalide
        End If
    Else
        txtMinutes.Text = "00"
    End If
End Sub
' Gérer le clic sur le bouton OK - Sauvegarder l'heure sélectionnée
Private Sub btnOK_Click()
    SelectedTime = txtHeures.Text & ":" & txtMinutes.Text & " " & cmbAMPM.Text
    Me.Hide ' Cacher le formulaire au lieu de le fermer
End Sub
' Gérer le clic sur le bouton Annuler - Fermer sans sauvegarder
Private Sub btnCancel_Click()
    SelectedTime = "" ' Réinitialiser l'heure
    Me.Hide
End Sub

3. Utilisation du Sélecteur d’Heure dans votre Code VBA
Pour afficher le sélecteur d’heure et récupérer l’heure sélectionnée, utilisez la macro suivante dans un module :

Sub ShowTimePicker()
    Dim TimePicker As New TimePickerForm
    ' Afficher le UserForm
    TimePicker.Show vbModal
    ' Récupérer l'heure sélectionnée
    If TimePicker.SelectedTime <> "" Then
        MsgBox "Vous avez sélectionné : " & TimePicker.SelectedTime, vbInformation, "Sélecteur d'Heure"
    Else
        MsgBox "Sélection de l'heure annulée.", vbExclamation, "Sélecteur d'Heure"
    End If
End Sub

4. Explication du Fonctionnement
1. UserForm_Initialize initialise les valeurs par défaut (12:00 AM).
2. Les boutons Spin ajustent les heures (spnHeures_Change) et les minutes (spnMinutes_Change).
3. La saisie manuelle dans les TextBoxes est validée (txtHeures_Change et txtMinutes_Change).
4. En cliquant sur « OK », l’heure sélectionnée est sauvegardée et le formulaire est caché.
5. En cliquant sur « Annuler », le formulaire est caché sans sauvegarder.
6. La macro ShowTimePicker lance le sélecteur d’heure et affiche l’heure sélectionnée.
Améliorations Possibles

  • Vous pouvez formater l’heure sélectionnée en format 24 heures.
  • Vous pouvez intégrer un sélecteur de date pour obtenir à la fois date et heure.
  • Vous pouvez ajouter un label de prévisualisation qui affiche dynamiquement l’heure sélectionnée.

Conclusion
Ce sélecteur d’heure personnalisé offre une manière interactive et conviviale de sélectionner des valeurs d’heure dans Excel. Puisqu’Excel VBA ne propose pas de contrôle intégré pour le sélecteur d’heure, cette méthode offre une solution flexible qui garantit précision et facilité d’utilisation.

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