VBA: adapter la taille de Formulaire à la taille de l’écran


Les Formulaires sont une excellente fonctionnalité de VBA. Une de mes préférées je dois avouer. Mais parfois, on doit faire face à quelques difficultés. Par exemple comment adapter la taille de Formulaire à la taille de l'écran de manière automatique? Je vous propose une solution simple, efficace et toute prête à l'emploi.

Comment fonctionne la taille de Formulaire en VBA

Quand vous créez un formulaire, il a une hauteur (Height) et largeur (Width) fixe en Twips (unité de mesure correspondant à une 1440ème d'un pouce, c'est à dire 0,001764 cm). Le problème est que l'affichage peut varier selon la résolution de l'écran de l'utilisateur. Ou encore, avec Windows 10, et ses fonctions d'agrandissement (zoom) de tout le système.

VBA: Formulaire - Largeur

Bref, il peut facilement arriver que votre Formulaire ne rentre pas complètement sur l'écran de l'utilisateur ce qui peut très ennuyeux où même rendre votre formulaire/application tout à fait inutilisable (les boutons pas visibles car "en dehors" de l'écran…). Et comme vous ne maîtrisez pas la résolution de l'écran de l'utilisateur, il faut adapter le Formulaire. Pour cela, on va automatiquement ajuster sa hauteur, largeur et le Zoom – qui détermine la taille des objets se trouvant dans le formulaire.

 

Exemple de formulaire VBA

Exemple de formulaire VBA

Je vous propose donc une fonction générique qui adaptera la taille de votre formulaire et tous les éléments qu'il contient pour qu'ils correspondent à la taille de l'écran utilisé.

Code VBA pour ajuster un  Formulaire VBA à l'écran

Voici la procédure en question qui adaptera l'affichage de votre formulaire (sans le modifier!) pour qu'il puisse être affiché sur n'importe quel écran avec n'importe quelle résolution. Ainsi, il ne dépassera jamais les bords de l'écran.

Le code est écrit en sorte qu'il puisse être utilisé tel quel pour n'importe quel formulaire (en format paysage, portrait,…)

Voici donc le code de la procédure:

Sub AdapterTailleFormAEcran()
'par Excel-Malin.com ( https://excel-malin.com )

Application.WindowState = xlMaximized

If ActiveWindow.Width > Me.Width And ActiveWindow.Height > Me.Height Then Exit Sub

    If (Round((ActiveWindow.Width * 0.95) / Me.Width, 2) * 100) - 1 < (Round((ActiveWindow.Height * 0.95) / Me.Height, 2) * 100) - 1 Then
        Me.Zoom = (Round((ActiveWindow.Width * 0.95) / Me.Width, 2) * 100) - 1
        Me.Width = Me.Width * Me.Zoom / 100
        Me.Height = Me.Height * Me.Zoom / 100
    Else
        Me.Zoom = (Round((ActiveWindow.Height * 0.95) / Me.Height, 2) * 100) - 1
        Me.Width = Me.Width * Me.Zoom / 100
        Me.Height = Me.Height * Me.Zoom / 100
    End If

End Sub
Comment cela marche (si cela vous intéresse...)

Comment cela marche (si cela vous intéresse…)

J’ajoute cette explication à des fins pédagogiques. Si vous avez juste besoin du code tout fait, vous pouvez passer à la section suivante…

On procède en 4 étapes:

  1. On maximise la fenêtre de Excel pour pouvoir déterminer la taille utilisable de l’écran.
    Application.WindowState = xlMaximized
  2. On vérifie si le formulaire tel quel rentre sur l’écran (= ne dépasse pas). Si c’est le cas, il ne faut rien faire et la macro s’arrête là.
    If ActiveWindow.Width > Me.Width And ActiveWindow.Height > Me.Height Then Exit Sub
  3. Si le formulaire est trop grand on calcule à quel point il dépasse sur la largeur et sur la hauteur. On travaillera avec le côté qui dépasse (ou dépasse le plus au cas où les deux côtés sont trop grands)
    (Round((ActiveWindow.Width * 0.95) / Me.Width, 2) * 100) - 1 < (Round((ActiveWindow.Height * 0.95) / Me.Height, 2) * 100) - 1 Then
  4. On calcule le ratio entre la taille du formulaire et la taille de l’écran et on adapte le .Zoom, la largeur (.Width) et la hauteur (.Height) avec ce ratio. J’utilise également un ration de 0.95 (= je diminue la taille du formulaire de 5%) pour éviter qu’il dépasse derrière la barre des tâches…
    Me.Zoom = (Round((ActiveWindow.Height * 0.95) / Me.Height, 2) * 100) - 1
    Me.Width = Me.Width * Me.Zoom / 100
    Me.Height = Me.Height * Me.Zoom / 100

    ou

    Me.Zoom = (Round((ActiveWindow.Width * 0.95) / Me.Width , 2) * 100) - 1
    Me.Width = Me.Width * Me.Zoom / 100
    Me.Height = Me.Height * Me.Zoom / 100

Comment l'utiliser en pratique

Comme vous pouvez voir, la procédure travaille avec les propriétés du formulaire (Me.). Cela implique qu'elle doit se trouver dans le code du formulaire même pour lequel elle doit être utilisée.

Vous devez donc copier ce code et le coller dans le formulaire.

L'ajustement du formulaire a lieu au moment de l'initialisation de celui-ci (c'est à dire lors de la "préparation" du formulaire juste avant son affichage). Vous devez donc appeler la procédure AdapterTailleFormAEcran dans l'événement UserForm_Initialize.

Voici à quoi ressemblent donc les deux parties du code dont vous aurez besoin:

Private Sub UserForm_Initialize()
    'votre code
    '...
    '...
    
    'Adapter la taille du Form
    Call AdapterTailleFormAEcran
End Sub

Sub AdapterTailleFormAEcran()
'par Excel-Malin.com ( https://excel-malin.com )

Application.WindowState = xlMaximized

If ActiveWindow.Width > Me.Width And ActiveWindow.Height > Me.Height Then Exit Sub

    If (Round((ActiveWindow.Width * 0.95) / Me.Width, 2) * 100) - 1 < (Round((ActiveWindow.Height * 0.95) / Me.Height, 2) * 100) - 1 Then
        Me.Zoom = (Round((ActiveWindow.Width * 0.95) / Me.Width, 2) * 100) - 1
        Me.Width = Me.Width * Me.Zoom / 100
        Me.Height = Me.Height * Me.Zoom / 100
    Else
        Me.Zoom = (Round((ActiveWindow.Height * 0.95) / Me.Height, 2) * 100) - 1
        Me.Width = Me.Width * Me.Zoom / 100
        Me.Height = Me.Height * Me.Zoom / 100
    End If

End Sub

Et voilà… Simple comme bonjour 😉
Attention: n'oubliez pas que, comme mentionné plus haut, ce code doit être placé au niveau du Formulaire. Si donc votre projet contient 5 formulaires différents, ce code doit être copié dans chacun d'eux.

16 0



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.