[VBA] Problème Userform et focus

8 réponses
Avatar
Thierry.E
Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un UserForm
(en haut à droite) qui contient des boutons à cliquer, ce Userform doit être
toujours affiché. Pas de soucis pour configurer le UserForm, mon problème
est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le focus
et non la feuille en elle même. Ce qui veut dire que si je veux travailler
sur une cellule de la feuille, je dois d'abord cliquer sur cette feuille
pour lui faire prendre le focus. Bref, je ne sais pas comment faire perdre
le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry

8 réponses

Avatar
isabelle
bonjour Thierry,

as tu mit la propriété ShowModal à false ?

isabelle

Thierry.E a écrit :
Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un UserForm
(en haut à droite) qui contient des boutons à cliquer, ce Userform doit être
toujours affiché. Pas de soucis pour configurer le UserForm, mon problème
est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le focus
et non la feuille en elle même. Ce qui veut dire que si je veux travailler
sur une cellule de la feuille, je dois d'abord cliquer sur cette feuille
pour lui faire prendre le focus. Bref, je ne sais pas comment faire perdre
le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry





Avatar
Thierry.E
Merci pour ton aide,

Oui, j'ai mis la propriété Showmodal à false dans les propriétés de
l'userform. De plus d'après l'aide de Excel, l'instruction "UserForm1.Show
0" est sensée rendre l'userform non modal elle aussi... d'ailleurs si je
clique sur une cellule de la feuille de calcul, le focus passe à la feuille
et je peux travailler sur Excel normalement. Le problème est seulement lors
de l'affichage de l'userform, il s'affiche correctement mais prend le focus.

J'en perd mon latin...


Thierry

"isabelle" a écrit dans le message de news:

bonjour Thierry,

as tu mit la propriété ShowModal à false ?

isabelle

Thierry.E a écrit :
Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un
UserForm (en haut à droite) qui contient des boutons à cliquer, ce
Userform doit être toujours affiché. Pas de soucis pour configurer le
UserForm, mon problème est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le
focus et non la feuille en elle même. Ce qui veut dire que si je veux
travailler sur une cellule de la feuille, je dois d'abord cliquer sur
cette feuille pour lui faire prendre le focus. Bref, je ne sais pas
comment faire perdre le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry






Avatar
FS
Bonsoir,

Essaye de réactiver Excel juste après le lancement de ton userform. Chez
moi (Excel 2003) cela semble donner le résultat attendu (le userform
perd le focus) :

Sub essai()
UserForm1.Show 0
AppActivate "Microsoft Excel"
End Sub

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Thierry.E a écrit :
Merci pour ton aide,

Oui, j'ai mis la propriété Showmodal à false dans les propriétés de
l'userform. De plus d'après l'aide de Excel, l'instruction "UserForm1.Show
0" est sensée rendre l'userform non modal elle aussi... d'ailleurs si je
clique sur une cellule de la feuille de calcul, le focus passe à la feuille
et je peux travailler sur Excel normalement. Le problème est seulement lors
de l'affichage de l'userform, il s'affiche correctement mais prend le focus.

J'en perd mon latin...


Thierry

"isabelle" a écrit dans le message de news:

bonjour Thierry,

as tu mit la propriété ShowModal à false ?

isabelle

Thierry.E a écrit :
Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un
UserForm (en haut à droite) qui contient des boutons à cliquer, ce
Userform doit être toujours affiché. Pas de soucis pour configurer le
UserForm, mon problème est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le
focus et non la feuille en elle même. Ce qui veut dire que si je veux
travailler sur une cellule de la feuille, je dois d'abord cliquer sur
cette feuille pour lui faire prendre le focus. Bref, je ne sais pas
comment faire perdre le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry










Avatar
isabelle
bonjour thierry,

tu travaille sur quel version ?

isabelle

Thierry.E a écrit :
Merci pour ton aide,

Oui, j'ai mis la propriété Showmodal à false dans les propriétés de
l'userform. De plus d'après l'aide de Excel, l'instruction "UserForm1.Show
0" est sensée rendre l'userform non modal elle aussi... d'ailleurs si je
clique sur une cellule de la feuille de calcul, le focus passe à la feuille
et je peux travailler sur Excel normalement. Le problème est seulement lors
de l'affichage de l'userform, il s'affiche correctement mais prend le focus.

J'en perd mon latin...


Thierry

"isabelle" a écrit dans le message de news:


bonjour Thierry,

as tu mit la propriété ShowModal à false ?

isabelle

Thierry.E a écrit :

Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un
UserForm (en haut à droite) qui contient des boutons à cliquer, ce
Userform doit être toujours affiché. Pas de soucis pour configurer le
UserForm, mon problème est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le
focus et non la feuille en elle même. Ce qui veut dire que si je veux
travailler sur une cellule de la feuille, je dois d'abord cliquer sur
cette feuille pour lui faire prendre le focus. Bref, je ne sais pas
comment faire perdre le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry












