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!!
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 26 juin 2008 à 07:36
...
Comme te la deja explique Jack le probleme vient du fait que tu changes la valeur de la textbox depuis l'evenement change de cette meme textbox... si si ! la ligne prix1.Text = ""
l' evenement change comme son nom l'indique detecte un changement dans l'objet qui lui est associe. Dans ton cas une textbox nomee prix1. Ce qui veut dire que si la valeur de la textbox prix1 change la sub routine prix1_Change() vas ce lancer. le probleme est que si cette meme subroutine modifie elle meme la valeur de la textbox prix1 elle vas a nouveau ce lancer elle meme donc on tourne en rond.
Donc pour eviter de tourner en rond la solution est de desactiver temporaire les evenements avec la ligne de commande suivante: Application.EnableEvents = False puis on ractive les evenements une fois termine.
Tu vas me dire mais pourquoi j'ai pas de probleme meme sans desactive les evenements ? Et bien dans ton cas tu as une condition if qui verifi si prix1 = "" et qui sort de la sub si cette condition est vrai.
Donc essai de me suivre :
-l'utilisateur change la valeur de la textbox
-la sub prix1_change() demarre
-la valeur n' est pas numerique donc on rentre dans la boucle Do
-dans la boucle prix1.Text = "" donc la textbox change a nouveau
-la sub prix1_change() demarre a nouveau alors que l'execution precedente de cette meme sub n'est pas terminee
-la condition If prix1.Text = "" est vrai donc on sort de la 2ieme execution de la sub prix1_change()
-on revient la ou on avait laisse la premiere execution c' est a dir apres la ligne prix1.Text = ""
-on lance l'inputbox
etc
Dans ton cas on peut dire que tu as eu de la chance. Je pense personnelement qu'un code ne doit pas s'appuier sur la chance donc si tu veux absolument continuer a utiliser cette evenement change ajoute la desactivation des evenements et la reactivation exactement la ou je te l'ai suggere.
Mais je continu a penser que c' est une mauvaise idee de vouloir utiliser l'evenement change. Dabord par ce que si on t'avait pas alerte sur ce probleme tu n'en aurais peut etre rien su jusqu' au jour ou tu aurais decide de modifier ton code et d'enlever cette condition if qui par chance te sauve la mise. Maintenant que tu le sais tu vas prendre les devants et ajouter la desactivation des evenements, mais... supposont qu' un petit malin plante ta macro au moment ou les evenements sont desactive ... la il faut pas oublier que cette desactivation a eu lieu au niveau de l'application soit dans ton cas excel. Ce qui veut dire que dans un tel cas il n'y a plus aucun evenement d'excel qui fonctione.
Conclusion, cela marche mais ce n'est pas tres propre