Textbox et problème de validation

olivepao

XLDnaute Occasionnel
Textbox numérique et problème de validation

Salut à tous les connectés et futurs connectés du forum :p

Dans un Userform, je rencontre deux petits problèmes avec des Texbox qui ne doivent avoir qu'une valeur numérique entière (sans décimales).

J'ai donc deux Textbox appelés SaisieTauxOccup et SaisieTauxDesir. Ces deux Textbox sont à l'intérieur d'une Frame.

1er problème

Les décimales sont parfois acceptées parfois non . . . allez savoir pourquoi !

2ème problème

Lorsque je sors du deuxième Textbox le resultat du test (s'il y a une erreur de saisie) qui doit s'afficher dans un Msgbox ne s'affiche pas.

De plus je n'ai pas de controle sur d'autres Textbox ou OptionButton ou CheckBox.

Tout rendre dans l'ordre si je fais un clic avec la sours dans la Frame de ces deux Textbox.

Merci à tous les connectés qui voudront bien m'aider. Je ne peux pas joindre de fichier car ce dernier est trop lourd. Mais j'espère que les fortiches s'en sortiront avec les deux procédures ci-dessous.

Code:
Private Sub SaisieTauxOccup_Exit(ByVal Cancel As MSForms.ReturnBoolean)
' <-- Validité du %age Occupation - Numérique entier obligatoire et % compris entre 40 et 100
On Error Resume Next

If Not IsNumeric(Right(SaisieTauxOccup, 1)) Then
    MsgBox "Veuillez saisir un nombre entier   !" + Chr$(13) + Chr$(13), _
                vbOKOnly + vbExclamation, "                        -  ERREUR DE SAISIE  -          "
    SaisieTauxOccup = Left(SaisieTauxOccup, Len(SaisieTauxOccup) - 1)
    Cancel = True
    SaisieTauxOccup.Value = ""
    SaisieTauxOccup.SetFocus
    Exit Sub
End If

If SaisieTauxOccup.Value > 100 Or SaisieTauxOccup.Value < 40 Then
                         MsgBox "Veuillez saisir un taux d'occuption correct svp." + Chr$(13) + Chr$(13) _
                                   & "Le taux est compris entre 40 et 100 %   !         " + Chr$(13) + Chr$(13), _
                                   vbOKOnly + vbExclamation, "                        -  ERREUR DE SAISIE  -          "
                           Cancel = True
                           SaisieTauxOccup.Value = ""
                           SaisieTauxOccup.SetFocus
End If

End Sub


Code:
Private Sub SaisieTauxDesir_Exit(ByVal Cancel As MSForms.ReturnBoolean)
' <-- Validité du %age Désiré - Numérique entier obligatoire et % compris entre 10 et non supérieur à Occupation
On Error Resume Next

If Not IsNumeric(Right(SaisieTauxDesir, 1)) Then
    MsgBox "Veuillez saisir un nombre entier   !" + Chr$(13) + Chr$(13), _
                vbOKOnly + vbExclamation, "                        -  ERREUR DE SAISIE  -          "
    SaisieTauxDesir = Left(SaisieTauxDesir, Len(SaisieTauxDesir) - 1)
    Cancel = True
    SaisieTauxDesir.Value = ""
    SaisieTauxDesir.SetFocus
    Exit Sub
End If

If SaisieTauxDesir.Value < 10 Or SaisieTauxDesir.Value > SaisieTauxOccup.Value Then
                         MsgBox "Veuillez saisir un taux désiré correct svp. " + Chr$(13) + Chr$(13) _
                                   & "Le taux est compris entre 10 % et le taux d'occupation réel   !   " + Chr$(13) + Chr$(13), _
                                   vbOKOnly + vbExclamation, "                        -  ERREUR DE SAISIE  -          "
                           Cancel = True
                           SaisieTauxDesir.Value = ""
                           SaisieTauxDesir.SetFocus
End If
End Sub

A++ et Bon App à ceux qui vont faire comme moi !
 
Dernière édition:

olivepao

XLDnaute Occasionnel
Re : Textbox et problème de validation

Re JP14 :) Re le forum :)

Merci pour tes explications.

