Lier Fct "Iconiser" de Feuil Excel à Userform

  • Initiateur de la discussion Initiateur de la discussion Halffy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Halffy

XLDnaute Occasionnel
Lier Fct "Iconiser" de Feuil Excel à Userform [Résolu]

Bonjour chers forumeur, et d'ors et déjà bon week-end à tous sous ce beau soleil...
L'objet de ma nouvelle venue sur la toile:
Je miniminise avec un CommanButton un classeur Excel qui se loge donc dans la Barre de Tâches; Parralèllement cela fait apparaître un UserForm en haut à gauche sur le bureau (localisation manuelle), qui me permet en cliquant dessus de réagrandir mon classeur Excel (logé dans la Barre de Tâches).
Ma requête: Comment associé l'apparition de mon UserForm en cliquant non plus sur mon CommanButton, mais en cliquant sur l'icone "réduire" de Excel qui se trouve en Haut à Droite de la Feuille active?
Voilà... je vous remercie par avance; tandis que je continue mes recherches en vue d'une solution.
Ci-joint un fichier d'explication.
 

Pièces jointes

Dernière édition:
Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Bonsoit Halffy,

Je ne vois pas d'évènement qui puisse être créé par la réduction de la fenêtre Excel.

Alors un succédané que je vous laisse découvrir.

Si vous avez des questions, n'hésitez pas.

Nota : j'ai désactivé vos 2 lignes de code qui créaient des erreurs de compilation :

Code:
'ReleaseCapture
'SendMessage FindWindow(vbNullString, Me.Caption), &HA1, 2, 0&

A+
 

Pièces jointes

Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Bonjour,

J'ai développé deux choses
1) ce vous évoquez sur la réduction de l'application par l'icône "réduire" d'Excel
2) la réduction de la fenêtre du classeur
Si ce dernier point ne vous concerne pas il suffit de régler à False la constante ACTION_AU_NIVEAU_FENETRE cernée par des ###

MARCHE A SUIVRE (faites le test dans un nouveau classeur)

1) Copiez le code suivant dans un module standard
Code:
'### Constante à adapter ###
Public Const ACTION_AU_NIVEAU_FENETRE As Boolean = True 'True pour agir au niveau fenêtre sinon False
'###########################

Private Declare Function SetTimer& Lib "user32" _
  (ByVal hwnd As Long, ByVal nIDEvent As Long, _
  ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Private Declare Function KillTimer& Lib "user32" _
  (ByVal hwnd As Long, ByVal nIDEvent As Long)
  
Public NomFenetre As String
Public NoMake As Boolean
Dim OnTimer&

Private Sub LanceOnTime()
If Application.WindowState = xlMinimized Then
  Call OffTimer
  Application.OnTime Now + TimeValue("00:00:00"), "AfficheUserForm"
End If
End Sub

Public Sub RunTimer(Delai As Long)
If OnTimer& > 0 Then OffTimer
OnTimer& = SetTimer(0, 0, Delai, AddressOf LanceOnTime)
End Sub

Public Sub OffTimer(Optional dummy As Byte)
If OnTimer& > 0 Then
  OnTimer& = KillTimer(0&, OnTimer&)
  OnTimer& = 0
End If
End Sub

Public Sub myTimer(Optional dummy As Byte)
Call OffTimer
OnTimer& = 0
Call RunTimer(Delai:=0)
End Sub

Private Sub AfficheUserForm(Optional dummy As Byte)
AppActivate ThisWorkbook.Parent.Name
If Not NoMake Then UserForm1.Show
End Sub

2) Copiez le code suivant dans la fenêtre de code de ThisWorkbook
Code:
Dim myAppli As New clsEventApp

Private Sub Workbook_Activate()
If ACTION_AU_NIVEAU_FENETRE Then
  If myAppli.App Is Nothing Then Set myAppli.App = Excel.Application
End If
Call RunTimer(Delai:=0)
End Sub

Private Sub Workbook_Deactivate()
If Not myAppli.App Is Nothing Then Set myAppli.App = Nothing
Call OffTimer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not myAppli.App Is Nothing Then Set myAppli.App = Nothing
Call OffTimer
End Sub

3) Créez un UserForm1 avec un CommandButton1 et copiez le code suivant dans la fenêtre de code du UserForm
Code:
Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
NoMake = True
If NomFenetre <> vbNullString Then
  Me.CommandButton1.Caption = "Maximiser la fenêtre"
End If
If Application.WindowState = xlMinimized Then
  Me.CommandButton1.Caption = "Maximiser l'application"
End If
End Sub

Private Sub UserForm_Terminate()
NoMake = False
If Application.WindowState = xlMinimized Then
  Application.WindowState = xlMaximized
  Call RunTimer(Delai:=0)
End If
If NomFenetre <> vbNullString Then
  ThisWorkbook.Windows(NomFenetre).WindowState = xlMaximized
  NomFenetre = vbNullString
End If
End Sub

4) Créez un module de classe, appuyez sur F4 et mettez la propriété (Name) = clsEventApp
puis copiez le code suivant dans la fenêtre de code du module de classe
Code:
Public WithEvents App As Application

Private Sub App_WindowResize(ByVal WB As Workbook, ByVal Wn As Window)
If Wn.WindowState = xlMinimized Then
  NomFenetre = Wn.Caption
  With UserForm1
    .CommandButton1.Caption = "Maximiser la fenêtre"
    .Show
  End With