Avatar
MichDenis
Bonjour Thierry,

Si tu veux que ta cellule soit active, et que tu puisse taper par exemple
directement dedans à la suite de l'ouverture de ton formulaire, voici
un bout de procédure de Michel Perron


'Déclaration des API dans le haut d'un module standard
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow& Lib "user32" (ByVal hwnd&, ByVal wCmd&)
Private Declare Function GetWindowLong& Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd&, ByVal nIndex&)
Private Declare Function GetWindowText& Lib "user32" Alias _
"GetWindowTextA" (ByVal hwnd&, ByVal lpString$, ByVal aint&)
Private Const mconMAXLEN = 255

'-------------------------------
Sub Ouvrir_Le_Formuaire()
Dim hwnd&, Style&, Title$, i&
hwnd = GetWindow(GetDesktopWindow(), 5)

'Ouverture de ton formulaire
UserForm1.Show 0 'Nom à adapter

Do While hwnd
Title = GetCaption(hwnd)
If Len(Title) Then
If GetWindowLong(hwnd, -16) And &H10000000 Then
If InStr(1, Title, Application.Caption, 1) Then
AppActivate Title

'La feuille et l'adresse où tu veux te retrouver
'dans ton application après avoir ouvert ton formulaire
'Si tu as plusieurs classeurs ouverts, tu devras spécifié
'le nom du classeur avant !
With Worksheets("Feuil2")
Application.Goto .Range("G25")
End With
Exit Sub
End If
End If
End If
hwnd = GetWindow(hwnd, 2)
Loop

End Sub
'----------------------------------------------
Function GetCaption(hwnd&) As String
Dim i%, Buffer$: Buffer = String$(254, 0)
i = GetWindowText(hwnd, Buffer, 255)
If i Then GetCaption = Left$(Buffer, i)
End Function
'----------------------------------------------




"Thierry.E" <aucune_at_aucune.fr> a écrit dans le message de groupe de discussion :
#
Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un UserForm
(en haut à droite) qui contient des boutons à cliquer, ce Userform doit être
toujours affiché. Pas de soucis pour configurer le UserForm, mon problème
est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le focus
et non la feuille en elle même. Ce qui veut dire que si je veux travailler
sur une cellule de la feuille, je dois d'abord cliquer sur cette feuille
pour lui faire prendre le focus. Bref, je ne sais pas comment faire perdre
le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry
Avatar
MichDenis
Bonjour Isabelle,

Quand le formulaire ouvre, si tu essaies de taper une donnée
dans une cellule, cela ne fonctionne pas ! Si j'ai bien compris,
c'est ce qu'il voudrait faire, avoir accès directement à une
cellule présélectionnée sans devoir utiliser la souris d'abord



"isabelle" a écrit dans le message de groupe de discussion :
e$
bonjour thierry,

tu travaille sur quel version ?

isabelle

Thierry.E a écrit :
Merci pour ton aide,

Oui, j'ai mis la propriété Showmodal à false dans les propriétés de
l'userform. De plus d'après l'aide de Excel, l'instruction "UserForm1.Show
0" est sensée rendre l'userform non modal elle aussi... d'ailleurs si je
clique sur une cellule de la feuille de calcul, le focus passe à la feuille
et je peux travailler sur Excel normalement. Le problème est seulement lors
de l'affichage de l'userform, il s'affiche correctement mais prend le focus.

J'en perd mon latin...


Thierry

"isabelle" a écrit dans le message de news:


bonjour Thierry,

as tu mit la propriété ShowModal à false ?

isabelle

Thierry.E a écrit :

Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un
UserForm (en haut à droite) qui contient des boutons à cliquer, ce
Userform doit être toujours affiché. Pas de soucis pour configurer le
UserForm, mon problème est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le
focus et non la feuille en elle même. Ce qui veut dire que si je veux
travailler sur une cellule de la feuille, je dois d'abord cliquer sur
cette feuille pour lui faire prendre le focus. Bref, je ne sais pas
comment faire perdre le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry












Avatar
Thierry.E
Bonjour et merci pour vos réponses !

Désolé pour le retard de retour, mais mon planning était un peu surchargé.

==> FS : Ton astuce fonctionne parfaitement je t'en remercie :)
==> Isabelle, encore merci pour ton aide, mon code doit fonctionner sous
Excel 2003 et Excel 2007.

Bonne journée à vous !
Thierry

"FS" a écrit dans le message de news:

Bonsoir,

Essaye de réactiver Excel juste après le lancement de ton userform. Chez
moi (Excel 2003) cela semble donner le résultat attendu (le userform perd
le focus) :

