Validation d'un formulaire qui s'affiche deux fois? [Résolu/Fermé]

Signaler
Messages postés
266
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
14 février 2020
-
Messages postés
266
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
14 février 2020
-
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

Messages postés
15221
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 mai 2020
1 290
Bonjour,

voir si cela convient: https://www.cjoint.com/c/EIDpYQMuTNf
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
35
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.
Messages postés
15221
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 mai 2020
1 290
Bonjour,
Deux reponses identiques en meme temps ..... J'ai mis les alertes dans une subroutine sur l'userform
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
35
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.
Messages postés
266
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
14 février 2020
1
Merci beaucoup pour votre aide Kuartz et f894009!!

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

Encore merci!
Messages postés
1938
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
11 mai 2020
131
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+
Messages postés
266
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
14 février 2020
1
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!