Microsoft 365 Masquer le classeur à l'affichage de la form

lolobo

XLDnaute Nouveau
Bonjour à tous,

après avoir écumé les forums, je ne parviens pas à une solution satisfaisante.
Je souhaite que le classeur Excel ne soit pas visible à l'écran (ou aux écrans si il y en a plusieurs) et que seul l'Userform s'affiche.

- L'option Application.Visible = false ne convient pas car dans ce cas l'icone de l'application n'apparaît plus dans la barre des tâches et il faudrait utiliser la combinaison Alt + Tab pour la remettre au premier plan.

- Si je mets l'application en plein écran pour masquer Excel, le simple déplacement de la fenêtre suffit à "démasquer" la feuille.

- Si j'empêche le déplacement de l'Userform, l'utilisateur ne peut plus naviguer entre différentes applications sans avoir à les sélectionner via la barre des tâches.

- L'affichage d'une feuille vierge derrière l'Userform ne serait qu'un pis aller.

Auriez-vous la solution permettant de résoudre cette difficulté sans qu'elle engendre les conséquences citées plus haut ?
L'idéal étant que le déplacement de l'Userform entraîne simultanément celui de la feuille Excel qui y serait ancrée.

D'avance merci.
 

patricktoulon

XLDnaute Barbatruc
Bonjour
ben d’après ce que je viens de lire je pense d'abords qu'il faudrait savoir ce que tu veux

tu peux pas avoir le beurre ,l'argent du beurre , et le C.. de la crémière comme on dis chez nous

tu masque l'app c'est bien pour une raison non? pourquoi voudrais tu que l'utilisateur puisse y avoir accès

donc visible false a l'activate du userform et visible true au query_close du userform

Auriez-vous la solution permettant de résoudre cette difficulté sans qu'elle engendre les conséquences citées plus haut ?
L'idéal étant que le déplacement de l'Userform entraîne simultanément celui de la feuille Excel qui y serait ancrée.
ben c'est simple
dans l’événement
VB:
Dim propert
'----------------------------------------------------------------------------------------------------
Private Sub UserForm_Activate()    'evenement quand le userform s'active
    With Application
    If Not IsArray(propert) Then propert = Array(.WindowState, .Left, .Top, .Width, .Height)   'on mémorise la position initiale de la fenêtre application
        'on la dimentionne pareille que le userform
        .Width = Me.Width
        .Height = Me.Height
        .Top = Me.Top
        .Left = Me.Left
    End With
End Sub
'---------------------------------------------------------------------------------------------------
'evenement quand le userform se deplace
Private Sub UserForm_Layout()    
    With Application
    .Top = Me.Top
    .Left = Me.Left
End With
End Sub
'---------------------------------------------------------------------------------------------------
' on remet la fentre application comme avant a la fermeture du userform
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
     With Application
        .WindowState = propert(0)
        If propert(0) <> xlMaximized Then
            .Left = propert(1)
            .Top = propert(2)
            .Width = propert(3)
            .Height = propert(4)
        End If
    End With
End Sub
la fentre de l'application sera invisible tant que le userform sera affiché
 

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

Si je m'en tiens au titre de la demande, masquage du classeur (pas de l'application) à l'initialisation du userForm et démasquage avant fermeture.
A voir...
VB:
Private Sub UserForm_Initialize()
ThisWorkbook.Windows(1).Visible = False
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 ThisWorkbook.Windows(1).Visible = True
End Sub

Cordialement
 

lolobo

XLDnaute Nouveau
Cette fois est la bonne.
Mais peut-être me suis-je mal exprimé en parlant de masquer le classeur.
C'est Excel que je souhaite masquer.
Votre code masque la feuille Excel mais pas Excel.
 

Pièces jointes

  • 1572356806509.png
    1572356806509.png
    7.3 KB · Affichages: 16

lolobo

XLDnaute Nouveau
J'ai trouvé cette option qui répond à mon besoin.
VB:
Option Explicit

Private Sub UserForm_Initialize()
    MasquerAppli
End Sub

Private Sub UserForm_Layout()
    MasquerAppli
End Sub

Private Sub MasquerAppli()
    With Application
        .WindowState = xlNormal
        .Top = Me.Top
        .Left = Me.Left
        .Height = Me.Height
        .Width = Me.Width
    End With
End Sub

Merci à vous deux.
 

Discussions similaires