eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 novembre 2008
-
25 juin 2008 à 15:06
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 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!!
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 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
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 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.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 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 ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 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.