--- Soumis par Dev Ashish---
Élimine le message "Printing".
(Q) Comment éliminer le message "Printing" qui accompagne la demande d'impression d'un rapport (état) sur imprimante?
(A) Ce message est interne à Access et ne peut, en soi, être caché directement depuis le code.
Par contre, en utilisant un Timer, on peut minimiser ce message peu après qu'il se soit affiché. La fenête ne peut être restaurée, et elle est automatiquement détruire une fois que l'ouvrage d'impression est localement terminée.
Note: le message reste visible jusqu'à ce que la procédure événementielle ne se déclanche, ce qui dépend de la valeur de la proprité TimerInterval du formulaire, et pendant le temps que met Access à exécuter le code suivant.
L'utilisation de la procédure événementielle du Timer est cruciale, ici, car c'est la seule procédure qui continue à être déclanchable même si Access présente un formulaire ou un message en mode modal.
Créer un formulaire (que vous ouvrez en mode caché) et affecter sa propriété TimerInterva là 300 ( trois dixièmes de seconde). La procédure événementielle devient
Private Sub Form_Timer() Call sWatchAccess(Application.hWndAccessApp) End Sub
Maintenant, du formulaire ayant la commande d'impression de l'état, ajouter le code requis en s'inspirant du code suivant:
Private Sub Command0_Click() On Error Resume Next DoCmd.OpenForm "Form2" DoEvents: DoEvents: DoEvents DoCmd.OpenReport "Sales by Category", acViewNormal DoCmd.Close acForm, "Form2" End Sub
où Form2 est le formulaire caché avec son Timer en fonction.
'************* Code Start ************* Private Declare Function apiGetClassName Lib "user32" _ Alias "GetClassNameA" _ (ByVal hWnd As Long, _ ByVal lpClassname As String, _ ByVal nMaxCount As Long) _ As Long Private Declare Function apiGetWindowText Lib "user32" _ Alias "GetWindowTextA" _ (ByVal hWnd As Long, _ ByVal lpString As String, _ ByVal aint As Long) _ As Long Private Declare Function apiGetLastActivePopup Lib "user32" _ Alias "GetLastActivePopup" _ (ByVal hWndOwnder As Long) _ As Long Private Declare Function apiShowWindow Lib "user32" _ Alias "ShowWindow" _ (ByVal hWnd As Long, _ ByVal nCmdShow As Long) _ As Long Private Const MAX_LEN = 255 Private Const GW_HWNDNEXT = 2 Private Const SW_HIDE = 0 Private Const SW_MINIMIZE = 6 Private Const SW_SHOWMINNOACTIVE = 7 Private Const SW_SHOWDEFAULT = 10 Sub sWatchAccess(ByVal hWndApp As Long) 'Requis: hWndAccessApp (poignée de référence à l'Application ) ' On Error GoTo Err_Handler Dim lnghWndChild As Long Dim strCaption As String Dim strClass As String Dim lngRet As Long 'Obtenir la dernière fenêtre popup de l'instance d'application hWndApp lnghWndChild = apiGetLastActivePopup(hWndApp) strClass = fGetClassName(lnghWndChild) strCaption = fGetCaption(lnghWndChild) 'est-ce une fenpetre modale? If strClass = "#32770" And Trim(strCaption) = "Printing" Then lngRet = apiShowWindow(lnghWndChild, SW_SHOWMINNOACTIVE) End If Exit_Here: Exit Sub Err_Handler: MsgBox "Error #: " & Err.Number & vbCrLf & Err.Description, _ vbCritical + vbOKOnly, "sWatchAccess-Runtime Error" Resume Exit_Here End Sub Private Function fGetClassName(ByVal hWnd As Long) As String Dim strBuffer As String Dim lngRet As Long strBuffer = String$(32, 0) lngRet = apiGetClassName(hWnd, strBuffer, Len(strBuffer)) If lngRet > 0 Then fGetClassName = Left$(strBuffer, lngRet) End If End Function Private Function fGetCaption(ByVal hWnd As Long) As String Dim strBuffer As String Dim lngRet As Long strBuffer = String$(MAX_LEN, 0) lngRet = apiGetWindowText(hWnd, strBuffer, Len(strBuffer)) If lngRet > 0 Then fGetCaption = Left$(strBuffer, lngRet) End If End Function '************ Code End ***************