VBA: Trouver la résolution de l’écran 7


Si vous avez besoin d'adapter votre Classeur (Workbook) en fonction de l'écran de l'utilisateur, vous pouvez utiliser le langage VBA pour modifier le "Zoom" de la feuille (voir le code VBA plus bas).

Pour savoir de quelle manière adapter le Zoom vous devez connaître la résolution de l'écran de l'utilisateur. Les deux fonctions suivantes vous permettent d'obtenir la Largeur de l'écran, la Hauteur de l'écran et, naturellement, leur combinaison.

Résolution de l'écran avec VBA

Le code fait appel à la fonction GetSystemMetrics32 de la librairie "User32". Si cela ne vous dit rien, cela n'a pas d'importance. Sachez seulement que le code qui suit doit se trouver au début de votre Module (avant même les fonctions):

Declare Function GetSystemMetrics32 Lib "User32" _
    Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Grâce à cette déclaration, vous pouvez accéder à certaines valeurs système dont la résolution de l'écran de l'ordinateur.

Et voici donc les deux fonctions VBA prêtes à l'emploi (vous pouvez les utiliser directement telles quelles après un copier/coller). Elles retournent la hauteur et la largeur de l'écran en pixels.

Fonctions VBA pour trouver la Largeur et la Hauteur de l'écran

Declare Function GetSystemMetrics32 Lib "User32" _
    Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Public Function ResolutionEcranLargeur()
'par: Excel-Malin.com ( https://excel-malin.com )
    On Error GoTo FunctionErreur
    Dim LargeurEcran As Long
    
        LargeurEcran = GetSystemMetrics32(0) 'largeur de l'écran en pixels
        ResolutionEcranLargeur = LargeurEcran
    
    Exit Function
FunctionErreur:
    ResolutionEcranHauteur = ""
End Function


Public Function ResolutionEcranHauteur()
'par: Excel-Malin.com ( https://excel-malin.com )
    On Error GoTo FunctionErreur
    Dim HauteurEcran As Long
    
        HauteurEcran = GetSystemMetrics32(1) 'hauteur de l'écran en pixels
        ResolutionEcranHauteur = HauteurEcran
        
    Exit Function
FunctionErreur:
    ResolutionEcranHauteur = ""
End Function

 

Exemple d’utilisation des fonctions ResolutionEcranLargeur() et ResolutionEcranHauteur()

Voici comment vous pouvez obtenir le message contenant la résolution de votre écran (le résultat est formaté).

Sub ResolutionEcran()
'par: Excel-Malin.com ( https://excel-malin.com )
    On Error GoTo ResolutionEcranErreur
    
    MsgBox "La résolution de l'écran (largeur x hauteur): " & (Chr(13) & Chr(10)) & Format(ResolutionEcranLargeur, "#,##0") & " x " & Format(ResolutionEcranHauteur, "#,##0"), vbInformation
    
    Exit Sub
ResolutionEcranErreur:
    MsgBox "La résolution de l'écran n'a pas pu être obtenue..."
End Sub

VBA: adapter la Feuille à la taille de l'écran

Maintenant que nous avons la résolution de l'écran de l'utilisateur, nous pouvons utiliser cette information pour adapter le Zoom de la Feuille.

Nous pouvons créer deux ou même plusieurs "tailles" de la Feuille. Pour un résultat optimal, il vous faudra tester le résultat sur les différentes résolution et trouver la valeur de Zoom qui convient le mieux. Voyez l'exemple suivant…

Exemple: comment adapter le Zoom de la Sheet selon la résolution de l'écran

Dans cet exemple, la Feuille est créée sur un écran avec la largeur de 1280 pixels. Pour être sûr que l'utilisateur avec un écran avec une plus faible résolution (par exemple: la largeur habituelle de 1024 pixels) puisse voir tout le contenu, nous adaptons le Zoom de la Feuille à 68%. L'utilisateur avec un écran de 1280 pixels de large verra le contenu dans sa taille originale (Zoom = 100%).

Sub AdapterZoomSelonResolution()
'par: Excel-Malin.com ( https://excel-malin.com )
    On Error GoTo ExempleErreur
    
            Select Case ResolutionEcranLargeur 'tester la résolution de la largeur
                'adapter le zoom du WorkBook selon le résultat
                Case 1280: ActiveWindow.Zoom = 100
                Case 1024: ActiveWindow.Zoom = 68
                Case Else
            End Select
    Exit Sub
ExempleErreur:
    MsgBox "Une erreur est survenue..."
End Sub

Pour aller plus loin

35 0




Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

7 commentaires sur “VBA: Trouver la résolution de l’écran

  • Delph

    Bonjour,

    J'ai un souci pour adapter le Zoom dans Excel automatiquement. J'ai un écran de 15″ et un écran de 21″. Les deux ont la même résolution : 1920×1080. Pourtant l'affichage n'est pas le même, même si le zoom est identique dans la feuille excel.
    J'ai compris que cela venait du fait de "la mise en échelle" de l'écran. Pour mon écran de 15″, j'ai une mise en échelle de 125% et pour mon écran de 21″, j'ai une mise en échelle de 100%. Comment est-il possible de connaitre via le code VBA la valeur de la mise en échelle ?

    Merci d'avance

    • Ludovic

      'Recherche par 'tatonnement'
      Function GetPixelSize(wtTarget As Worksheet) As Double
      Dim rh As Double
      Dim dMem As Double
      Dim pxSz As Double
      Dim dTmp As Double
          
          rh = 1
          dMem = wtTarget.Rows(1).RowHeight
              
          wtTarget.Rows(1).RowHeight = rh
          pxSz = wtTarget.Range("B2").Top
          While pxSz = 0
              rh = rh + 1
              wtTarget.Rows(1).RowHeight = rh
              pxSz = wtTarget.Range("B2").Top
          Wend
          dTmp = pxSz
          Do
              pxSz = dTmp
              rh = rh - 0.1
              wtTarget.Rows(1).RowHeight = rh
              dTmp = wtTarget.Range("B2").Top
          Loop Until dTmp = 0
          
          wtTarget.Rows(1).RowHeight = dMem
          GetPixelSize = pxSz
      End Function

  • GAEL

    Bonjour,
    j'ai 2 écrans un en paysage et l'autre en portrait. J'utilise actuellement cette fonction mais j'aimerai récupérer les démentions de mon 2eme écran et pas le 1er.
    es ce possible?

    • excel-malin.com Auteur de l’article

      Bonjour Gael,
      malheureusement, ce n'est pas aussi simple que cela. Par défaut, les valeurs:
      GetSystemMetrics32(0) et GetSystemMetrics32(1) correspondent respectivement à la largeur et à la hauteur de l'écran PRINCIPAL.

      Pour le reste c'est moins fiable.

      Ce que vous pouvez obtenir d'autre du système ce sont les valeurs:
      GetSystemMetrics32(80) : qui vous donne le nombre d'écrans
      GetSystemMetrics32(78) : qui vous donne la somme de la largeur des écrans
      GetSystemMetrics32(79) : qui vous donne la hauteur de l'écran avec la plus grande résolution
      – donc avec GetSystemMetrics32(78) - GetSystemMetrics32(0), vous pouvez obtenir la largeur de l'écran secondaire dans le cas où ce dernier est plus large que l'écran principal.

      Donc c'est compliqué et il faudra "chipoter" un peu…
      Cordialement, Martin

  • eric

    Bonjour,

    chez moi cela ne fonctionne pas, cela me dit que je dois adapter mon code pour être utilisé sur les systèmes 64 bits …

    Pourriez-vous m'aider ?

    Merci