Icône de la ressource

VBA - UserForm et Moniteurs - System Menu, Minimiser, Restaurer, Placement - Programmation avancée V4

Le fichier à télécharger contient:
  1. Le Module_UserFormAndMonitors à importer dans le projet VBA.
  2. Le Module_TestUserFormMinimization qui donne des exemples des différentes options de minimisation et de placement.
  3. Le Module_TestMonitors qui donne les RECT des Moniteurs de la configuration du PC.
Note: Voir toutes mes ressources -> https://excel-downloads.com/resources/?creator_id=268468

Les principales caractéristiques:
  • Office 2010+ (VBA7 sinon modifier les déclarations API et les LongPtr en Long).

  • La minimisation d'un UserForm passe par l'installation du menu système dans sa fenêtre.

    Les fonctions fournies donnent 3 possibilités de minimisation:
    1 - dans l'écran d'un moniteur (cas le plus fréquent car standard),
    2 - dans la fenêtre Excel active (le UserForm ne peut alors déborder de la fenêtre Excel sous peine de ne pas être visible),
    3 - dans la barre des tâches.

  • Avec 1 seul moniteur, c'est à dire dans 95% des cas, la gestion du positionnement d'un UserForm ne pose pas de problème particulier. Cela devient plus délicat avec plusieurs moniteurs tout en apportant l'avantage de ne pas placer le UserForm sur le même moniteur qu'Excel pour ne pas masquer l'un par l'autre.

    Ça devient encore plus délicat lorsque le Classeur Excel est multi-fenêtré car des phénomènes complexes doivent être maîtrisés lors de l'affichage et de la minimisation du UserForm. Surtout avec l'ambition de gérer 3 modes de minimisation !

    Les fonctions fournies donnent la possibilité de positionner un UserForm dans 4 zones de référence:
    1 - l'écran du moniteur désigné,
    2 - la Work Area (l'écran moins la barre des tâches) du moniteur désigné,
    3 - la fenêtre active du classeur Excel,
    4 - le Visible Range de la fenêtre active du classeur Excel.

    Le moniteur désigné peut l'être:
    1 - soit directement par son numéro,
    2 - soit par son décalage - précédent (-1), identique (0), suivant (+1) - par rapport au moniteur utilisé pour la fenêtre active du classeur Excel.

  • Liste des fonctions fournies: (voir la description des paramètres dans le code)
    • UserFormSystemMenu
    • PlaceUserFormInReferenceArea
    • UserFormLayout -> see important comments in the function code
    • UserFormMinimize
    • UserFormRestore
    • UserFormMaximize

    • CountOfMonitors
    • GetMonitorInfoByEnum
    • GetMonitorRECT
    • GetWorkAreaRECT
    • GetTaskBarRECT
    • GetActiveWindowExactRECT - GetWindowExactRECT
    • GetActiveWindowVisibleRangeRECT - GetWindowVisibleRangeRECT
    • GetActiveWindowMonitorNumber - GetWindowMonitorNumber
    • GetWorkbookWindowsMonitorNumbers
    • GetUserFormMonitorNumber
    • SetActiveWindowMonitorNumber

    • PixelsToPointsX
    • PixelsToPointsY
    • PointsToPixelsX
    • PointsToPixelsY
Versions:
  • V1 - Initiale
  • V2 - Change les noms des fonctions pour remplacer ExcelWindow par ActiveWindow puisque un classeur actif peut avoir plusieurs fenêtres et les fonctions s'intéressent à la dernière activée. Ajout de la fonction SetActiveWindowMonitorNumber().
  • V3 - Ajout de la fonction GetWorkbookWindowsMonitorNumbers() pour lister tous les moniteurs occupés par toutes les fenêtres d'un classeur. Utile pour les classeurs multi-fenêtrés au-delà de la seule ActiveWindow.
  • V4 - Correction de bugs en Multifenêtrage de classeur et simplification du UserForm_Layout().
  • J'aime
Réactions: MarcoV

Derniers avis

Peut-être peu utile pour beaucoup d'utilisateur... Mais très précieux pour ceux qui se sont déjà attelé à ce sujet (comme moi)
Bravo!