pb setFocus

gds35

XLDnaute Impliqué
Bonjour , a tous mes AMIS du Forum ,

J'ai un soucis que je n'arrive pas a résoudre , dans un USF j'ai plusieurs textbox , dans l'une d'elle j'ai un nbre dans l'autre une valeur que doit rentrer l'utilisateur. si un nbre est entre l'entrée de la valeur est obligatoire. mais il se peut que la saisie du nbre soit une erreur , alors j'essai de revenir a la saisie du nbre soit pour le remettre a blanc soit pour que l'utilisateur entre la valeur .
Je bloque sur ma msgBOX voici le code :
Private Sub MTDOM_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'
' SI UN NB DE FORFAITS EST ENTRE OBLIGATION DE SAISIR
' LE MT UNITAIRE
'
Dim Message As String
'
If NBFDOM <> 0 And MTDOM.Text = vbNullString Then
Message = MsgBox("UN NB DE FORFAITS DOM A ETE SAISIE" & vbCrLf & _
"ENTRER LE MONTANT UNITAIRE DU FORFAITS OU SUPPRIMER LE NB DE FORFAITS", _
vbCritical + vbYes, "ERREUR !!!")
Cancel = True
NBFDOM = ""
NBFDOM.SetFocus
'
End If
End Sub
ce code ne fonctionne pas pourquoi , ne puis je revenir a la saisie du nbre de forfait . Merci de votre aide . Cordialement GDS35
 
G

Guest

Guest
Re : pb setFocus

bonjour gds, leforum

Si dans un évènement exit d'un textbox tu mets Cancel=True, cela empêche de sortir du textbox. Donc à l'intérieur du même évènement pour le même textBox tu ne peux pas mettre SetFocus pour un autre contrôle.

A+
 

gds35

XLDnaute Impliqué
Re : pb setFocus

Salut HASCO , et Merci donc si j'ai bien compris en enlevant CANCEL = TRUE cela doit Marcher et ben non ne peux revenir sur la zone de saisie NBFDOM , j'ai 2 fois l'affichage de mon MSGBOX puis je passe a la zone suivante ... ?????
Ou est ma connerie de prg ????
 
G

Guest

Guest
Re : pb setFocus

re,

C'est normal puisque le SetFocus fait sortir de ton Textbox MTDOM et que chaque sortie appelle l'évènement Exit.

solution 1 afficher le message et empêcher la sortie du textbox avec cancel=True

solution 2 Il faut organiser autrement (ailleurs) ton contrôle de saisie.
Sur validation de ton userform.

A+
 

JNP

XLDnaute Barbatruc
Re : pb setFocus

Bonjour Gds35, Hasco, le forum :),
J'avoue que j'ai été enquiquiné sur ce genre de problème il y a plus d'un an et n'ai pas trouvé la solution en Exit. Par contre, j'avais utilisé la procédure Change pour obliger un masque de saisie, peut-être cela pourra-t-il t'aider?
Code:
Private Sub PremièreParution_Change()
' Réinitialise le formulaire pour bouclage et parution
DateBouclage = ""
Ajustement = 0
' Masque de saisie pour la date
Dim Longueur As Integer
Longueur = Len(PremièreParution)
Message = "Saisie incorrecte !"
If Longueur = 8 Then
    Dim VérificationValidité As Boolean
    VérificationValidité = DateValide(PremièreParution)
    If VérificationValidité = False Then GoTo DateInvalide
    If CDate(PremièreParution) <= Now Then GoTo DateInvalide
End If
Select Case Longueur
    Case 1
        If Chiffre(PremièreParution) = True Then
            DateBouclage = ""
            DateBouclage.ForeColor = RGB(0, 0, 0)
            DateBouclage.Font.Bold = False
            DateBouclage.BackColor = RGB(255, 255, 255)
            Ajustement = 0
            Parution = ""
            Exit Sub
        Else
            Msg = MsgBox(Message, vbCritical, "ATTENTION !")
            PremièreParution = ""
            Exit Sub
        End If
    Case 2
        If Chiffre(Mid(PremièreParution, 2, 1)) = True Then
            PremièreParution = PremièreParution & "/"
            Exit Sub
        Else
            Msg = MsgBox(Message, vbCritical, "ATTENTION !")
            PremièreParution = Mid(PremièreParution, 2, 1)
            Exit Sub
        End If
    Case 4
        If Chiffre(Mid(PremièreParution, 4, 1)) = True Then
            Exit Sub
        Else
            Msg = MsgBox(Message, vbCritical, "ATTENTION !")
            PremièreParution = Mid(PremièreParution, 3, 1)
            Exit Sub
        End If
    Case 5
        If Chiffre(Mid(PremièreParution, 5, 1)) = True Then
            PremièreParution = PremièreParution & "/"
            Exit Sub
        Else
            Msg = MsgBox(Message, vbCritical, "ATTENTION !")
            PremièreParution = Mid(PremièreParution, 4, 1)
            Exit Sub
        End If
    Case 7
        If Chiffre(Mid(PremièreParution, 7, 1)) = True Then
            Exit Sub
        Else
            Msg = MsgBox(Message, vbCritical, "ATTENTION !")
            PremièreParution = Mid(PremièreParution, 6, 1)
            Exit Sub
        End If
    Case 8
        If Chiffre(Mid(PremièreParution, 8, 1)) = True Then
            DatePremièreParution = PremièreParution
            Exit Sub
        Else
            Msg = MsgBox(Message, vbCritical, "ATTENTION !")
            PremièreParution = Mid(PremièreParution, 7, 1)
            Exit Sub
        End If
End Select
Exit Sub
DateInvalide:
    Msg = MsgBox(Message, vbCritical, "ATTENTION !")
    PremièreParution = ""
    DateBouclage = ""
End Sub
Bon courage :cool:
 
G

Guest

Guest
Re : pb setFocus

Re Gds, Jnp,

Une solution:

Code:
Dim bOk As Boolean      'Variable à mette en tête de Module de code du userform
 
Private Sub NBFDOM_Enter()
 bOk = True
End Sub
 
 
Private Sub MTDOM_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not bOk Then Exit Sub
    If Val(NBFDOM) <> 0 And MTDOM = vbNullString Then
        bOk = False
        MsgBox "UN NB DE FORFAITS DOM A ETE SAISIE" & vbCrLf & _
               "ENTRER LE MONTANT UNITAIRE DU FORFAITS OU SUPPRIMER LE NB DE FORFAITS", _
               vbCritical + vbYes, "ERREUR !!!"
        NBFDOM.SetFocus
    End If
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 064
Membres
103 110
dernier inscrit
Privé