likemonster
Messages postés40Date d'inscriptionvendredi 16 janvier 2009StatutMembreDernière intervention29 octobre 2009
-
25 mars 2009 à 13:07
likemonster
Messages postés40Date d'inscriptionvendredi 16 janvier 2009StatutMembreDernière intervention29 octobre 2009
-
25 mars 2009 à 16:37
Bonjour, j'aimerai lors de l'exécution de ma macro qu'une petite fenêtre s'ouvre avec comme message "Traitement en cours..."
J'ai fait des recherche sur internet mais je n'ai pas trouvé mon bonheur!! A chaque fois on parle de barre de progression.... bref je veux juste une fenêtre avec ce message et rien d'autre!!
Est ce possible ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 mars 2009 à 13:44
Salut
Note la catégorie modifiée pour ta prochaine question sur VBA
Il te faut créer une UserForm qui représente la fenêtre qui s'affichera quand tu le désirera. Appelons-la frmAttente.
Quand tu veux afficher la fenêtre, au début de ton traitement (*) :
Dim maForme As frmAttente
Set maForme = New frmAttente
maForme.Show vbModeless
' Option ici
DoEvents
' Ici ton traitement qui dure longtemps
' Option ici
maForme.Hide
Set maFome = Nothing
Option : Quand la forme est appelée, il se peut qu'elle se retrouve derrière les autres.
Pour forcer son affichage au premier plan :
- Créer un module
- Coller ce code à l'intérieur
Option Explicit
' Constantes de SetWindowPos :
Private Const HWND_TOPMOST As Long = -1
Private Const HWND_NOTOPMOST As Long = -2
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOACTIVATE As Long = &H10
Private 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 uFlags As Long) As Long
Public Sub SetTop(maForm As UserForm, _
ByVal Topmost As Boolean)
Dim hWndInsertAfter As Long
If Topmost Then
hWndInsertAfter = HWND_TOPMOST
Else
hWndInsertAfter = HWND_NOTOPMOST
End If
SetWindowPos maForm.hWnd, hWndInsertAfter, 0, 0, 0, 0, _
SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE
End Sub
- et l'appeler avant le DoEvents de la première partie :
Call SetTop (maForme, True)
- La rappeler avant de fermer la forme :
Call SetTop (maForme, False)
(*) Si l'appel et la fermeture de la forme doivent avoir lieu dans des procédures différentes, il faudra dimensionner la forme dans la partie Déclaration d'un module, par exemple.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)