En ce qui concerne le temps d'affichage des Msgbox, je n'avais pas saisi qu'ils s'affichaient uniquement si la souris était déplacée. Comme je testais uniquement en utilisant le clavier, je pensais que le message s'affichait dès que la touche Tab était enfoncée, surtout lorsque l'on passe de SaisieTauxOccup à SaisieTauxDesir.

Je planche toujours sur les autres sorties des Msgbox dans les autres Frame mais je sèche . . . je vais reprendre demain si j'ai le temps.

A++
 

olivepao

XLDnaute Occasionnel
Re : Textbox et problème de validation

Bonsoir JP14 :) Bonsoir le forum :)

Voila les explications. Je prends l'exemple pour la 1ère Frame, SaisieRUPrenom est la dernière Textbox qui a un contrôle


Code:
Private Sub SaisieRUPrenom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
' <-- Si la zone n'est pas remplie, empêche la sortie de la zone
If SaisieRUPrenom.Value = "" Then Cancel = True
End Sub

qui empêche comme pour les autres Textbox la sortie de celle-ci si elle est vide.

Comme dans le problème des Textbox avec le %age, le contrôle ne se fait pas. On peut sortir du Textbox avec la touche Tab ou la souris.

Le problème se présente également si un seul Textbox est present dans une Frame


Il doit certainement y avoir un bug dans Excel.

A++
 

Lii

XLDnaute Impliqué
Re : Textbox et problème de validation

Bonjour Tous,

moi aussi j'ai de gros problèmes avec les Focus.
Excel se bloque quand il ne sait plus où aller.
Comme il est têtu le bougre, la seule solution consiste à le fermer mais en passant par le Gestionnaire des tâches.

Comment fais-tu pour interdire les saisies du genre 99,99 (ou 99.99) ?
Vois si l'exemple joint peut t'apporter quelque chose.
 

Pièces jointes

  • Si Focus.zip
    9 KB · Affichages: 29

olivepao

XLDnaute Occasionnel
Re : Textbox et problème de validation

Bonjour Lii :) Bonjour le forum :)

Merci tout d'abord pour ton message et ta proposition.

En ce qui concerne ta question, je n'ai pas trouvé de solution pour empêcher la saisie de valeur avec décimal 99,99 ou 99.99.

Dans ton exemple, on perd (comme dans le mien) l'entrée dans le 2ème Textbox et le Focus si l'on sort du 1er Textbox avec la touche Tab. On se retrouve directement sur le bouton Out

A++
 

jp14

XLDnaute Barbatruc
Re : Textbox et problème de validation

Bonsoir

Bonjour Lii :) Bonjour le forum :)
En ce qui concerne ta question, je n'ai pas trouvé de solution pour empêcher la saisie de valeur avec décimal 99,99 ou 99.99.
Dans ton exemple, on perd (comme dans le mien) l'entrée dans le 2ème Textbox et le Focus si l'on sort du 1er Textbox avec la touche Tab. On se retrouve directement sur le bouton Out

A++

Pour supprimer la virgule en passant par les codes ascii, il suffit d'utiliser le code ci dessous.
Code:
Private Sub SaisieTauxOccup_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
val1 = KeyAscii
Call controldonnenumerique(val1, CStr(SaisieTauxOccup), 100)
KeyAscii = val1
End Sub

'sous programme

Private Sub controldonnenumerique(£valeurnum As Integer, valeur As String, max As Long)
    Select Case £valeurnum
    Case Is < 48, Is > 57
        £valeurnum = 0
    End Select
    valeur = valeur & Chr(£valeurnum)
    If CLng(valeur) > max Then £valeurnum = 0
End Sub


A vérifier l' ordre de tabulation :menu "affichage" option "ordre de tabulation"

A tester

JP
 
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Textbox et problème de validation

Bonsoir

Comme dans le problème des Textbox avec le %age, le contrôle ne se fait pas. On peut sortir du Textbox avec la touche Tab ou la souris.

Il doit certainement y avoir un bug dans Excel.

A++
Une remarque excel considère un "frame" comme une entité.
On peut sortir effectivement d'un textbox avec la souris et on est toujours bloqué au premier textbox des autres "frame"

JP
 

Discussions similaires

Réponses
5
Affichages
1 K

Statistiques des forums

Discussions
312 446
Messages
2 088 492
Membres
103 870
dernier inscrit
didiexcel