Gestion userform au démarrage d’Excel
Résolu/Fermé
mijean94
Messages postés
394
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
8 novembre 2021
-
30 mars 2016 à 15:14
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 30 mars 2016 à 18:17
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 30 mars 2016 à 18:17
A voir également:
- Gestion userform au démarrage d’Excel
- Pc lent au démarrage - Guide
- Liste déroulante excel - Guide
- Forcer demarrage pc - Guide
- Reinitialiser pc au demarrage - Guide
- Écran noir au démarrage - Guide
1 réponse
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 743
30 mars 2016 à 15:52
30 mars 2016 à 15:52
Bonjour,
Tout d'abord, ces deux fonctions doivent être chacune dans leur module :
> Private Sub Workbook_Open() dans le module ThisWorkBook
> Private Sub UserForm_Activate() dans le module de l'UserForm concerné (ici formulaire_debut)
Ensuite, Application.Width et Application.Height ne définissent en aucun cas les dimensions de l'écran. Il s'agit ici des dimensions de l'application Excel.
Or, tu as déterminé dans le premier code (Private Sub Workbook_Open()) que ces dimensions sont égales à 0 : Application.WindowState = xlMinimized
Donc, ton UserForm ne s'affiche pas correctement.
Pour obtenir les dimensions de l'écran (et non de l'application Excel), il te faut recourir à une api, "user32.dll", et tout particulièrement à une de ses fonctions : GetSystemMetrics.
Cette fonction retourne les dimensions de ton écran, quel qu'il soit, en pixel. Pour les transformer en "dimensions excel", il te faut les diviser par 1.333333333 (soit par : 1/0.75)
Le code de l'UserForm devient donc :
Tout d'abord, ces deux fonctions doivent être chacune dans leur module :
> Private Sub Workbook_Open() dans le module ThisWorkBook
> Private Sub UserForm_Activate() dans le module de l'UserForm concerné (ici formulaire_debut)
Ensuite, Application.Width et Application.Height ne définissent en aucun cas les dimensions de l'écran. Il s'agit ici des dimensions de l'application Excel.
Or, tu as déterminé dans le premier code (Private Sub Workbook_Open()) que ces dimensions sont égales à 0 : Application.WindowState = xlMinimized
Donc, ton UserForm ne s'affiche pas correctement.
Pour obtenir les dimensions de l'écran (et non de l'application Excel), il te faut recourir à une api, "user32.dll", et tout particulièrement à une de ses fonctions : GetSystemMetrics.
Cette fonction retourne les dimensions de ton écran, quel qu'il soit, en pixel. Pour les transformer en "dimensions excel", il te faut les diviser par 1.333333333 (soit par : 1/0.75)
Le code de l'UserForm devient donc :
Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal index As Long) As Long Const SM_CXSCREEN = 0 Const SM_CYSCREEN = 1 Const TRANSF_EXCEL As Double = 1 / 0.75 Private Sub UserForm_Activate() With Me .StartUpPosition = 3 .Width = GetSystemMetrics(SM_CXSCREEN) / TRANSF_EXCEL .Height = GetSystemMetrics(SM_CYSCREEN) / TRANSF_EXCEL .Left = 0 .Top = 0 End With End Sub
Modifié par mijean94 le 30/03/2016 à 16:57
Merci pour cette réponse rapide est des plus explicite.
Je vais incorporer le code dans mon programme et faire des testes.
ça marche nickel.
je peut mettre ce code dans mes autres UserForm aussi ?
Cordialement
30 mars 2016 à 18:17
oui, sans souci