Microsoft 365 Calendrier : Ne pas pourvoir sélectionner une heure inférieure à maintenant

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,
Je vous souhaite une belle journée :)

J'utilise l'excellent calendrier du non moins excellent Roland
Je lui avais demandé des modifications qu'il avait bien voulu prendre en compte.

Une modification très importante était la suivante :
Ne pas pouvoir sélectionner une date avant "aujourd'hui".
Et ça fonctionne nickel

J'ai besoin maintenant d'une autre sécurité qui concerne la saisie des heures de Rappels ou de rdvs
je souhaite que l'on ne puisse pas sélectionner une heure inférieure à l'heure "d'aujourd'hui"
.

Je tente de modifier le code mais, vu mon niveau, je n'y arrive pas :mad:
Pourriez-vous m'aider ?
je joins le fichier et je continue à bidouiller lol et Grrrrrr !

ça peut peut-être aussi intéresser notre ami patricktoulon
je vous remercie :)
lionel,
 

Pièces jointes

  • Calendrier_test_Roland_CodeThiswork - OK.xlsm
    108.6 KB · Affichages: 65
Dernière édition:
Solution
Bonjour Lionel,
Celle là je n'y avais pas pensé. :)
Un nouvel essai en PJ avec :
On ne limite les heures que si c'est aujourd'hui.
Code:
Private Sub UserForm_Initialize()
If CDate(ActiveCell.Value) < CDate(Now) Then
    Hmin = 1 + Hour(Now): If Hmin > 20 Then Hmin = 20
    For I = Hmin To 20: CbHeure.AddItem I: Next
Else
    For I = 7 To 20: CbHeure.AddItem I: Next
End If
For I = 0 To 45 Step 15: CbMinute.AddItem I: Next
Me.Caption = "   Quitte X ou Sélect heure"
UserformPosSurCell ActiveCell 'position userf
End Sub
On ne limite l'heure affichée que si c'est aujourd'hui.
VB:
Private Sub UserForm_Terminate()
H = Val(CbHeure): M = Val(CbMinute): If H = 24 Then M = 0
If CDate(ActiveCell.Value) < CDate(Now) Then
    T1 = Now - Int(Now)...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Lionel,
Une demi solution : En ne mettant dans la liste que les heures postérieures à l'heure actuelle :
VB:
Private Sub UserForm_Initialize()
Hmin = Hour(Now): If Hmin > 20 Then Hmin = 20
For I = Hmin To 20: CbHeure.AddItem I: Next
For I = 0 To 45 Step 15: CbMinute.AddItem I: Next
Me.Caption = "   Quitte X ou Sélect heure"
UserformPosSurCell ActiveCell 'position userf
End Sub
S'il est 18H40 par exemple, on aura accès qu'à 18,19 et 20H. Mais on pourra toujours entrer 18H15, donc avant l'heure actuelle.
Par contre la modif est très légère. :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Une autre petite modif possible pour parer au defaut précédent :
VB:
Private Sub UserForm_Terminate()
H = Val(CbHeure): M = Val(CbMinute): If H = 24 Then M = 0
T1 = Now - Int(Now)         ' Temps maintenant
T2 = (H + M / 60) / 24      ' Temps entré
If T1 > T2 Then
    H = 1+Hour(Now): M = 0    ' T entré < T maintenant alors T entré =1 T maintenant avec Min=0
    If H > 20 Then H = 20
End If
On Error Resume Next
'extraire seulement la date> JJ/MM/AAAA puis rajoute HH:MM <= MODIF Roland
ActiveCell = Format(Left(ActiveCell, 10), "dd mm yyyy ") & Format(H, "0#") & ":" & Format(M, "0#")
Unload Me
End Sub
Si l'heure entrée est < maintenant, on met l'heure présente entière.
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bonjour Sylvanu, le Forum,
Bonne journée à toutes et à tous,

Encore merci Sylvanu, ton code est déjà super et c'est le premier qui correspond le mieux à mon besoin car il me permet de sélectionner également les 1/4 d'heures :
VB:
Private Sub UserForm_Initialize()
Hmin = Hour(Now): If Hmin > 20 Then Hmin = 20
For I = Hmin To 20: CbHeure.AddItem I: Next
For I = 0 To 45 Step 15: CbMinute.AddItem I: Next
Me.Caption = "   Quitte X ou Sélect heure"
UserformPosSurCell ActiveCell 'position userf
End Sub
On y est presque lol
Est-il possible d'y apporter 2 modifications :
1 - si il est 9 heures, il m'affiche les heures à sélectionner à partir de 10h uniquement si je sélectionne la date d'aujourd'hui
2 - si je sélectionne à partir de demain, il m'affiche les heures à sélectionner à partir de 7h
1638000876151.png

Ce serait super top :)
Amicalement,
lionel,
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel,
Celle là je n'y avais pas pensé. :)
Un nouvel essai en PJ avec :
On ne limite les heures que si c'est aujourd'hui.
Code:
Private Sub UserForm_Initialize()
If CDate(ActiveCell.Value) < CDate(Now) Then
    Hmin = 1 + Hour(Now): If Hmin > 20 Then Hmin = 20
    For I = Hmin To 20: CbHeure.AddItem I: Next
Else
    For I = 7 To 20: CbHeure.AddItem I: Next
End If
For I = 0 To 45 Step 15: CbMinute.AddItem I: Next
Me.Caption = "   Quitte X ou Sélect heure"
UserformPosSurCell ActiveCell 'position userf
End Sub
On ne limite l'heure affichée que si c'est aujourd'hui.
VB:
Private Sub UserForm_Terminate()
H = Val(CbHeure): M = Val(CbMinute): If H = 24 Then M = 0
If CDate(ActiveCell.Value) < CDate(Now) Then
    T1 = Now - Int(Now)         ' Temps maintenant
    T2 = (H + M / 60) / 24      ' Temps entré
    If T1 > T2 Then
        H = 1 + Hour(Now): M = 0  ' T entré < T maintenant alors T entré =1 T maintenant avec Min=0
        If H > 20 Then H = 20
    End If
End If
On Error Resume Next
'extraire seulement la date> JJ/MM/AAAA puis rajoute HH:MM <= MODIF Roland
ActiveCell = Format(Left(ActiveCell, 10), "dd mm yyyy ") & Format(H, "0#") & ":" & Format(M, "0#")
Unload Me
End Sub
En espérant couvrir tous les besoins.
 

Pièces jointes

  • Calendrier_test_Roland_CodeThiswork - OK (3).xlsm
    106.1 KB · Affichages: 38

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 153
Membres
112 670
dernier inscrit
Flow87