2 Fois le message box

Bonsoir , je ne comprends pas pourquoi j'ai 2 fois un message box .

Lorsque je quitte la feuille TEST s'il y manque des données je retourne sur la feuille TEST avec l'affichage d'un message.

Mais il s'affiche 2 fois : comment éviter cela ?

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

Dim J As Long
Dim Plage As Range
Dim Cel As Range
Dim Msg As String

With Sheets("TEST")

  Set Plage = Sheets("TEST").Range("C3:C27,H6:H30,M6:M37,R6:R39,A32:C41,H32:H41,F40:F41")
  For J = 7 To 166
    Set Cel = Plage.Find(what:=Sheets("REF").Range("C" & J), LookIn:=xlValues, lookat:=xlWhole)
    If Cel Is Nothing Then
      Msg = Msg & ", " & Sheets("REF").Range("C" & J)
    End If
  Next J
  If Len(Msg) > 0 Then

  Sheets("TEST").Select

         Application.EnableEvents = False 'bloque l'exécution des autres macros

   MsgBox " Attention il manque le ou les N° suivant :   " & Mid(Msg, 3) & "   Veuillez les postionner dans la feuille ", vbExclamation + vbOKOnly

       Application.EnableEvents = True 'Remet l'exécution des autres macros

End If

  Exit Sub

End With

End Sub

Bonjour,

Evidemment sans ton classeur c'est pas évident, mais tu devrais avoir un peu plus de méthode dans l'écriture du code et notamment sur l'indentation.

Essaye avec...

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim J As Long
Dim Plage As Range
Dim Cel As Range
Dim Msg As String
     If Sh.Name <> "Test" then exit sub
    Application.EnableEvents = False 'bloque l'exécution des autres macros
    With Sheets("TEST")
        Set Plage = Sheets("TEST").Range("C3:C27,H6:H30,M6:M37,R6:R39,A32:C41,H32:H41,F40:F41")
        For J = 7 To 166
            Set Cel = Plage.Find(what:=Sheets("REF").Range("C" & J), LookIn:=xlValues, lookat:=xlWhole)
            If Cel Is Nothing Then
                Msg = Msg & ", " & Sheets("REF").Range("C" & J)
            End If
        Next J
        If Len(Msg) > 0 Then
            MsgBox " Attention il manque le ou les N° suivant :   " & Mid(Msg, 3) & "   Veuillez les postionner dans la feuille ", vbExclamation + vbOKOnly
        End If
    End With
    Application.EnableEvents = True 'Remet l'exécution des autres macros
End Sub

Si ça va pas poste ton classeur sans données confidentielles bien entendu.

A+

Bonsoir

Pourquoi ne pas avoir mis ton code directement dans la feuille TEST ?

Amicalement

Nad

Bonsoir , je sais c'est confu: mais le classeur est très lourd c'est pour cela que je ne peux le joindre.

J'aimerais exécuter cette action de contrôle juste avant de quitter la feuille TEST.

je ne sais pas comment le faire , c'est pour cela qu'après avoir désactivée la feuille TEST je reviens dessus s'il manque un N° pour informer et obliger l'utilisateur de corriger la valeur manquante.

Oui, tout ça me parait clair, a-tu essayé en remplaçant ton code par celui que je t'ai suggéré plus haut ?

A+

Rechercher des sujets similaires à "fois message box"