Sub essai()
UserForm1.Show 0
AppActivate "Microsoft Excel"
End Sub

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Thierry.E a écrit :
Merci pour ton aide,

Oui, j'ai mis la propriété Showmodal à false dans les propriétés de
l'userform. De plus d'après l'aide de Excel, l'instruction
"UserForm1.Show 0" est sensée rendre l'userform non modal elle aussi...
d'ailleurs si je clique sur une cellule de la feuille de calcul, le focus
passe à la feuille et je peux travailler sur Excel normalement. Le
problème est seulement lors de l'affichage de l'userform, il s'affiche
correctement mais prend le focus.

J'en perd mon latin...


Thierry

"isabelle" a écrit dans le message de news:

bonjour Thierry,

as tu mit la propriété ShowModal à false ?

isabelle

Thierry.E a écrit :
Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un
UserForm (en haut à droite) qui contient des boutons à cliquer, ce
Userform doit être toujours affiché. Pas de soucis pour configurer le
UserForm, mon problème est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le
focus et non la feuille en elle même. Ce qui veut dire que si je veux
travailler sur une cellule de la feuille, je dois d'abord cliquer sur
cette feuille pour lui faire prendre le focus. Bref, je ne sais pas
comment faire perdre le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry











Avatar
Thierry.E
Bonjour et merci pour ton aide,

Lorsque je vois ce genre de code, je me dis que j'ai encore beaucoup de
progrès à faire en programmation ^_^

Je conserve ton code dans mes archives, mais j'avoue ne pas avoir tout
compris. J'ai donc pour l'instant préféré la solution de FS qui fonctionne
bien.

Bonne journée,
Thierry

"MichDenis" a écrit dans le message de news:

Bonjour Thierry,

Si tu veux que ta cellule soit active, et que tu puisse taper par exemple
directement dedans à la suite de l'ouverture de ton formulaire, voici
un bout de procédure de Michel Perron


'Déclaration des API dans le haut d'un module standard
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow& Lib "user32" (ByVal hwnd&, ByVal
wCmd&)
Private Declare Function GetWindowLong& Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd&, ByVal nIndex&)
Private Declare Function GetWindowText& Lib "user32" Alias _
"GetWindowTextA" (ByVal hwnd&, ByVal lpString$, ByVal aint&)
Private Const mconMAXLEN = 255

'-------------------------------
Sub Ouvrir_Le_Formuaire()
Dim hwnd&, Style&, Title$, i&
hwnd = GetWindow(GetDesktopWindow(), 5)

'Ouverture de ton formulaire
UserForm1.Show 0 'Nom à adapter

Do While hwnd
Title = GetCaption(hwnd)
If Len(Title) Then
If GetWindowLong(hwnd, -16) And &H10000000 Then
If InStr(1, Title, Application.Caption, 1) Then
AppActivate Title

'La feuille et l'adresse où tu veux te retrouver
'dans ton application après avoir ouvert ton formulaire
'Si tu as plusieurs classeurs ouverts, tu devras spécifié
'le nom du classeur avant !
With Worksheets("Feuil2")
Application.Goto .Range("G25")
End With
Exit Sub
End If
End If
End If
hwnd = GetWindow(hwnd, 2)
Loop

End Sub
'----------------------------------------------
Function GetCaption(hwnd&) As String
Dim i%, Buffer$: Buffer = String$(254, 0)
i = GetWindowText(hwnd, Buffer, 255)
If i Then GetCaption = Left$(Buffer, i)
End Function
'----------------------------------------------




"Thierry.E" <aucune_at_aucune.fr> a écrit dans le message de groupe de
discussion :
#
Bonjour,

Dans une feuille excel, je souhaite afficher de façon permanente un
UserForm
(en haut à droite) qui contient des boutons à cliquer, ce Userform doit
être
toujours affiché. Pas de soucis pour configurer le UserForm, mon problème
est le suivant :
Lorsque j'affiche la feuille contenant le userform, c'est lui qui a le
focus
et non la feuille en elle même. Ce qui veut dire que si je veux travailler
sur une cellule de la feuille, je dois d'abord cliquer sur cette feuille
pour lui faire prendre le focus. Bref, je ne sais pas comment faire perdre
le focus au userform tout en le laissant affiché.

Voici le code utilisé dans la feuille :

Private Sub Worksheet_Activate()

Dim Cellule As Range

'Afficher l'USF1

'Initialise les paramètres du USF1

UserForm1.startUpPosition = 3
UserForm1.Left = Application.Width - UserForm1.Width - 20
UserForm1.Top = 130
UserForm1.Caption = "Commandes"

UserForm1.Show 0
ActiveSheet.Activate


End sub


Merci par avance pour votre aide,
Thierry