Problème "Exit Sub" d'un MsgBox dans un Userform

Bonjour à tous,

Je rencontre actuellement un problème lors de l'exécution d'un MsgBox dans mon UserForm.

J'ai créé un UserForm composé d'un certain nombre de TextBox à remplir de nombres.

Mon UserForm est initialisé avec les données présentes dans un tableau.

Afin de "sécuriser" les entrées, si une case ayant préalablement remplie voit sa valeur modifiée par l'utilisateur via l'UserForm, alors une MsgBox apparait, lui demandant s'il est sûr de vouloir modifier cette valeur.

Ce MsgBox contient 2 boutons: "Oui" ou "Non".

Si on clique sur oui alors pas de problème le programme continu.

Si on clique sur non alors on ferme le MsgBox et on revient sur le UserForm complété. *PROBLEME*

J'ordonne au MsgBox de se fermer via un "Exit Sub". Or cela ferme également mon UserForm.

J'ai cherché, mais n'ai malheureusement pas trouvé de façon de fermer un Sub unique (ici le Sub Bouton1 qui correspond ou bouton valider qui va déclencher le MsgBox s'il détecte une modification) et non l'ensemble de mes subs tel que mon UserForm.

Je vous joint le fichier ci-contre.

Merci d'avance!

bonjour,

pas sûr d'avoir testé tous les cas, mais voici une proposition de correction de la partie de code en question

    For r = 1 To 10
        If CDbl(Controls("TextBox" & r).Value) = CDbl(Cells(r + 38, Mois + 3).Value) Or CDbl(Cells(r + 38, Mois + 3).Value) = 0 Then
        Else
            If MsgBox("Voulez-vous vraiment modifier la celulle: " & Controls("label" & r * 2 + 2), vbYesNo) = vbNo Then
                Exit Sub
            End If
        End If
    Next

    For s = 11 To 15
        If CDbl(Controls("TextBox" & s).Value) = CDbl(Cells(s + 39, Mois + 3).Value) Or CDbl(Cells(s + 39, Mois + 3).Value) = 0 Then
        Else
            If MsgBox("Voulez-vous vraiment modifier la celulle: " & Controls("label" & s * 2 + 2), vbYesNo) = vbNo Then
                Exit Sub
            End If
        End If
    Next

    For t = 16 To 20
        If CDbl(Controls("TextBox" & t).Value) = CDbl(Cells(t + 40, Mois + 3).Value) Or CDbl(Cells(t + 40, Mois + 3).Value) = 0 Then
        Else
            If MsgBox("Voulez-vous vraiment modifier la celulle: " & Controls("label" & t * 2 + 2), vbYesNo) = vbNo Then
                Exit Sub
            End If
        End If
    Next

Salut acide sulfurique,

En effet ça marche bien ^^' je pense que mon problème venait du "vbNo" que je simplifiait par "No". Merci beaucoup de ton aide!

Petit problème bis ^^

Lorsque je rentre un nombre à virgule, par exemple 12,34 il m'interprète ça comme 12340. J'imagine bien que le problème vient du fait que excel ne comprenne pas le "." et le "," comme nous le voyons, mais j'utilise une fonction IsNumeric pour vérifier les entrées et le "." n'est pas considéré comme numérique... Est ce que quelqu'un a une idée?

Bonjour,

Je ne comprends pas ton nouveau problème de point et virgule !

VBA utilise le point comme séparateur décimal.

IsNumeric et les fonctions de conversions numériques (CDbl, Cdec, etc.) utilisent les paramètres régionaux, donc FR, donc la virgule.

La fonction VBA Val, elle, ne connait comme VBA que le point.

Et la TextBox de son côté n'accueille que du texte, point ou virgule pas de différence, c'est du texte. Il reste que le point du pavé numérique, qui produit une virgule dans Excel, dans un Userform produira un point. Il faut donc transformer ce point en virgule pour tester la valeur texte de la TextBox avec IsNumeric...

Si tu affectes ensuite cette valeur à Excel, ce dernier convertira automatiquement en nombre un tel texte numérique (mais pas s'il trouve un point...). Sont systématiquement à convertir par contre les données formatées avec un format monétaire...

Cordialement.

Salut MFerrand,

Oui j'ai corrigé l'erreur tout seul. En fait je laisse l'utilisateur entrer la valeur avec une virgule, puis je fais la vérification avec "IsNumeric", et je remplace la virgule par un point juste avant de rentrer les valeurs dans le tableau.

Merci à vous!

Bonne journée!

Rechercher des sujets similaires à "probleme exit sub msgbox userform"