End If
End Sub

5) Sauvegardez le classeur, fermez-le puis ouvrez-le à nouveau pour que l'évènement Open puisse agir.
Il n'y a plus qu'à faire des essais.

Cordialement.

PMO
Patrick Morange
 
Dernière édition:
Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Bonjour Job75, PMO2,
Merci pour le temps consacré à la résolution de mon problème avant tout /
J'ai juste jeté un coup d'oeil rapide à ta solution Job75 car je dois partir de suite, je verrai cela plus amplement cette après-midi; PMO2, je n'ai pas eu le temps de regarder, mais je verrai également cet après-midi. D'ors et déjà, merci à vous 2, je vous tiens au courant avant ce soir / Bonne journée à vous 2, Halffy.
 
Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Messieurs, Re
Mais avant toute chose, SVP, arrêtez de me vouvoyer, j'ai l'impression d'être vieux!😛
Donc, comme promis, je vous donne quelques nouvelles; Job75, Grand Merci pour ta solution qui répond bien à ma demande / PMO2, Félicitations pour ton remarquable travail; effectivement, minimiser le feuille semble plus judicieux. Toutefois je viens de constater un nouveau problème qui découle directement de ta solution: une fois la feuille minimisée, je n'ai plus accès à Excel 🙁 / croyez-vous possible de régler ce défaut ?
 
Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Bonjour,

Suite à votre remarque
Toutefois je viens de constater un nouveau problème qui découle directement de ta solution: une fois la feuille minimisée, je n'ai plus accès à Excel / croyez-vous possible de régler ce défaut ?

J'ai modifié le code du UserForm (partie 3) ainsi que la pièce jointe de mon 1er message. Téléchargez-la et essayez pour voir si cela convient.

Cordialement.

PMO
Patrick Morange
 
Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Bonsoir PMO2,
Excusez-moi, je ne vous avais pas vu, j'étais sur autre chose...
Très heureux de vous retrouver sur la toile; je viens donc de charger votre programme corrigé et Excel me dit dans le module de classe lors du collage du texte: "Erreur de compilation: valide seulement dans un module objet (en surlignant "WithEvents")" / Je vous laisse appréhender le soucis car cela dépasse de loin mes connaissances. Avec mes remerciements.
 
Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Bonjour,

4) Créez un module de classe, appuyez sur F4 et mettez la propriété (Name) = clsEventApp
puis copiez le code suivant dans la fenêtre de code du module de classe

Je suppose que vous avez copié le code dans un module standard et NON dans un module de classe tel qu'il est précisé dans le paragraphe ci-dessus ????

Pour créer un module de classe faites, dans le VBE, menu Insertion/Module de classe.

Cordialement.

PMO
Patrick Morange
 
Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Bonjour PMO2,
Effectivement, je devais être fatigué hier soir car, effectivement, je n'avais pas créé le bon module; Donc ce matin, les yeux sont bien en face des trous, et j'ai bien effectué les bonnes manips. Résultats des courses: Idem. Lorsque je miniminise la feuille active, je n'ai toujours pas accès à Excel 🙁.
Si vous avez l'esprit tenace... et souhaitez continuer à relever le défi, je vous remercie par avance du temps que vous voudrez bien y consacrer; toutefois sachez que je ne veux surtout pas faire preuve d'exigence et que cela ne relève pas d'un caractère d'urgence. Je vous souhaite une bonne journée & surtout un bon courage (tandis que je regarde toujours de mon côté si je ne trouverai pas un filon).
 
Re : Lier Fct "Iconiser" de Feuil Excel à Userform

Bonjour,

Essayez la démarche suivant

1) Faites une recherche, dans tout le projet, de la méthode Show (vous devriez en trouver 3) et ajouter le paramètre vbModeless
(Exemple : If Not NoMake Then UserForm1.Show DEVIENT If Not NoMake Then UserForm1.Show vbModeless

2) Remplacez la Sub du UserForm1
Code:
Private Sub CommandButton1_Click()
Unload Me
End Sub
par
Code:
Private Sub CommandButton1_Click()
Unload Me
ThisWorkbook.Activate
End Sub

Est-ce mieux ? Sinon, je ne sais pas.

Cordialement.

PMO
Patrick Morange
 
Re : Lier Fct "Iconiser" de Feuil Excel à Userform [Résolu]

PMO2....
BINGO!!😎
Je vous tire toutes mes ficelles de caleçon (heu, toutes mes Félicitations!!) Franchement: Chapeau Bas. Vous venez de solutionner une difficultés de plus; cette fois-ci, ça marche, voir mieux! En effet, que je miniminise la feuille active ou l'application Excel elle-même, je peux toujours ouvrir un autre classeur Excel, ou une nouvelle feuille, et travailler dessus. Je vous remercie une nouvelle fois pour le temps consacré; bel esprit d'obstination, qui finit toujours pas payé, la preuve.
PMO2, Je vous souhaite une bonne journée.
PS: Si nous devions à nouveau nous croiser sur ce formidable forum, pourriez-vous s'il vous plait arrêter de me vouvoyer... je me suis pris un sacré coup de vieux, moi tout d'un coup là 😉.
Halffy very Happy 😀
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour