Problème dans une boucle svp

eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008 - 25 juin 2008 à 15:06
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008 - 26 juin 2008 à 09:13
Bonjour, j'ai un problème sur ce code,

Private Sub OK_Click()
    Dim Ws As Worksheet
    Dim Ligne As Integer

    Set Ws = Sheets("abonnements")
        If MODIFICATION = True Then
            Ligne = Line
        Else
            Ligne = Ws.Columns(1).Find("").Row
        End If
       
               If (case1 True Or case2 True Or case3 = True Or case4 = True Or case5 = True) Then
        Ws.Cells(Ligne, 1) = Act
        End If
        If case1.Value = True Then
        Ws.Cells(Ligne, 2) = prix1
        End If
        If case2.Value = True Then
        Ws.Cells(Ligne, 3) = prix2
        End If
        If case3.Value = True Then
        Ws.Cells(Ligne, 4) = prix3
        End If
        If case4.Value = True Then
        Ws.Cells(Ligne, 5) = prix4
        End If
        If case5.Value = True Then
        Ws.Cells(Ligne, 6) = prix5
        End If
   
        If Act = "" Then
            Rep = MsgBox("La saisie d'une activité est obligatoire", vbOKOnly + vbCritical, "ATTENTION")        ElseIf (case1 False And case2 False And case3 = False And case4 = False And case5 = False) Then
            mes = MsgBox("La saisie d'au moins un prix est obligatoire", vbOKOnly + vbCritical, "ATTENTION")
        Else
            Unload ADM
            Rep = MsgBox("Voulez-vous rentrer une autre activité ?", _
            vbYesNo + vbQuestion, "Programmer une autre activité ?")
        End If
    If Rep = vbYes Then
    'si la réponse est oui alors
        ADM.Show
        'ouvrir le userform adm
    ElseIf Rep = vbNo Then
    'si la réponse est non alors
        bye = MsgBox("Les nouvelles données sont bien enregistrées ; Merci et à très bientôt", , "AUREVOIR") 'envoyer un message d'information
    End If
    MODIFICATION = False
End Sub

Alors mon problème c'est que quand on rentre du négatif il nous dis bien que le négatif n'est pas accepté et donc l'input revien mais là quand on click sur annuler il ne veut pas sortir de l'input il nous remet une msg.
Merci de votre aide svp!!

22 réponses

eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 15:07
Pardon je me suis trompé de code j'ai collé le mauvais

Private Sub prix1_Change()
If MODIFICATION Then Exit Sub
    If prix1.Text = "" Then
    'Si prix1 est vide alors
        Exit Sub
        'sortir de la procédure
    ElseIf Not IsNumeric(prix1) Then
    'sinon si prix1 n'est pas numérique alors
        erreur = MsgBox("Un prix est obligatoirement numérique!", vbOKOnly + vbCritical, "ERREUR")
        'msgbox
        prix1 = ""
        'prix1 est vide
        prix1.Text = Application.InputBox("Veuillez entrer le prix correspondant SVP", "PRIX")
        'inputbox pour obliger à rentrer un prix
    ElseIf prix1 < 0 Then
    'sinon si le prix est négatif
        erreur = MsgBox("Unprix ne peut pas être négatif", vbOKOnly + vbCritical, "ERREUR")
        'msgbox
        prix1 = ""
        prix1.Text = Application.InputBox("Veuillez entrer le prix correspondant SVP", "PRIX")
    End If
End Sub

Voila c'est celui là
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 juin 2008 à 16:24
salut,
normal c'est à l'évènement _Change...

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 16:29
Et je dois le mettre à quel evenement prix1 est une textbox?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 juin 2008 à 16:34
Reflechis un tout petit peu et consulte l'aide :
Prix1_Change va se déclencher à chaque fois que tu touches au contenu de Prix1
Le fait de faire  Prix1 = ""  provoque l'appel de cette routine !!
Il va donc te reposer sans cesse la même question !

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juin 2008 à 16:40
Salut,

pas testé !

