cs_RegiO
Messages postés7Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention16 juin 2005
-
9 juin 2005 à 10:52
cs_RegiO
Messages postés7Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention16 juin 2005
-
10 juin 2005 à 13:19
Bonjour à tous,
tout d'abord je tiens à remercier toutes les personnes qui participent à ce site qui est vraiment trés complet.
Je suis actuellement en train de coder un petit programme avec excel et VBA, et j'aimerai minimiser toutes les fenetres lorsque ma macro s'execute, de plus comme je me sers de usrform pour interagir avec l'utilisateur je veux cacher excel.
1. / Donc pour cacher excel, pas de souci je fais : Application.Visible = False (cela cache mon classeur excel)
2./ Ensuite, pour minimiser toutes les fenetres, a partir de code trouver sur le site, j'ai fais ceci :
Option Explicit
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
' Déclaration des constantes
' bVk code ASCII des touches.
Private Const VK_LWIN = &H5B ' Touche Windows
Private Const VK_KEY = &H4D ' Touche M
' dwFlags pour générer des événements.
Private Const KEYEVENTF_KEYUP = &H2 ' Relache la touche
Sub minimiser()
' Simule Win + M (= Minimise toutes les fenêtres.)
Call keybd_event(VK_LWIN, 0, 0, 0)
Call keybd_event(VK_KEY, 0, 0, 0)
Call keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0)
End Sub
Ceci marche trés bien en régle général...
...et la le hic lorsque j'ouvre un fichier excel (pas un nouveau classeur mais un classeur qui contient des données) et mon classeur avec mon code VBA, alors des lors que j'applique "minimiser()" cela minimiser toutes les applications
...mais cela minimiser aussi plein d'autre fenetre (je suppose que se sont des applications qui tournent dans le processus , je me retrouve avec une bonne 50 de fenetres minimiser : sysfader, mci command handling window, DDE SERVER WINDOW, la fenetre de jauge denergie .et du coup je suis obligé de faire CTRL+ALT+SUPP pour eteindre toutes ses fenetres.
Et c'est la que je comprend pas car cela marche trés bien sauf lorsque j'ouvre deux classeur EXCEL...si quelqu'un pouvait me filer un petit coup de main car la je sais pas trop koi faire...et je suis dans le cadre d'un stage en entreprise et j'ai pas le droit à l'erreur.
cs_RegiO
Messages postés7Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention16 juin 2005 10 juin 2005 à 13:19
Il faut donc d'abord minimiser et ensuite cacher l'application :)
Voila le code qui permet de minimiser :
Public Const WM_COMMAND = &H111
Public Const WM_MINIMIZED = &H1A3
Public Const WM_MINIMIZED_UNDO = &H1A0
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Sub minimiserWindow()
Dim hw As Long
Dim R As Long
'
hw = FindWindow("Shell_TrayWnd", vbNullString)
R = PostMessage(hw, WM_COMMAND, WM_MINIMIZED, 0&)
End Sub
cs_RegiO
Messages postés7Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention16 juin 2005 10 juin 2005 à 13:11
J'ai trouvé d'où venait le problème.
Tout simplement car je cachais mon application par application.visible = false et après je minimisais les applications du coup cela faisait un vieux plantage.
:)
Affaire résolue....j'aime kand cela se passe ainsi.