Icône de la ressource

VBA - Moniteurs / Écrans multiples - Quelques fonctions utiles pour les caractériser V3

Le fichier à télécharger contient entre autres:
  1. Le Module_GetMonitorInfoByEnum
  2. Le Module_GetExcelWindowMonitorInf
  3. Des Module de Test qui donnent quelques exemples d'utilisation, notamment le positionnement d'un UserForm dans un Moniteur donné.
Note: Voir toutes mes ressources -> https://excel-downloads.com/resources/?creator_id=268468

Les principales caractéristiques:
  1. Fonction GetMonitorInfoByEnum() retourne sous forme de table les caractéristiques de tous les Moniteurs connectés.

  2. Fonction GetExcelWindowMonitorInfo() retourne les caractéristiques du Moniteur qui contient la fenêtre Excel.
  • Les caractéristiques des Moniteurs sont sous la forme d'une structure:
    Code:
    Private Type MONITORINFO
        cbSize As Long
        rcMonitor As RECT
        rcWork As RECT
        dwFlags As Long
    End Type

  • Qui référence une autre structure de rectangle:
    Code:
    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type

    rcMonitor donne le rectangle en Pixels du Moniteur
    rcWork donne le rectangle en Pixels du Moniteur hors barre des tâches
    dwFlags = 1 pour le Moniteur primaire, 0 pour les autres
Remarque sur la structure de rectangle RECT:
  • Soit un moniteur primaire de taille 1920 x 1080 pixels.

  • Les valeurs du rectangle RECT du rcMonitor retournées seront:
    □ .Left = 0
    □ .Right = 1920
    □ .Top = 0
    □ .Bottom = 1080

  • Cela facilite le calcul de:
    □ Width = .Right - .Left
    □ Height = .Bottom - .top

  • Mais cela signifie aussi que les points qui font référence à
    □ .Right
    □ .Bottom
    sont en dehors de l'écran.

  • En effet:
    □ de 0 à 1920 il y a 1921 pixels (on part de 0), en largeur l'écran va donc de 0 à 1919.
    □ de 0 à 1080 il y a 1081 pixels (on part de 0), en hauteur l'écran va donc de 0 à 1079.
    Cela se vérifie avec le fichier joint en utilisant le bouton <Test MonitorFromPoint>

  • C'est d'ailleurs un principe général des rectangles utilisés en Windows API (GetWindowRect, GetClientRect, ...).
Versions:
  • V1 - Initiale.
  • V2 - Correction du Handle permettant de calculer les coordonnées du moniteur.
  • V3 - Correction d'un bug en récupération du Handle d'un Workbook multi-fenêtré.
  • J'aime
Réactions: jsdx

Derniers avis

bonjour,
joli travai, félicitation à toi.
Je cherchais une solution pour positionner mes userform lorsque j'avais un 2nd écran activé . Cela va me faciliter grandement la tâche. Un grand merci
bonjour
tout simplement parfait !!

Merci