Probleme VBA On Error

VBAbeginner -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai une question sans doute de débutant, mais j'aimerai comprendre.
Dans le programme suivant, si je n'entre pas de chiffres, j'obtiens bien un message d'erreur, mais ensuite le programme s'arrete au lieu de revenir me demander un chiffre (ie il ne revient pas à la ligne theNumber = Inputbox etc..pourquoi ne fait-il pas la boucle?

Sub Myfirstprocedure()
Const dataSheetName = "Kappa" ' name of sheet
Const raiseToPower = 2 ' square the number
Dim theNumber As Integer ' from user
Dim theResult As Integer ' calculated value
On Error Resume Next
theNumber = InputBox("Enter a whole number", "Integer Input", 0)
If Err.Number <> 0 Then
MsgBox "Your Input was not numeric. Please enter an Integer Value", vbOKOnly, "Error"
On Error GoTo 0
Err.Clear
Exit Sub
End If
On Error GoTo 0 ' allows errors to be handled by the system again
theResult = theNumber ^ raiseToPower
Worksheets(dataSheetName).Range("A1") = theResult
MsgBox theNumber & " raised to the power of " & raiseToPower & " = " & theResult
End Sub

J'utilise le Visual Basic editeur d'Excel 2010.


Merci par avance,

D

1 réponse

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Il y a plusieurs manières de gérer l'erreur en voici une

    Dim flag as boolean
    
    While flag = False   
         On Error Resume Next   
         theNumber = InputBox("Enter a whole number", "Integer Input", 0)   
         If Err.Number <> 0 Then   
              MsgBox "Your Input was not numeric. Please enter an Integer Value", vbOKOnly, "Error"   
              On Error GoTo 0   
          Else   
              flag = True   
         End If   
    Wend


    Michel
    0
    1. VBA beginner
       
      Merci de votre réponse, cela fonctionne effectivement. Juste pour mieux comprendre, pourriez vous me préciser quelle était l'erreur de code?
      Merci
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour
      Lorsque tu as une erreur, tu demandes la sortie de la procédure par "exit sub"

      d'autre part err.clear ne sert à rien puisque on error goto 0 désactive la gestion de l'erreur
      If Err.Number <> 0 Then
      MsgBox "Your Input was not numeric. Please enter an Integer Value", vbOKOnly, "Error"
      On Error GoTo 0
      Err.Clear
      Exit Sub
      End If 


      Bonne journée
      0