Priorité à Excel

Résolu
cs_jbf Messages postés 14 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 13 septembre 2007 - 27 mars 2006 à 08:30
1meriem0 Messages postés 2 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 1 juin 2006 - 1 juin 2006 à 20:04
Bonjour,

je travaille sur une application qui fait de l'alarming en recupérant des valeurs sous Excel et génere des alarmes en fonction des valeurs recupérées. Ce que j'aimerais c'est que quand un utilisateur fait autre chose que regarder Excel pour voir si une alarme passe au rouge, par exemple parce qu'il tape un rapport sur Word, il y ait un évenement qui fasse en sorte que Excel s'active à la place de n'importe quelles applications qui puissent etre ouvertes sur l'ordi (Word, Internet, etc).

Merci de votre aide.

7 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
27 mars 2006 à 10:14
Salut,

tu peux mettre un code dans ThisWorbook_Deactivate
du genre ThisWorkbook.Activate

Mais attention, prévoit un code pour qu'il se désactive genre avec un mot de passe, sinon, à chaque fois que t'essaiera de sélectionner autre chose qu'excel (ou de le quitter), tu pourras pas.

Bonne journée

Mortalino
3
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
27 mars 2006 à 11:54
Salut jbf, salut mortalino,

si ton code continue bien à s'exécuter quand l'utilisateur se sert de Word, et s'il est capable de continuer sa scrutation dans le but de générer une alarme, alors exécute ce que dis mortalino, pas dans ThisDocument_Deactivate, mais plutôt dans la procédure qui élève le warning (qui a l'air de se trouver ailleurs que dans le document Excel, si j'ai bien compris. Où d'ailleurs? en quel langage?).

Notes-bien qu'en plus, il apparaît nécessaire de bien évaluer les différents cas de figure dans lesquels peut se retrouver ton utilisateur, notamment s'il ouvre un autre document Excel (avec du code qui s'exécute ou non), ou s'il ré-ouvre le document d'alarming (il faudrait alors, soit l'en empêcher, soit mettre à jour les 2).

Dans tous les cas, pour qu'on puisse te répondre juste, il faudrait que tu précises vraiment le contexte (ou au moins la répartition) de tes traitements.

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
3
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
27 mars 2006 à 15:16
Yes,

aussi, il vaut mieux, même si je pense maintenant que le code est dans le classeur Excel, mais que tu ne m'en a pas assuré, écrire :

dans un module :

Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const HWND_TOP = 0


Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
Public Const SWP_NOZORDER = &H4
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1


Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

et dans ta procédure de notification:

Dim lngRetour As Long
'permet à la fenêtre d'être une fenêtre de premier plan, en accordant à son
'thread une priorité plus élevée
lngRetour = SetForegroundWindow(Application.hwnd)
'spécifie à la fenêtre de passer au dessus de toutes les autres
lngRetour = SetWindowPos(Application.hwnd, _
HWND_TOPMOST, _
0, _
0, _
0, _
0, _
SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)
'notifie l'alarme à l'utilisateur
MsgBox "Je suis au top niveau!!!"
'spécifie à la fenêtre d'arrête de passer au dessus de toutes les autres
lngRetour = SetWindowPos(Application.hwnd, _
HWND_NOTOPMOST, _
0, _
0, _
0, _
0, _
SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)

Important, il faut, après la notification, rappeler SetWindowPos avec le flag HWND_NOTOPMOST, sinon, la fenêtre reste par dessus toutes les autres, même si elle n'est pas active.

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
3
cs_jbf Messages postés 14 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 13 septembre 2007
27 mars 2006 à 10:21
Non mais l'utilisateur a le droit de pas etre sans arret en train de regarder Excel, je veux pas l'empécher de quitter Excel. Je veux juste activer Excel si il regarde autre chose sur son ordi et qu'il y a une alarme qui se déclenche.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jbf Messages postés 14 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 13 septembre 2007
27 mars 2006 à 13:19
En fait, je veux retranscrire en VBA ceci:

SI alarmes rouges et l'utilisateur utilise WORD ou internet ou n'importe quoi, alors
on active le classeur et Excel et on met dans une Message Box "Alarme sur tel parametre"

SI on met simplement This Workbook.activate, l'onglet Excel en bas de l'écran clignote mais c'est tout, moi je veux activer Excel.

Merci d'avance.
0
cs_jbf Messages postés 14 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 13 septembre 2007
27 mars 2006 à 16:38
Impeccable tout ca, j'ai pas tout compris au code mais ca marche.

Je te remercie.

Jb
0
1meriem0 Messages postés 2 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 1 juin 2006
1 juin 2006 à 20:04
Salut, je ne suis pas très fort en macro et j'ai besoin d'aide. J' ai créer une créer une carte de controle sur une feuille excel dans laquelle je suis l'évolution de valeurs.
Ces valeurs varient entre 2 limites de controles.

J'aimerais créer une alarme (message ou qqch d'autres) qui me prévienne quand une valeur sort des limites de controles.

merci
0
Rejoignez-nous