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

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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

A+

3ddI7IHd
0
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
D'accord tout est plus clair, je te remerci beaucoup.
0
Rejoignez-nous