PROB lorsque je minimiser toutes les fenetres avec EXCEL & VBA [Résolu]

cs_RegiO 7 Messages postés mardi 27 mai 2003Date d'inscription 16 juin 2005 Dernière intervention - 9 juin 2005 à 10:52 - Dernière réponse : cs_RegiO 7 Messages postés mardi 27 mai 2003Date d'inscription 16 juin 2005 Dernière intervention
- 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 d’energie….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.

Merci d'avance de votre aide.
Afficher la suite 

2 réponses

Meilleure réponse
cs_RegiO 7 Messages postés mardi 27 mai 2003Date d'inscription 16 juin 2005 Dernière intervention - 10 juin 2005 à 13:19
3
Merci
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

Merci cs_RegiO 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

cs_RegiO 7 Messages postés mardi 27 mai 2003Date d'inscription 16 juin 2005 Dernière intervention - 10 juin 2005 à 13:11
0
Merci
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.