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.