Private Sub prix1_Change()
Dim MsgErreure As String, Reponse As Variant
If MODIFICATION Then Exit Sub
    If prix1.Text = "" Then
    'Si prix1 est vide alors
        Exit Sub
        'sortir de la procédure
    End IF
    Do While Not IsNumeric(prix1) or prix1 < 0
    'si prix1 n'est pas numérique ou si le prix est négatif
        If Not IsNumeric(prix1) Then MsgErreure = "Un prix est obligatoirement numérique!"
        If prix1 < 0 Then MsgErreure = "Un prix ne peut pas être négatif"
        MsgBox MsgErreure, vbOKOnly + vbCritical, "ERREUR"
        'msgbox
        prix1.Text = ""
        'on vide la textbox
        Reponse = Application.InputBox("Veuillez entrer le prix correspondant SVP", "PRIX")
        'inputbox pour obliger à rentrer un prix
        If Reponse = False then
        'si on click sur le bouton annuler ou la croix de l'inputbox alors
           Exit Sub
       Else
          prix1.Text = Reponse
       End If
     Loop
End Sub

mais je suis surpris car je t'ai deja donné un code similaire ici

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juin 2008 à 16:42
oui bon.... j'aurai du rafraichir la page avant de poster

daccord avec PCPT et Jack

A+
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 16:43
Je reflechis un tout petit peu et je me dis que comme ma case prix1 textbox et lié à ma case1 checkbox je ne clique jamais dans la case prix1.
Ensuite, quand je rentre du négatif mon prix1="" sert à vider ma case prix1.
Le problème est que quand je clique sur Annuler dans ma case prix1, il y a un Faux qui apparait et la forcément il me di que cela doit être numérique.
Le problème est aussi présent quand je marque du texte dans prix1.
Merci de votre aide
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 16:50
D'accord merci de ton aide bigfish et les autres aussi.
C'est que j'ai toujours peur de faire n'importe quoi.
En tous cas merci pour tous
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juin 2008 à 16:56
...

Aller je vais etre gentil ce matin(pour moi) et c'est aussi par ce que je sais que tu as deja pas mal bossé sur ce projet

donc utilise l'evenement KeyDown et lance ta macro si il y a validation par la touche entré

Private Sub prix1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn and prix1.Text <> "" Then
        Dim MsgErreure As String, Reponse As Variant
        If MODIFICATION Then Exit Sub
        Do While Not IsNumeric(prix1) or prix1 < 0
        'si prix1 n'est pas numérique ou si le prix est négatif
            If Not IsNumeric(prix1) Then MsgErreure = "Un prix est obligatoirement numérique!"
            If prix1 < 0 Then MsgErreure = "Un prix ne peut pas être négatif"
            MsgBox MsgErreure, vbOKOnly + vbCritical, "ERREUR"
            'msgbox
            prix1.Text = ""
            'on vide la textbox
            Reponse = Application.InputBox("Veuillez entrer le prix correspondant SVP", "PRIX")
            'inputbox pour obliger à rentrer un prix
            If Reponse = False then
            'si on click sur le bouton annuler ou la croix de l'inputbox alors
               Exit D0
           Else
             prix1.Text = Reponse
           End If
         Loop
    End If
End Sub

