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

Résolu
bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   -  
bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,
      Deux reponses identiques en meme temps ..... J'ai mis les alertes dans une subroutine sur l'userform
      0
    2. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      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
    3. bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   1
       
      Merci beaucoup pour votre aide Kuartz et f894009!!

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

      Encore merci!
      0
  2. Zoul67 Messages postés 2001 Statut Membre 149
     
    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
    1. bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   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!
      0