Problème vba Excel: setfocus

Résolu
LANGAZOU Messages postés 100 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai un problème avec le setfocus que j'arrive pas à le maintenir dans mon textbox si le montant tapé n'est pas un multiple de 500 (il passe toujours au textbox suivant pourtant j'ai mis à la fin de mon code Textbox3.setfocus). voici mon code:
).

Private Sub TextBox3_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox3.Value / 500 <> TextBox3.Value \ 500 Then
MsgBox "Entrer un multiple de 500"
TextBox3 = ""
Textbox3.setfocus
End If

End Sub


Merci pour votre réponse

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Au lieu d'utiliser l'événement BeforeUpdate, utilise l'événement Exit et son paramètre Cancel :

    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox3.Value / 500 <> TextBox3.Value \ 500 Then
    MsgBox "Entrer un multiple de 500"
    TextBox3 = ""
    Cancel = True
    End If
    End Sub
    0
    1. LANGAZOU Messages postés 100 Statut Membre
       
      re bonjour,

      j'ai utilisé l'évenement Exit mais toujours avec le meme problème ( j'ai pas compri c'est quoi le paramètre cancel ).



      Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      If TextBox3.Value / 500 <> TextBox3.Value \ 500 Then
      MsgBox "Entrer un multiple de 500"
      TextBox3 = ""
      TextBox3.SetFocus
      End If
      End Sub

      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > LANGAZOU Messages postés 100 Statut Membre
       
      Cancel est un boolean (ByVal Cancel As MSForms.ReturnBoolean) qui empêche, ou autorise l'événement à se produire.
      Ici, en choisissant Exit, cancel = False autorise la sortie, Cancel = true empêche la sortie.
      Donc,
      Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      If TextBox3.Value / 500 <> TextBox3.Value \ 500 Then
      MsgBox "Entrer un multiple de 500"
      TextBox3 = ""
      Cancel = True '**********************
      End If
      End Sub 
      0
    3. LANGAZOU Messages postés 100 Statut Membre > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Désolé je suis débutant en VBA j'ai pas su ou mettre cancel =false :/
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > LANGAZOU Messages postés 100 Statut Membre
       
      Cancel = True, pas false!!!

      Comme ceci :
      Copie-colle ce code :
      Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      If TextBox3 Mod 500 <> 0 Then TextBox3 = "": Cancel = True
      End Sub
      0
    5. LANGAZOU Messages postés 100 Statut Membre
       
      - débogage si je tabule sans saisir le contenu du textbox3. j'ai ajouté une condition ( si textbox3 <> " ") mais ca n a pas aboutie :/
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Pour compléter notre discussion d'hier, je t'invite à tester ces codes :

    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    'Evénement : Sortie du TextBox3
    If TextBox3 = "" Then  'Si le TextBox3 est vide
        Cancel = True 'Empêche la sortie du TextBox3
        Exit Sub '*********** SORTIE DE LA PROCEDURE *********
    End If
    Dim ValT3 As Double
    ValT3 = CDbl(TextBox3)
    If Mod_Gd_Nbre(ValT3, 500) <> 0 Then TextBox3 = "": Cancel = True
    End Sub
    
    Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Evénement : Dans le TextBox3, lors de l'appui sur une touche du clavier
    'Empêche la saisie d'autre chose que des chiffres
    If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
    End Sub
    
    Function Mod_Gd_Nbre(Nbre As Double, Diviz As Double) As Double
    'Fonction de calcul du Modulo (reste de la division) pour de grands nombres
    Mod_Gd_Nbre = Nbre - (Int(Nbre / Diviz) * Diviz)
    End Function

    0