Booléen

frad -  
 frad -
Bonsoir à tous

j'aimerai pouvoir régler un petit problème !

Voila quand j'ouvre une boite de saise pour VBA excel et que je veut traiter l'action "annuler", je la traite par :

nb_ligne = Application.InputBox(Prompt:="NOMBRE DE LIGNE", Title:="prono", _
Type:=1)
If nb_ligne = False Then
Exit Sub
End If

Le probléme est que si je rentre la valeur 0 dans ma boite de dialogue, il prend ca comme False.

Comment puis contourner ca ?

Merci d'avance

4 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    l'action annuler renvoie une chaine de longueur nulle et il serait préférable de tester "" plutôt que false.

    nb_ligne = Application.InputBox(Prompt:="NOMBRE DE LIGNE", Title:="prono", _
    Type:=1)
    If nb_ligne = "" Then Exit Sub

    Dans ce cas, le problème peut se poser si la saisie est vide malgré OK,
    mais lorsque l'on demande une saisie elle ne doit pas être absente.

    Si l'on renseigne une valeur par défaut cela permet de contrôler.

    toujours zen
    0
  2. frad
     
    Salut

    Mon probleme persiste :
    Je fais bien le test avec "" mais si je ne rentre aucune valeur, la procédure continue à s'exécuter sans sortir.

    Do
    a = Application.InputBox(Prompt:="Pronostic du premier ", Title:="Les plus joués")
    If a = "" Then
    Exit Sub
    End If
    Loop Until (a >= 0) And (a <= 8)

    Merci de me sauver :)
    0
  3. santiago69 Messages postés 485 Statut Membre 209
     
    ca y est, j'ai trouve !
    1) pour etre sur de gerer toutes les erreurs, ne précise pas de type d'InputBox :
    nb_ligne = Application.InputBox("NOMBRE DE LIGNE", "prono")
    2) si la reponse est echap, nb_ligne = Faux
    3) si la reponse est rien + OK, nb_ligne = ""
    4) si la reponse est qquechose + OK, nb_ligne = qquechose

    je propose donc le code suivant (avec plein de boites de message tres enervantes) :
    Sub test()
    Dim nb_ligne As Variant
    Do: nb_ligne = Application.InputBox("NOMBRE DE LIGNE", "prono")
        If nb_ligne = "" Then
            MsgBox "Tu n'a rien saisi avant de faire ""OK"", recommence."
        Else
            If (CStr(nb_ligne) = CStr(False)) Then
                MsgBox "Tu as fait ""Echap"", le programme va s'arreter."
                Exit Sub
            Else
                If IsNumeric(nb_ligne) Then
                    MsgBox "Bravo, tu as saisi " & nb_ligne & ", le programme va continuer."
                Else
                    MsgBox "Tu n'as pas saisi une valeur numerique, recommence."
                End If
            End If
        End If
    Loop Until ((nb_ligne <> "") And IsNumeric(nb_ligne))
    End Sub

    voila, bon courage et a plus

    Il y a 10 types de personnes dans le monde
    Ceux qui comprennent le binaire et les autres.
    0
  4. frad
     
    Merci pour ton aide mais c'est vrai que c'est plien de boite de dialogue po belle ! Mais j'ai contourner le problème en passant par un userform (qui est bien plus utile pour ce que je cherche à faire)

    Cependant, j'ai un autre problème a present dont j'ai lancé le débat sur le forum
    0