OVH Cloud OVH Cloud

Re : Fenetre non modal (personne ne veux me repondre?)

3 réponses
Avatar
ced
Je repose ma question vu que la derni=E8re fois personne ne=20
m'a repondu ( peut-=EAtre aujourd'hui ...)

J'ai trouv=E9 sur un site des commandes pour r=E9duire des=20
fenetres non modal

macro mise dans un module:
Sub FeuilleNonModal()

MonUserForm1.Show vbModeless
=20
End Sub

macros misent dans la userform :
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As=20
String) As Long

Private Declare Function EnableWindow Lib "User32" _
(ByVal hWnd As Long, ByVal bEnable As Long) As Long

Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Sub UserForm_Activate()

EnableWindow FindWindowA("XLMAIN",=20
Application.Caption), 1

End Sub

Private Sub UserForm_Initialize()

Dim hWnd As Long

hWnd =3D FindWindowA(vbNullString, Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or=20
&H20000

End Sub

comment fait-on pour faire un agrandir/r=E9duire ( c'est le=20
bouton entre le bouton fermer et le bouton r=E9duire ) ?
.

3 réponses

Avatar
michdenis
Bonjour Ced,

Si le code (pas testé) que tu as publié, réduit le formulaire dans la barre des tâches, pour obtenir à nouveau ce même
formulaire à l'écran, place un bouton dans une de tes barres d'outils relié à cette macro

sub VoirFormulaire()

MonFormulaire.Show vbModeless

End sub

Et un autre bouton dans une de tes barres d'outils pour réduire ce formulaire dans la barre des tâches !


Je n'ai jamais vu de code (cela ne signifie pas que la chose n'existe pas) qui ajoute ce bouton à la barre des titres comme
dans une l'application windows elle-même.

En passant, lorsque tu affiches les différentes boîtes de dialogue d'excel, As-tu déjà vu ce bouton ?


Salutations!



"ced" a écrit dans le message de news:722201c3445f$a8e70480$
Je repose ma question vu que la dernière fois personne ne
m'a repondu ( peut-être aujourd'hui ...)

J'ai trouvé sur un site des commandes pour réduire des
fenetres non modal

macro mise dans un module:
Sub FeuilleNonModal()

MonUserForm1.Show vbModeless

End Sub

macros misent dans la userform :
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As
String) As Long

Private Declare Function EnableWindow Lib "User32" _
(ByVal hWnd As Long, ByVal bEnable As Long) As Long

Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Sub UserForm_Activate()

EnableWindow FindWindowA("XLMAIN",
Application.Caption), 1

End Sub

Private Sub UserForm_Initialize()

Dim hWnd As Long

hWnd = FindWindowA(vbNullString, Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or
&H20000

End Sub

comment fait-on pour faire un agrandir/réduire ( c'est le
bouton entre le bouton fermer et le bouton réduire ) ?
.
Avatar
ced
Tu n'as pas bien compris ce que fait cette macro :
- dans une fenetre userform classique, il n'y a qu'un
bouton disponible en haut à droite de la fenetre : c'est
le bouton fermer. La macro que j'ai trouvée sur un site
(je me rappel plus duquel) permet de faire "apparaitre"
le bouton réduire (il ne lance pas à proprement dit la
reduction de la fenetre)( Rq : la fenetre n'est pas
réduite dans la barre des taches mais en bas à gauche du
document excel => essaye cette macro tu comprendra peut-
être mieux ce que je veux dire)

Ce que je veux c'est faire apparaitre le bouton
réduire/agrandir (rq : quand je lance la macro que j'ai
décrite, le bouton agrandir/réduire apparait mais il est
indisponible => il est grisé)


-----Message d'origine-----
Bonjour Ced,

Si le code (pas testé) que tu as publié, réduit le
formulaire dans la barre des tâches, pour obtenir à

nouveau ce même
formulaire à l'écran, place un bouton dans une de tes
barres d'outils relié à cette macro


sub VoirFormulaire()

MonFormulaire.Show vbModeless

End sub

Et un autre bouton dans une de tes barres d'outils pour
réduire ce formulaire dans la barre des tâches !



Je n'ai jamais vu de code (cela ne signifie pas que la
chose n'existe pas) qui ajoute ce bouton à la barre des

titres comme
dans une l'application windows elle-même.

En passant, lorsque tu affiches les différentes boîtes
de dialogue d'excel, As-tu déjà vu ce bouton ?



Salutations!



"ced" a écrit dans le message de
news:722201c3445f$a8e70480$

Je repose ma question vu que la dernière fois personne ne
m'a repondu ( peut-être aujourd'hui ...)

J'ai trouvé sur un site des commandes pour réduire des
fenetres non modal

macro mise dans un module:
Sub FeuilleNonModal()

MonUserForm1.Show vbModeless

End Sub

macros misent dans la userform :
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As
String) As Long

Private Declare Function EnableWindow Lib "User32" _
(ByVal hWnd As Long, ByVal bEnable As Long) As Long

Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Sub UserForm_Activate()

EnableWindow FindWindowA("XLMAIN",
Application.Caption), 1

End Sub

Private Sub UserForm_Initialize()

Dim hWnd As Long

