VBA bouton réduction

Signaler
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,
J'aimerais afficher un bouton de réduction sur un userform que j'ai créé dans vba excel. Pourriez-vous m'aider s'il vous plait ?
Merci d'avance

4 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
doublon avec :
http://codes-sources.commentcamarche.net/forum/affich-10015350-bouton-de-reduction,
sauf que l'on apprend maintenant (et bien que tu poses ta question dans la section VB.net) que ce bouton est à afficher sur un UserForm de... VBA !
Qu'en est-il donc ? S'agit-il d'une appli VB.Net qui "pilote" une appli VBA ou d'une appli VBA ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
De toutes manières :
1) un userform de VBA/Excel n'est pas nativement doté d'un tel bouton dans sa barre de titre
2) il te faudra (avant même de parler d' "affichage") créer ton bouton
3) Il te faudra agir sur la fenêtre de l'userform :
- soit en jouant avec les propriétés Width, Height, Left et Top de ton userform (cela est à ta portée mais tu ne pourras ainsi "placer" l'userform dans la barre des tâches)
- soit en utilisant des fonctions de l'Api de Windows.et cela fait appel non à des connaissances VBA, mais à des connaissances de l'API de Windows.

Et si tu as l'intention de bûcher et utiliser les fonctions de l'Api de Windows qui vont t'être nécessaires, elles sont les suivantes (toutes de la librairie User32):

FindWindow (pour extraire le handle hwnd de ton userform)
GetWindowPlacement (pour "relever" l'état actuel d'affichage, en vue notamment de son rétablissement éventuel)
SetWindowPlacement ( pour procéder à la "réduction" souhaitée)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Allez va,
Regarde ce que ferait ceci :
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Sub UserForm_Initialize()
Dim S As Long, H As Long
H = FindWindow(vbNullString, Me.Caption)
S = GetWindowLong(H, -16) Or &H70000
SetWindowLong H, -16, S
End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Je précise que ma première réponse prenait en compte le fait que dans ton autre discussion/doublon (maintenant supprimée) tu disais vouloir mettre un bouton de réduction à côté du "bouton annuler" (qui ne pouvait donc qu'être un bouton de ton cru).
Mon code, ici, met un bouton de réduction (et plus) à côté du bouton de fermeture (la croix) dans la barre de titre. Ne pas confondre ce bouton avec un "bouton Annuler".

NOTA BENE : Tu remarqueras que mon code, qui agît sur le menu de la fenêtre, va plus loin encore :
- 3 boutons (minimiser, réduire, fermer)
- possibilité de redimensionner ton userform en l'étirant par des poignées/souris.
- possibilité d'utiliser les boutons de réduction et de "minimisation" pour rétablir la situation antérieure