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 du Formulaire à la taille de l'écran de manière automatique et ainsi rendre l'utilisation optimale indépendamment de l'écran de l'utilisateur? 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.
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.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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.
Pour aller plus loin en VBA…
Et pour terminer, voici quelques autres articles qui pourraient vous être utiles…
- Liste de toutes les fonctions disponibles en VBA
- Comment ne pas bloquer le fichier Excel avec un Formulaire VBA affiché
- Manipulation des fichiers avec VBA (copie, suppression,…)
- Calcul de la SOMME en VBA
- Quelques outils Excel faits avec VBA (pour vous donner de l'inspiration!)
- RECHERCHEV en VBA – simple et pratique! Et cela marche aussi pour d'autres fonctions Excel…
9 commentaires sur “VBA: adapter la taille de Formulaire à la taille de l’écran”
Bonjour
Tout d'abord merci pour ce super cours VBA (très pédagogue)
Toutefois, avec la diminution de 5% mes command button sont devenu flou
J'ai tout d'abord diminué la taille de la police des button car le texte débordait
Le fait d'avoir mis une taille 7 au lieu de 8 a rendu presque illisible les commande button
Aurais-tu une solution pour que la diminution générale de la taille impact aussi le texte des button
J'espère que je me suis bien exprimé
Meilleur vœux pour 2021
Et merci d'avance pour ton aide
Magnifique ! fonctionne imppeccable ! MERCI.
Bonjour et merci pour ce code. Par contre, certains de mes formulaires paraissent un peu grand maintenant. Y aurait-il possibilité qu'il soit zoomé que de la moitié? Et si oui, comment puis-je procéder?
Merci par avance pour la réponse.
Bonjour et merci pour cette formation, mon formulaire s'affiche plus grand mais s'adapte pas à la taille de mes ecrans, pourquoi ?
merci
tres cordialement
Isaac
Bonjour,
et si vous l'essayez avec un seul écran, ça marche ou pas?
Cordialement, Martin
Bonjour,
Non, ça ne marche pas non plus
mes ecrans , je voulais dire à chacun de mes PC
Très cordialement
I. HANAN
C'est vraiment top. Ca m'a fait économiser bc de temps, Grd Merci
bonjour,
j'ai intégré votre code mais ca ne fonctionne pas
je ne le place peut être pas ou il faudrait ?
pouvez vous m'orienter
d'avance merci