Le selecteur d'heure

Bonjour à tous, et au secours !!!!!!!

Je cherche depuis longtemps une sélecteur horaire pour compléter les saisies de formulaires. Pourquoi me direz vous puisqu'il suffit de taper 11:40 et le tour est joué !

Justement j'en ai marre de taper de cette façon j'ai donc tenté de reformuler ça à partir de différends modèles mais c'est galère et j'arrive pas à gérer mes toupies et la saisie manuelle. L'option AM/PM est pas obligatoire mais j'ai trouvé que c'était un plus.je vous joint mon fichier excel en espérant que vous pourrez m'aider.

Merci d'avance,

cordialement

Bonsoir,

une proposition en passant avec une scrollbar :

Private Sub ScrollBar1_Change()
    TextBox1 = Format(CDate(ScrollBar1.Value) / 1440, "hh:mm")
End Sub

et son paramétrage :

ScrollBar1.Min = 1
ScrollBar1.Max = 1440
ScrollBar1.LargeChange = 1

Le fichier :

@ bientôt

LouReeD

Bonsoir,

pour ceux qui se demandent : mais pourquoi 1440 ? C'est juste qu'il y a 1440 minutes dans une journée, d'où le déplacement de minute en minute grâce à la scrollbar.
Si une précision à 10 minutes suffit alors 144... 5 minutes ? je suppose 288...

@ bientôt

LouReeD

Bonjour à tous, Bonjour Jean-Jacques
Quand vous programmez faites très attention au nom de vos variables.
Pour ne pas casser l'encapsulation du formulaire il vaut mieux utiliser une propriété :
Private mSelectedTime As String

Public Property Get SelectedTime() As String
    SelectedTime = mSelectedTime
End Property
' // Vous pouvez utiliser aussi la propriété Let si vous voulez renseigner une heure
'Public Property Let SelectedTime(ByVal NewValue As String)
'
'End Property

J'ai modifier votre code et mis des commentaires d'explication pensez à gérer aussi l'évènement 'QueryClose' de la fenêtre si vous la cachez...

Voici le code du formulaire :

Option Explicit
' Déclare une variable pour stocker l'heure sélectionnée

Private heure As String
Private minute As String
Private AmPm As String
Private mSelectedTime As String

Public Property Get SelectedTime() As String
    SelectedTime = mSelectedTime
End Property

' // Vous pouvez utiliser aussi la propriété Let si vous voulez renseigner une heure
Public Property Let SelectedTime(ByVal NewValue As String)
    Dim tempString As Variant
    If InStr(1, NewValue, ":", vbTextCompare) Then

        tempString = Split(NewValue, ":", -1, vbTextCompare)
        heure = Format$(tempString(0), "00")

        If InStr(1, tempString(1), " ", vbTextCompare) Then
            Dim tempMinute As Variant
            tempMinute = Split(tempString(1), " ", -1, vbTextCompare)
            minute = tempMinute(0)
            AmPm = tempMinute(1)
        End If
        heureSaisie.Value = heure
        minuteSaisie.Value = minute
        Cmb_AMPM.Value = AmPm

        mSelectedTime = NewValue
    End If
End Property

' // 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
    heureSaisie.Value = "12"
    minuteSaisie.Value = "00"
    ' Remplir la liste déroulante AM/PM
    With Cmb_AMPM
        .List = VBA.Array("AM", "PM")
        .ListIndex = 0                                          ' Par défaut AM
    End With

    ' // Définir les propriétés des boutons Spin
    ' // L'utilisation de 'With' rends le code plus lisible
    With selecteurHeure
        .Min = 0
        .Max = 12
        .Value = 12
    End With
    With selecteurMinute
        .Min = 0
        .Max = 59
        .Value = 0
    End With

End Sub

' // Gérer le clic sur le bouton Annuler - Fermer sans sauvegarder
Private Sub btn_Cancel_Click()
    mSelectedTime = vbNullString                                ' Réinitialiser l'heure
    Me.Hide
End Sub

' // Gérer le clic sur le bouton OK - Sauvegarder l'heure sélectionnée
Private Sub Btn_OK_Click()
    mSelectedTime = Format$(heureSaisie.Value) & ":" & Format$(minuteSaisie.Value) & " " & Cmb_AMPM.Value
    Me.Hide
End Sub

' // Gérer la saisie manuelle dans la TextBox des heures
Private Sub heuresSaisie_Change()
    Dim h As Integer
    If IsNumeric(heureSaisie.Text) Then
        h = CInt(heureSaisie.Text)
        If h >= 1 And h <= 12 Then
            selecteurHeure.Value = h
        Else: heureSaisie.Text = "12"
        End If

    End If
End Sub

Private Sub minuteSaisie_Change()
    Dim m As Integer
    If IsNumeric(minuteSaisie.Text) Then
        m = CInt(minuteSaisie.Text)
        If m >= 0 And m <= 59 Then
            minuteSaisie.Value = m
        Else: minuteSaisie.Text = "00"                          ' Réinitialiser si la saisie est invalide
        End If
    Else: minuteSaisie.Text = "00"
    End If
End Sub

' // Gérer le changement de l'heure avec le bouton Spin
Private Sub selecteurHeure_Change()
    heureSaisie.Value = Format$(selecteurHeure.Value, "00")
End Sub

' // Gérer le changement des minutes avec le bouton Spin
Private Sub selecteurMinute_Change()
    minuteSaisie.Value = Format$(selecteurMinute.Value, "00")
End Sub

' //
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    'vbFormControlMenu  0   L'utilisateur a choisi la commande Fermer dans le menu Système du formulaire utilisateur.
    'vbFormCode         1   L'instruction Unload est appelée à partir du code.
    'vbAppWindows       2   La session active de l'environnement d'exploitation Windows se termine.
    'vbAppTaskManager   3   Le Gestionnaire de tâches de Windows ferme l'application.
     Select Case CloseMode
        Case vbFormControlMenu, vbFormCode
            Cancel = True
            Me.Hide
     End Select

End Sub

Et la procédure d'appel revisitée :(il y avait quelques erreurs).

Sub ShowTimePicker()
    Dim TimePicker As Frm_TimePicker                            '// VBA n'aime pas trop les affectations directe
    Set TimePicker = New Frm_TimePicker ' // Faites le en deux fois
    With TimePicker
        '// On utilise la propriété Let pour mettre le formulaire à jour de l'eure
        .SelectedTime = "10:12 AM"
        ' // Afficher le formulaire
        .Show
        ' // Récupérer l'heure sélectionnée ici on utilis plutôt une propriété pour éviter de casser l'encapsulation.
        If .SelectedTime > vbNullString Then
            MsgBox "Vous avez sélectionné : " & .SelectedTime, vbInformation, "Sélecteur d'Heure"
        Else
            MsgBox "Sélection de l'heure annulée.", vbExclamation, "Sélecteur d'Heure"
        End If
    End With

    ' // Le formulaire est caché on peut maintenant le fermer
    Unload TimePicker

End Sub

Cet exemple est avec du texte comme vous l'aviez commencé. mais il vaudrait mieux utiliser des dates.

Rechercher des sujets similaires à "selecteur heure"