Validation d'un formulaire qui s'affiche deux fois?

Résolu/Fermé
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - 29 sept. 2015 à 15:24
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - 29 sept. 2015 à 20:46
Bonjour,

J'ai créer un fichier pour maintenir un inventaire, c'est tout simple!

J'entre les quantités reçues et utilisées à l'aide de 2 Userform et j'effectue une vérification avec quelques conditions qui mets en forme (couleur) les différentes cellules de ma colonne "quantité restante". Mes conditions sont sur la feuille "Inventaire" et les reste se fait à partir des Userform.

Tout fonctionne ok, mais il fait la vérification 2 fois, donc le message apparaît 2 fois pour les quantités à commander et à surveiller!

J'ai vérifier comment il fonctionnait en pas à pas. Il fait ça vérification sur la feuille, ensuite il va sur le Userform utilisé et ensuite, il revient pour faire une autre vérification sur la feuille.

J'ai placer toute mes conditions sur la feuille avec le code
Private Sub Worksheet_Calculate()
, j'ai essayer aussi avec
Private Sub Worksheet_Change()
et ça n'a rien changé, toujours le même problème. J'ai aussi essayé avec
Private Sub Worksheet_Activate()
, la ça fonctionne à moitié, je n'ai plus de message qui apparaît, mais la mise en forme est ok.

J'ai besoin d'aide pour ce coup!

Voici mon fichier:

http://www.cjoint.com/c/EIDniDocJxo


3 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 sept. 2015 à 17:51
Bonjour,

voir si cela convient: https://www.cjoint.com/c/EIDpYQMuTNf
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 29/09/2015 à 17:51
Bonjour,

Moi ça marche.

En fait, j'ai supprimé la macro sur la feuille pour l'intégrer directement au UserForm :

Private Sub CommandButton1_Click()


Dim cell As Variant
Dim Msg As String, Msg2 As String

Sheets("Inventaire").Unprotect

If TextBox2 = IsNumeric(TextBox2) Then
    Range("B4") = Range("B4") + TextBox2.Value
End If

If TextBox3 = IsNumeric(TextBox3) Then
    Range("B5") = Range("B5") + TextBox3.Value
End If

If TextBox4 = IsNumeric(TextBox4) Then
    Range("B6") = Range("B6") + TextBox4.Value
End If

If TextBox5 = IsNumeric(TextBox5) Then
    Range("B7") = Range("B7") + TextBox5.Value
End If

If TextBox6 = IsNumeric(TextBox6) Then
    Range("B8") = Range("B8") + TextBox6.Value
End If

If TextBox7 = IsNumeric(TextBox7) Then
    Range("B9") = Range("B9") + TextBox7.Value
End If

If TextBox8 = IsNumeric(TextBox8) Then
    Range("B10") = Range("B10") + TextBox8.Value
End If

If TextBox9 = IsNumeric(TextBox9) Then
    Range("B11") = Range("B11") + TextBox9.Value
End If

If TextBox10 = IsNumeric(TextBox10) Then
    Range("b13") = Range("b13") + TextBox10.Value
End If

If TextBox11 = IsNumeric(TextBox11) Then
    Range("b15") = Range("b15") + TextBox11.Value
End If

If TextBox12 = IsNumeric(TextBox12) Then
    Range("b17") = Range("b17") + TextBox12.Value
End If


If ComboBox1 = "" Then
    MsgBox "Choisissez un nom dans la liste!"
Else
    Unload Me
End If
Sheets("Inventaire").Unprotect
Range("B22") = ComboBox1.Value
Sheets("Inventaire").Protect

Msg = ""
Msg2 = ""

Sheets("Inventaire").Unprotect

For Each cell In Range("D4:D19")
l = cell.Row
    
    If cell.Value = vide Or cell.Value >= 5 Then
        cell.Interior.ColorIndex = 2
    ElseIf cell.Value = 1 Then
        cell.Interior.ColorIndex = 3
        Msg = Msg & "À commander!" & Cells(l, 1).Value & Chr(10)
    ElseIf cell.Value > 2 And cell.Value < 5 Then
        cell.Interior.ColorIndex = 6
        Msg2 = Msg2 & "Quantité basse, à surveiller!" & Cells(l, 1).Value & Chr(10)
    End If
    
Next

    If Msg <> "" Then
        MsgBox Msg, vbCritical, "Attention!"
    End If

    If Msg2 <> "" Then
        MsgBox Msg2, vbExclamation, "Attention!"
    End If
    
Sheets("Inventaire").Protect


End Sub


Private Sub CommandButton2_Click()

Dim objControl As Control
    For Each objControl In Arrivage.Controls
        If TypeOf objControl Is msforms.TextBox Then
            objControl.Text = ""
        End If
    Next

End Sub



Private Sub UserForm_Initialize()

With ComboBox1
    .AddItem "Gilbert Grondin"
    .AddItem "Martin D'Anjou"
    .AddItem "Raphaël Vincent"
End With
   

End Sub


Tu fais pareil sur l'autre et voilà, la vérif se fera uniquement lors de l'utilisation des UserForm.

Cordialement.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 29/09/2015 à 17:53
Bonjour,
Deux reponses identiques en meme temps ..... J'ai mis les alertes dans une subroutine sur l'userform
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
29 sept. 2015 à 17:59
Salut f894009,

Effectivement, même réponse.

En général de toute façon, il vaut mieux intégrer le code a effectuer en même temps qu'un userForm dans le userForm lui-même.

Cordialement.
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
29 sept. 2015 à 18:03
Merci beaucoup pour votre aide Kuartz et f894009!!

Finalement c'est assez simple, je cherchais trop loin la réponse!

Encore merci!
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
29 sept. 2015 à 20:15
Bonsoir,

J'ai pas compris pourquoi il y avait deux UserForms...
Je propose : https://www.cjoint.com/c/EIDsnW7L70X
en n'ayant du code qu'en module principal et dans le UserForm.

A+
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
29 sept. 2015 à 20:46
Cool! Merci Zoul67!

Je n'y avais pas pensé! Je pensais pas que je pouvais procéder de cette manière. On en apprend à tous les jours!

Merci!
0