Gestion userform au démarrage d’Excel

Résolu
mijean94 Messages postés 415 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J’ai trouvé deux codes sur le net

Lancer USF au démarrage :

Private Sub Workbook_Open()
Application.WindowState = xlMinimized
formulaire_debut.Show vbModeless
End Sub

Afficher un USF en plein écran :

Private Sub UserForm_Activate()
With Me
.StartUpPosition = 3
.Width = Application.Width
.Height = Application.Height
.Left = 0
.Top = 0
End With
End Sub


Que faut-il faire pour avoir les deux fonctions en une, donc :

Lancer l’USF en plein écran au démarrage ?

Merci pour vos réponses

Cordialement
A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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 :
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

0
mijean94 Messages postés 415 Date d'inscription   Statut Membre Dernière intervention   11
 
Bonjour,

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
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > mijean94 Messages postés 415 Date d'inscription   Statut Membre Dernière intervention  
 
je peut mettre ce code dans mes autres UserForm aussi ?
oui, sans souci
0