mais pas de message perso ou d'aide perso poste tes questions sur ce forum
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 17:08
OK mais ta réponse précédente marche très bien, keydown c'est quand l'utilisateur appuit sur une touche. Change est correct aussi ou pas?Le code reste le même dans tes deux solutions.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 juin 2008 à 17:11
keydown PUIS test  si ENTER
(d'ailleurs préférer keyup pour ne pas pouvoir déclencher plusieurs fois le code si on reste appuyé)

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 17:12
D'accord je te remercie pour ton aide
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juin 2008 à 17:25
il existe aussi une solution avec l'evenement change qui consiste desactiver les evenements temporairement vas le code plus bas:

mais je prefere quand meme un evenement keydown... pardon Keyup + touche enter

Private Sub prix1_Change()
Dim MsgErreure As String, Reponse As Variant
If MODIFICATION Then Exit Sub
    If prix1.Text = "" Then
    'Si prix1 est vide alors
        Exit Sub
        'sortir de la procédure
    End IF
    Application.EnableEvents = False
    Do While Not IsNumeric(prix1) or prix1 < 0
    'si prix1 n'est pas numérique ou si le prix est négatif
        If Not IsNumeric(prix1) Then MsgErreure = "Un prix est obligatoirement numérique!"
        If prix1 < 0 Then MsgErreure = "Un prix ne peut pas être négatif"
        MsgBox MsgErreure, vbOKOnly + vbCritical, "ERREUR"
        'msgbox
        prix1.Text = ""
        'on vide la textbox
        Reponse = Application.InputBox("Veuillez entrer le prix correspondant SVP", "PRIX")
        'inputbox pour obliger à rentrer un prix
        If Reponse = False then
        'si on click sur le bouton annuler ou la croix de l'inputbox alors
           Exit Do
       Else
          prix1.Text = Reponse
       End If
     Loop
    Application.EnableEvents = True
End Sub
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 18:14
Mais pourquoi le code est incorrecte avec l'evenement change mais de la solution précédente dans Application.EnableEvents=False?
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juin 2008 à 18:29
tu pourrais reformuler la question c'est pas tres claire ou alors je fatigue
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 18:43
Lol non c'est moi qui m'exprime mal en fait tout à l'heure tu m'as donné ce code :

Private Sub prix1_Change()
Dim MsgErreure As String, Reponse As Variant
If MODIFICATION Then Exit Sub
    If prix1.Text = "" Then
    'Si prix1 est vide alors
        Exit Sub
        'sortir de la procédure
    End IF
    Do While Not IsNumeric(prix1) or prix1 < 0
    'si prix1 n'est pas numérique ou si le prix est négatif
        If Not IsNumeric(prix1) Then MsgErreure = "Un prix est obligatoirement numérique!"
        If prix1 < 0 Then MsgErreure = "Un prix ne peut pas être négatif"
        MsgBox MsgErreure, vbOKOnly + vbCritical, "ERREUR"
        'msgbox
        prix1.Text = ""
        'on vide la textbox
        Reponse = Application.InputBox("Veuillez entrer le prix correspondant SVP", "PRIX")
        'inputbox pour obliger à rentrer un prix
        If Reponse = False then
        'si on click sur le bouton annuler ou la croix de l'inputbox alors
           Exit Sub
       Else
          prix1.Text = Reponse
       End If
     Loop
End Sub

Est-il incorrect sous cette forme.
En gros qu'est ce qu'ajoute Application.EnableEvents = False ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 juin 2008 à 19:12
un ptit peu d'autonomie svp....

l'aide existe aussi en VBA !!

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 19:19
Je suis d'accord mais on se comprend pas c'est pas grave merci quand même.
Bonsoir
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 juin 2008 à 19:27
pas grave pour qui? ^^
tu demandes si ton code serait/était bon, y compris le choix de l'évènement, si tu ajoutais la ligne en orange donnée par BigFish

avant que tu poses cette question, "tout le monde" t'a dit qu'il ne fallait pas passer par le _Change

comme un "NB" ou "info sympa" ou "anecdote", BigFish nous informe qu'il est possible de "bidouiller les évènements" de manière à désactiver leur réception (et donc action) temporairement.

très bonne info, à ne pas appliquer dans ton cas de figure.
cf la citation lors de cette nouvelle info : mais je prefere quand meme un evenement key_X (^^)

donc au final si c'est juste de dire "est-ce que mon code est pas si mauvais"....
je ne vois pas quelle réponse on est sensé te donner.
tu as la trace de l'erreur, la raison, la solution, et même une anecdote

me semble qu'on a fait pas mal non?

bonne soirée
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
eastpeople Messages postés 105 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008
25 juin 2008 à 19:33
Oui oui vous avez fait enormément je dis pas le contraire.
Mais avec l'evenement key up pourquoi + enter,
En copiant le code key up les controles ne marché plus et comme j'ai un peu du mal à comprendre je me suis di que j'allais laisser change enfin bon. Jvé essayé de comprendre.
Merci tout le monde.
0
Rejoignez-nous