Microsoft 365 TextBox avec limitation de la saisie entre 2 valeurs

pat66

XLDnaute Impliqué
Bonjour le forum,

Auriez vous l'amabilité de me donner un coup de main pour modifier cette macro de sorte que la saisie dans un textbox soit limitée entre 10 et 25 uniquement

Si saisie ok, clic sur ok pour valider
Si saisie pas ok, msgbox affiche erreur, clic sur ok pour modifier la saisie, clic sur ok pour valider

je vous remercie pour votre aide , voici la macro :

VB:
Private Sub b_validation_Click()
If Len(Me.nom) = 0 Then
MsgBox "Saisir une durée ! ", vbYes, " simulateur "
Exit Sub
End If
Application.ScreenUpdating = False
Application.EnableEvents = False
If IsNumeric(Me.nom.Value) Or (Me.nom.Value) <> "" Then Range("S6").Value = Format(CInt(Me.nom))
Unload Me
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

cdt
 
Dernière édition:

patty58

XLDnaute Occasionnel
Bonjour Pat66
VB:
Private Sub CBOK_Click()
If Len(Me.Nom) = 0 Then
    MsgBox "Saisir une durée ! ", vbYes, " simulateur "
    Exit Sub
ElseIf IsNumeric(Me.Nom.Value) = False Or Me.Nom.Value < 10 Or Me.Nom.Value > 25 Then
    MsgBox "Saisir une valeur comprise entre 10 et 25! ", vbYes, " simulateur "
    Exit Sub
End If
Application.ScreenUpdating = False
Application.EnableEvents = False
Range("S6").Value = Format(CInt(Me.Nom))
Unload Me
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Bonne journée
 

pat66

XLDnaute Impliqué
re,

merci pour votre aide, je me suis inspiré de votre idée et j'ai simplifié ainsi, qu'en pensez vous ?

Code:
Private Sub b_validation_Click()
If Len(Me.nom) = 0 Or Me.nom.Value < 10 Or Me.nom.Value > 25 Or IsNumeric(Me.nom.Value) = False Then
MsgBox "Saisir une durée comprise entre 10 et 25", vbYes, "simulateur"
    Exit Sub
End If
Application.ScreenUpdating = False
Application.EnableEvents = False
Range("S6").Value = Format(CInt(Me.nom))
Unload Me
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

bonne après midi
 

pat66

XLDnaute Impliqué
Bonjour job75,

merci pour le conseil avisé

j'ai rajouté les Application.EnableEvents car la macro a tendance à être longue sans Application.EnableEvents car la valeur qui est saisie dans S6 sert de référence pour d'autres calculs, mais c'est vrai qu'en mettant Application.EnableEvents les calculs ci dessous qui dépendent de S6 ne mettent pas à jour automatiquement

J'ai remarqué après quelques tests sans Application.EnableEvents que c'est Range("Y11").Copy Range("Y11") qui ralentit la macro

dans une autre feuille
VB:
Select Case Target.Address(0, 0)
         Range("Y11").Copy Range("Y11") 'pour simuler un changement de valeur dans Y11
         Range("F25").FormulaLocal = "=SIERREUR(RECHERCHEH(S6;CA12:CP14;3;FAUX);""<10 ans"")"
    End Select

avez vous une idée de comment faire pour accélérer cette macro ?

merci
 

Eric C

XLDnaute Barbatruc
Bonsoir le forum
Bonsoir pat66, bonsoir patty58, bonsoir job75

Pour ma part, j'en suis resté au post #2 et te propose ceci afin de pouvoir reprendre la main sur le TextBox :
VB:
Private Sub CommandButton1_Click()
If Len(TextBox1) = 0 Then
    MsgBox "Saisir une durée ! ", vbYes, " simulateur "
    TextBox1 = "": TextBox1.SetFocus
ElseIf IsNumeric(TextBox1.Value) = False Or TextBox1.Value < 10 Or TextBox1.Value > 25 Then
    MsgBox "Saisir une valeur comprise entre 10 et 25! ", vbYes, "  simulateur "
        TextBox1 = "": TextBox1.SetFocus
 Else
Range("A6").Value = Format(CInt(TextBox1))
Unload Me
End If
End Sub

Bonne soirée à toutes & à tous
Eric c
 

Discussions similaires

Réponses
8
Affichages
584

Statistiques des forums

Discussions
313 283
Messages
2 096 811
Membres
106 751
dernier inscrit
Souleymani