hWnd = FindWindowA(vbNullString, Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or
&H20000

End Sub

comment fait-on pour faire un agrandir/réduire ( c'est le
bouton entre le bouton fermer et le bouton réduire ) ?
..



.



Avatar
michdenis
Bonjour Ced,


Voici le code qui fait ce que tu demandes.

Attention, il y a plusieurs lignes qui seront coupées par le service de messagerie.

À la lecture du code, tu verras que tu peux jouer avec les options en activant et désactivant des lignes de code !

Je te souhaite de t'amuser à ton goût !!! ;-))


Salutations!


Tout le code qui suit est à copier directement dans le formulaire:


Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function GetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal wNewWord As Long) As
Long
Private Declare Function SendMessageA Lib "user32" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal
lParam As Long) As Long
Private Declare Function ExtractIconA Lib "shell32.dll" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal
nIconIndex As Long) As Long
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Long, ByVal fEnable As Long) As Long


Private Const SC_CLOSE As Long = &HF060 '* Close menu item
Private Const WS_MAXIMIZEBOX = &H10000 '* Maximise
Private Const WS_MINIMIZEBOX = &H20000 '* Minimise
Private Const WS_THICKFRAME = &H40000
Private Const WS_SIZEBOX = WS_THICKFRAME '* Taille ajustable

Private Const WS_EX_APPWINDOW = &H40000
Private Const GWL_STYLE = (-16)
Private Const GWL_EXSTYLE = (-20)

Private Const SW_HIDE = 0
Private Const SW_NORMAL = 1

Private Const WM_SETICON = &H80


Private Sub UserForm_Activate()
Dim wLong&, hWnd&, hIcon&, IcoPath As String

'* Handle de la fenêtre
hWnd = GetActiveWindow '-> Obligatoirement

hWnd = FindWindowA(vbNullString, Me.Caption) '-> Possible avec
EnableWindow FindWindowA("XLMAIN", Application.Caption), 1
End Sub

Sub UserForm_Initialize()

'* Chemin complet de l'icone
IcoPath = ThisWorkbook.Path & "Ctrfran.ico"
If Dir(IcoPath) = "" Then hIcon = 0 Else hIcon = ExtractIconA(0, IcoPath, 0)

hWnd = FindWindowA(vbNullString, Me.Caption)

ShowWindow hWnd, SW_HIDE '* Masquer la fenêtre
'wLong = GetWindowLongA(hWnd, GWL_EXSTYLE)
'* Réduction dans l'application -> Inactiver la ligne suivante
'* Réduction dans la barre de tâches -> Activer la ligne suivante
wLong = wLong Or WS_EX_APPWINDOW
SetWindowLongA hWnd, GWL_EXSTYLE, wLong

'* Installation de l'icone
SendMessageA hWnd, WM_SETICON, False, hIcon

'* Inhiber la croix de fermeture -> Activer la ligne suivante
'DeleteMenu GetSystemMenu(hWnd, 0), SC_CLOSE, 0&

'* add minimize, maximize and size
wLong = GetWindowLongA(hWnd, GWL_STYLE)
'* Choix possibles : wLong = wLong Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Or WS_SIZEBOX
wLong = wLong Or WS_MAXIMIZEBOX 'WS_MINIMIZEBOX
wLong = wLong Or WS_MINIMIZEBOX

SetWindowLongA hWnd, GWL_STYLE, wLong
ShowWindow hWnd, 0 'SW_NORMAL '* Afficher la fenêtre

End Sub




"ced" a écrit dans le message de news:0b5101c34498$48926fa0$
Tu n'as pas bien compris ce que fait cette macro :
- dans une fenetre userform classique, il n'y a qu'un
bouton disponible en haut à droite de la fenetre : c'est
le bouton fermer. La macro que j'ai trouvée sur un site
(je me rappel plus duquel) permet de faire "apparaitre"
le bouton réduire (il ne lance pas à proprement dit la
reduction de la fenetre)( Rq : la fenetre n'est pas
réduite dans la barre des taches mais en bas à gauche du
document excel => essaye cette macro tu comprendra peut-
être mieux ce que je veux dire)

Ce que je veux c'est faire apparaitre le bouton
réduire/agrandir (rq : quand je lance la macro que j'ai
décrite, le bouton agrandir/réduire apparait mais il est
indisponible => il est grisé)


-----Message d'origine-----
Bonjour Ced,

Si le code (pas testé) que tu as publié, réduit le
formulaire dans la barre des tâches, pour obtenir à

nouveau ce même
formulaire à l'écran, place un bouton dans une de tes
barres d'outils relié à cette macro


sub VoirFormulaire()

MonFormulaire.Show vbModeless

End sub

Et un autre bouton dans une de tes barres d'outils pour
réduire ce formulaire dans la barre des tâches !



Je n'ai jamais vu de code (cela ne signifie pas que la
chose n'existe pas) qui ajoute ce bouton à la barre des

titres comme
dans une l'application windows elle-même.

En passant, lorsque tu affiches les différentes boîtes
de dialogue d'excel, As-tu déjà vu ce bouton ?



Salutations!



"ced" a écrit dans le message de
news:722201c3445f$a8e70480$

Je repose ma question vu que la dernière fois personne ne
m'a repondu ( peut-être aujourd'hui ...)

J'ai trouvé sur un site des commandes pour réduire des
fenetres non modal

macro mise dans un module:
Sub FeuilleNonModal()

MonUserForm1.Show vbModeless

End Sub

macros misent dans la userform :
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As
String) As Long

Private Declare Function EnableWindow Lib "User32" _
(ByVal hWnd As Long, ByVal bEnable As Long) As Long

Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Sub UserForm_Activate()

EnableWindow FindWindowA("XLMAIN",
Application.Caption), 1

End Sub

Private Sub UserForm_Initialize()

Dim hWnd As Long

hWnd = FindWindowA(vbNullString, Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or
&H20000

End Sub

comment fait-on pour faire un agrandir/réduire ( c'est le
bouton entre le bouton fermer et le bouton réduire ) ?
..



.