Ne plus jamais faire apparaitre un message

loto

XLDnaute Occasionnel
Bonjour,

Peut-on générer une commande pour définitivement désactiver l'apparition d'un message dans une feuille ?
J'imagine 3 actions après un question genre :
Oui-> action 1
Non-> action 2
Ne plus montrer ce message -> le message n'apparaitra plus pour cette feuille mais pourrait le faire dans d'autres feuilles du classeur.

Est-ce que cela est faisable?

PS, je voulait le faire au moyen d'un USF que j'aurais renommé mais cela m'a fait méchamment buguer excel !!

Merci
 

PMO2

XLDnaute Accro
Re : Ne plus jamais faire apparaitre un message

Bonjour,

Votre question m'a intéressé car elle m'a permis d'utiliser les APIs concernant les Hooks.

MARCHE A SUIVRE

1) créez une feuille "test" avec 2 CommandButton (1 et 2) et copiez le code suivant dans sa fenêtre de code

Code:
Private Sub CommandButton1_Click()
Call AfficherMessage
End Sub

Private Sub CommandButton2_Click()
Call ReactiverMessage
End Sub


2) copiez le code suivant dans un module standard

Code:
Private Declare Function GetCurrentThreadId& Lib "kernel32" ()
Private Declare Function SetDlgItemText& Lib "user32" Alias "SetDlgItemTextA" _
 (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String)
Private Declare Function SetWindowsHookEx& Lib "user32" Alias "SetWindowsHookExA" _
 (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long)
Private Declare Function UnhookWindowsHookEx& Lib "user32" (ByVal hHook As Long)

Private hHook As Long

Private Const WH_CBT = 5
Private Const HCBT_ACTIVATE = 5

Public NE_PLUS_AFFICHER As Boolean

Public Const IDOK = 1
Public Const IDCANCEL = 2
Public Const IDABORT = 3
Public Const IDRETRY = 4
Public Const IDIGNORE = 5
Public Const IDYES = 6
Public Const IDNO = 7

Public Function myMsgBox() As Long
hHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxHookProc, 0, GetCurrentThreadId)
myMsgBox = MsgBox("Mon message", vbAbortRetryIgnore, "Mon titre de MsgBox") 'corps et titre du message à adapter
End Function

Private Function MsgBoxHookProc(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If lMsg = HCBT_ACTIVATE Then
  SetDlgItemText wParam, IDABORT, "Action 1"
  SetDlgItemText wParam, IDRETRY, "Action 2"
  SetDlgItemText wParam, IDIGNORE, "Ne plus afficher"
  UnhookWindowsHookEx hHook
End If
MsgBoxHookProc = False
End Function

Sub AfficherMessage()
Dim result&
If NE_PLUS_AFFICHER Then Exit Sub
result& = myMsgBox
Select Case result&
  Case IDABORT
    MsgBox "Action1"
  Case IDRETRY
    MsgBox "Action2"
  Case IDIGNORE
    NE_PLUS_AFFICHER = True
    With Sheets("test")
      .CommandButton1.BackColor = &HFF&
      .CommandButton2.Visible = True
    End With
End Select
End Sub

Sub ReactiverMessage()
NE_PLUS_AFFICHER = False
    With Sheets("test")
      .CommandButton1.BackColor = &H8000000F
      .CommandButton2.Visible = False
    End With
End Sub

Quand le message s'affiche on distingue 3 boutons.En cliquant sur le dernier, la MsgBox n'apparaît plus.

Cordialement.

PMO
Patrick Morange
 

Papou-net

XLDnaute Barbatruc
Re : Ne plus jamais faire apparaitre un message

Bonsoir loto, PMO2,

Une solution plus basique, mais qui fonctionne parfaitement. Je l'ai faite, alors je la transmets.

Sur chaque feuille du classeur, la cellule "IV65536" contient la valeur "VRAI".
Lorsque cette cellule est vraie, le message s'affiche. Si la valeur est "FAUX", alors pas d'affichage. Un click sur le bouton d'option "Ne plus afficher ce message" met la cellule "IV65536" de la feuille active. il ne reste plus qu'à définir les actions 1 et 2 (en ligne de commentaire) sur l'événement 'Click' des 2 premiers boutons.

Ah, j'oubliais : la colonne "IV" de chaque feuille est masquée.

Espérant avoir aidé.

Cordialement.
 

Pièces jointes

  • loto.xls
    36.5 KB · Affichages: 41
  • loto.xls
    36.5 KB · Affichages: 40
  • loto.xls
    36.5 KB · Affichages: 37

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin