Comment fermer une 2ème fenêtre lors de la fermeture ?

Bonjour les cracks,

Si je créée une nouvelle fenêtre sur un fichier, et je ferme la fenêtre principale cette 2ème fenêtre reste ouverte.
Je cherche en vain un moyen de fermer la fenêtre "1" et que cette autre fenêtre "2" se ferme également et automatiquement.

Merci d'avance.

Bonjour,

Et en langage Excel, où en français ça veut dire quoi

Bonjour,

A ma connaissance il n'y pas de moyen particulier de fermer 2 fenêtres simultanément. Sauf à fermer le classeur.

Ou alors il faut déclencher l'artillerie lourde et créer une macro qui va systématiquement tester la présence d'une fenêtre bis mais ça me semble un peu capillo-tracté.

Tu as vraiment besoin fréquemment de ces 2 fenêtres simultanées ?

Si oui il faudra créer une variable publique lors de l'ouverture de la deuxième feuille et lire cette variable au moment voulu pour fermer le deuxième s'il y a lieu...

A+

Bonjour à tous ,

Quand vous désirez cliquer sur la croix (en haut à droite) pour refermer la fenêtre, faites le en maintenant la touche Shift (Maj) appuyée. Sur mon O365 et Wondows11, ça fonctionne et ça referme le classeur.

Mais je ne suis par certain d'avoir bien compris votre problème.

@JExceL2fr : désolé je pensais avoir été assez clair, j'essaie avec d'autre mots :
Sur Excel il est possible de créer une nouvelle fenêtre (via le ruban Affichage/Nouvelle Fenêtre ou en vba "Thisworkbokk.NewWindow".
Le nom de la fenêtre initiale sera modifiée avec un " - 1" à la fin et la nouvelle fenêtre avec " - 2".
Lorsqu'on ferme la fenêtre initiale "-1" par défaut ça ne semble pas fermer la fenêtre "-2", et là est mon problème.
Voilà, j'espère que c'est plus clair.

@galopin01 : merci, bonne idée que je vais creuser en vérifiant la valeur de la variable dans l'événement BeforeClose du classeur principal

@mafraise : merci mais je cherche plus une manière via vba...voir explication ci-dessus si ma demande n'était pas assez claire...

Hello,

En reprenant les propriétés de l'objet Window object (Excel) | Microsoft Learn que vous créez avec Thisworkbook.NewWindow, on a la méthode .Close associée Window.Close method (Excel) | Microsoft Learn.

Donc avec une petite boucle de ce genre on ferme toutes les fenetres actives Workbook.Windows property (Excel) | Microsoft Learn.

Cependant, puisque plusieurs fenetres sont actives, la fermeture d'une fenetre ne lève pas l'évènement Workbook.BeforeClose puisqu'il est toujours actif. Malheureusement je n'ai pas trouvé d'évènement associé à la fermeture d'une fenetre…

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 'If Me.Saved = False Then Me.Save
 For Each openWin In ThisWorkbook.Windows
  openWin.Close
 Next openWin
End Sub

Après quelques recherches, je pense que Workbook.WindowActivate event (Excel) | Microsoft Learn est l'event le plus proche de celui recherché.

CEPENDANT ATTENTION : il est trigger à chaque activation de la fenetre Excel. Donc plusieurs précautions à prendre avant de fermer le workbook :

Vous devez, d'une manière ou d'une autre, vous assurer que l'utilisateur veut bien quitter le fichier.

On pourrait checker If Not Me.Saved Then Exit Sub, pour ne pas fermer si non sauvegardé manuellement, mais ce n'est pas suffisant.

L'event est aussi call quand vous créez les nouvelles fenêtres, ou que vous basculez de l'une à l'autre. Autrement dit supposons :

Vous ouvrez le classeur, la macro ouvrant vos fenêtres secondaires se lance.. et puisque vous n'avez encore rien modifié, le classeur se referme quand vous changez de focus. Pas terrible.

Donc voilà, je ne sais pas si quelqu'un a un Event plus approprié, autrement il faut que vous trouviez une condition à tester suffisamment précise pour vous assurer que l'utilisateur veut bien quitter le classeur.

A la limite je dois dire qu'un bouton "Quitter" me semble le plus simple.

Je n'ai jamais pratiqué ce genre de sport, toutefois il me semble bien que lorsque on ferme le classeur toutes les fenêtres se ferment... doc pas besoin de VBA dans ce cas de figure.

La question ne se pose que si l'on veut quitter une feuille pour regarder dans une autre : Si on veut systématiquement fermer la deuxième fenêtre on peut utiliser l'évènement Deactivate de la feuille en question ou l'évènement Workbook_SheetDeactivate(ByVal Sh As Object) de ThisWorkbook.

Notez que dans ThisWorkbook il existe également un évènement Workbook_WindowDeactivate(ByVal Wn As Window)

En jouant avec tous ces Events et en jouant avec Sh ou Wn qui est le paramètre de l'objet qu'on ferme et en vérifiant avec la variable que je vous ai sugérée précédemment, c'est bien le diable si vous n'arrivez pas à synchroniser cette fermeture...

Toutefois je sais que dans quelques cas de figure quand on utilise un 2ème écran une deuxième instance d'Excel est ouverte. Dans ce cas, je ne sais pas comment on peut agir sur cette deuxième instance. Il faut voir avec plus qualifié que moi !

A+

Bonsoir Arno76_68, le Fil,

Avec l'événement classeur ci-dessous toutes les fenêtres ouvertes seront fermées automatiquement dès que tu fermeras la première.

Private Sub Workbook_BeforeClose(Cancel as Boolean)
Nb = Windows.Count
For W = Nb to 1 step -1
Windows(W).Close
Next W
End sub

Bonsoir à tous,

X Cellus à écrit :

Avec l'événement classeur ci-dessous toutes les fenêtres ouvertes seront fermées automatiquement dès que tu fermeras la première.

Chez moi, ça ne le fait pas. Si j'ai n fenêtres ouvertes pour un même classeur, un clique sur la petite X ne referme que la fenêtre courante, c'est tout.

Les autres fenêtres du classeurs restent ouvertes et l'évènement Workbook_BeforeClose ne se produit pas puisque le classeur est toujours ouvert. Ce n'est qu'à la fermeture de la dernière fenêtre que Workbook_BeforeClose est appelée. Ce qui est inutile puisque toutes les autres fenêtres auront été préalablement refermées manuellement.

Ma conclusion est similaire à celle de Galopin01 : le problème semble simple mais sa résolution ne l'est pas et les évènements disponibles au niveau des fenêtres de classeurs ne sont pas vraiment adaptés pour ce cas.

Pour moi, le plus simple est d'utiliser le menu Fichier / Fermer pour fermer le classeur et dans ce cas toutes les fenêtres du classeur seront aussi fermées.

Exactement mafraise, c'est ce que j'écrivais aussi. Je ré-appuie la proposition d'utiliser Fichier > Fermer, ou un bouton lié à une macro effectuant cette action. Macro que l'on pourrait faire apparaitre, au pire, sur chaque feuille ou un UserForm flottant si jamais l'ouverture du menu fichier est "trop compliquée".

Pour faire plus "pro", on peut aussi faire une macro de fermeture de classeur générique dans le classeur personnel, et ajouter un bouton lié sur le Ruban. Comme ça toujours dispo.

Affecter une macro à un bouton - Support Microsoft

Bonjour à tous ,

Bonjour saboh12617 ,

saboh12617 a écrit,
si jamais l'ouverture du menu fichier est "trop compliquée".

Pour ceux qui ne peuvent pas utiliser de souris : tapez les touches : Alt + f puis k (pour klose sans doute )

Rechercher des sujets similaires à "comment fermer 2eme fenetre lors fermeture"