OVH Cloud OVH Cloud

ma form perd son showmodal

7 réponses
Avatar
Xavier POWAGA
Bonjour à tous,

encore un mystère pour moi. Voilà j'ai crée une "Form" showmodal=true et à
partir du clic sur un bouton contenu dans cette form j'ouvre un fichier en
utilisant application.Getopenfilename. A partir de là ma form n'est plus
showmodal, c'est à dire que je peux activer d'autres fenetre alors que je ne
le souhaite pas.

comment empécher ce phénomène.

merci

7 réponses

Avatar
michdenis
Bonjour Xavier,

Il n'y a aucune raison pour que cela arrive ...
quelle est la procédure du bouton qui ouvre ton fichier ?


Salutations!


"Xavier POWAGA" a écrit dans le message de news: 4417fd78$0$27989$
Bonjour à tous,

encore un mystère pour moi. Voilà j'ai crée une "Form" showmodal=true et à
partir du clic sur un bouton contenu dans cette form j'ouvre un fichier en
utilisant application.Getopenfilename. A partir de là ma form n'est plus
showmodal, c'est à dire que je peux activer d'autres fenetre alors que je ne
le souhaite pas.

comment empécher ce phénomène.

merci
Avatar
Michel Pierron
Bonjour Xavier;
Bah oui, c'est l'une des techniques possibles pour rendre une forme non
modale avec xl97; néanmoins, avec une version excel supérieure, cette fçon
de faire permet les sélections dans la feuille, mais ne donne pas la main au
clavier pour y écrire quoi que ce soit sauf par copier-coller.

Un exemple, les 3 techniques suivantes dans un module UserForm conduisent au
même constat:

Private Declare Function EnableWindow& Lib _
"user32" (ByVal hWnd&, ByVal fEnable&)
Private Declare Function FindWindow& Lib _
"user32" Alias "FindWindowA" _
(ByVal lpClassName$, ByVal lpWindowName$)

Private Sub Technique1()
EnableWindow FindWindow(vbNullString, Application.Caption), 1
End Sub

Private Sub Technique2()
Application.SendKeys "{esc}", True
Application.CommandBars.FindControl(ID:’7).Execute
End Sub

Private Sub Technique3()
Application.SendKeys "{esc}", True
Application.GetOpenFilename
End Sub

Private Sub UserForm_Activate()
'Technique1
'Technique2
Technique3
End Sub

Pour annuler l'activation possible du classeur, tu peux modifier la
procédure Technique3 comme suit:
Private Sub Technique3()
Application.SendKeys "{esc}", True
Application.GetOpenFilename
EnableWindow FindWindow(vbNullString, Application.Caption), 0
AppActivate Me.Caption
End Sub

MP


"Xavier POWAGA" a écrit dans le message de news:
4417fd78$0$27989$
Bonjour à tous,

encore un mystère pour moi. Voilà j'ai crée une "Form" showmodal=true et à
partir du clic sur un bouton contenu dans cette form j'ouvre un fichier en
utilisant application.Getopenfilename. A partir de là ma form n'est plus
showmodal, c'est à dire que je peux activer d'autres fenetre alors que je
ne le souhaite pas.

comment empécher ce phénomène.

merci



Avatar
Xavier POWAGA
ma procedure est lancer en cliquant sur un des boutons de ma forme

Private Sub Btnr_Click()
On Error Resume Next
NomduProgramme = ActiveWorkbook.Name
ChDrive Left(ThisWorkbook.Path, 1)
ChDir ThisWorkbook.Path
TextNomFichier.Text = Application.GetOpenFilename(("Fichier AIC (*.csv),
*.csv"))
End Sub

dès que application.GetOpenFilename est lancé ma fenetre n'est plus modale
pour info je suis sous excel 2002


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

Bonjour Xavier,

Il n'y a aucune raison pour que cela arrive ...
quelle est la procédure du bouton qui ouvre ton fichier ?


Salutations!


"Xavier POWAGA" a écrit dans le message de news:
4417fd78$0$27989$
Bonjour à tous,

encore un mystère pour moi. Voilà j'ai crée une "Form" showmodal=true et à
partir du clic sur un bouton contenu dans cette form j'ouvre un fichier en
utilisant application.Getopenfilename. A partir de là ma form n'est plus
showmodal, c'est à dire que je peux activer d'autres fenetre alors que je
ne
le souhaite pas.

comment empécher ce phénomène.

merci





Avatar
Xavier POWAGA
c'est gentils Michel mais j'ai rien compris. Mon niveau en VBA ne me permet
pas d'intégrer tes remarques. J'ai bien essayé, mais rien à faire.
Une bonne nuit de sommeil et demain peut être que j'y arriverai.

merci

Xavier


"Michel Pierron" a écrit dans le message de news:
%
Bonjour Xavier;
Bah oui, c'est l'une des techniques possibles pour rendre une forme non
modale avec xl97; néanmoins, avec une version excel supérieure, cette fçon
de faire permet les sélections dans la feuille, mais ne donne pas la main
au clavier pour y écrire quoi que ce soit sauf par copier-coller.

Un exemple, les 3 techniques suivantes dans un module UserForm conduisent
au même constat:

Private Declare Function EnableWindow& Lib _
"user32" (ByVal hWnd&, ByVal fEnable&)
Private Declare Function FindWindow& Lib _
"user32" Alias "FindWindowA" _
(ByVal lpClassName$, ByVal lpWindowName$)

Private Sub Technique1()
EnableWindow FindWindow(vbNullString, Application.Caption), 1
End Sub

Private Sub Technique2()
Application.SendKeys "{esc}", True
Application.CommandBars.FindControl(ID:’7).Execute
End Sub

Private Sub Technique3()
Application.SendKeys "{esc}", True
Application.GetOpenFilename
End Sub

Private Sub UserForm_Activate()
'Technique1
'Technique2
Technique3
End Sub

Pour annuler l'activation possible du classeur, tu peux modifier la
procédure Technique3 comme suit:
Private Sub Technique3()
Application.SendKeys "{esc}", True
Application.GetOpenFilename
EnableWindow FindWindow(vbNullString, Application.Caption), 0
AppActivate Me.Caption
End Sub

MP


"Xavier POWAGA" a écrit dans le message de news:
4417fd78$0$27989$
Bonjour à tous,

encore un mystère pour moi. Voilà j'ai crée une "Form" showmodal=true et
à partir du clic sur un bouton contenu dans cette form j'ouvre un fichier
en utilisant application.Getopenfilename. A partir de là ma form n'est
plus showmodal, c'est à dire que je peux activer d'autres fenetre alors
que je ne le souhaite pas.

comment empécher ce phénomène.

merci







Avatar
michdenis
Bonjour Xavier,

J'ai testé ta procédure sous Excel 2003... aucun problème relevé.

N.B. est-ce que ton formulaire est vraiment dans une fenêtre non modale ?
Je te suggère d'ajouter la ligne de code "on error resume next" lorsque
tu as terminé de tester ta procédure ...


Salutations!



"Xavier POWAGA" a écrit dans le message de news: 44188fbe$0$13222$
ma procedure est lancer en cliquant sur un des boutons de ma forme

Private Sub Btnr_Click()
On Error Resume Next
NomduProgramme = ActiveWorkbook.Name
ChDrive Left(ThisWorkbook.Path, 1)
ChDir ThisWorkbook.Path
TextNomFichier.Text = Application.GetOpenFilename(("Fichier AIC (*.csv),
*.csv"))
End Sub

dès que application.GetOpenFilename est lancé ma fenetre n'est plus modale
pour info je suis sous excel 2002


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

Bonjour Xavier,

Il n'y a aucune raison pour que cela arrive ...
quelle est la procédure du bouton qui ouvre ton fichier ?


Salutations!


"Xavier POWAGA" a écrit dans le message de news:
4417fd78$0$27989$
Bonjour à tous,

encore un mystère pour moi. Voilà j'ai crée une "Form" showmodal=true et à
partir du clic sur un bouton contenu dans cette form j'ouvre un fichier en
utilisant application.Getopenfilename. A partir de là ma form n'est plus
showmodal, c'est à dire que je peux activer d'autres fenetre alors que je
ne
le souhaite pas.

comment empécher ce phénomène.

merci





Avatar
Michel Pierron
Bonjour Xavier;
Je persiste et je signe, l'utilisation de GetOpenFilename annule en partie
la propriété modal de l'UserForm et autorise ensuite la sélection de
cellules sur la feuille (testé avec xl2003) pour les versions d'Excel
supérieures à xl97. Avec xl97, cette méthode annule totalement la propriété
modal de l'UserForm.
Pour éviter ce problème, en première ligne de ton module UserForm ou en
deuxième si tu utilises l'instruction Option Explicit, tu fais un
copier-coller des deux déclarations suivantes:

Private Declare Function EnableWindow& Lib _
"user32" (ByVal hWnd&, ByVal fEnable&)
Private Declare Function FindWindow& Lib _
"user32" Alias "FindWindowA" _
(ByVal lpClassName$, ByVal lpWindowName$)

Ensuite, tu modifies ta procédure comme suit; je te conseille de passer par
une variable intermédiaire (fName ou ce que tu souhaites) pour gérer le cas
où l'utilisateur annule la sélection de fichier :

Private Sub Btnr_Click()
On Error Resume Next
Dim fName As String
NomduProgramme = ActiveWorkbook.Name
ChDrive Left(ThisWorkbook.Path, 1)
ChDir ThisWorkbook.Path
fName = Application.GetOpenFilename(("Fichier AIC (*.csv),*.csv"))
If Len(fName) > 7 Then TextNomFichier.Text = fName
EnableWindow FindWindow(vbNullString, Application.Caption), 0
AppActivate Me.Caption
End Sub

Le nom du fichier comprend nécessairement au moins 8 caractères (exemple:
c:a.csv) tandis que l'annulation renvoie Faux ou False (suivant la langue)
qui ne correspond au mieux qu'à 5 caractères; la condition If Len(fName) > 7
te permets donc de gérer la condition d'annulation et / ou la sélection d'un
nom de fichier valide.
La sélection possible des cellules dans le classeur suite à l'utilisation de
GetOpenFilename est annulée par la ligne d'instruction EnableWindow
FindWindow(vbNullString, Application.Caption), 0 et la réactivation de
l'UserForm au premier plan par l'instruction AppActivate Me.Caption

MP

"Xavier POWAGA" a écrit dans le message de news:
4418924a$0$13225$
c'est gentils Michel mais j'ai rien compris. Mon niveau en VBA ne me
permet pas d'intégrer tes remarques. J'ai bien essayé, mais rien à faire.
Une bonne nuit de sommeil et demain peut être que j'y arriverai.

merci

Xavier


"Michel Pierron" a écrit dans le message de news:
%
Bonjour Xavier;
Bah oui, c'est l'une des techniques possibles pour rendre une forme non
modale avec xl97; néanmoins, avec une version excel supérieure, cette
fçon de faire permet les sélections dans la feuille, mais ne donne pas la
main au clavier pour y écrire quoi que ce soit sauf par copier-coller.

Un exemple, les 3 techniques suivantes dans un module UserForm conduisent
au même constat:

Private Declare Function EnableWindow& Lib _
"user32" (ByVal hWnd&, ByVal fEnable&)
Private Declare Function FindWindow& Lib _
"user32" Alias "FindWindowA" _
(ByVal lpClassName$, ByVal lpWindowName$)

Private Sub Technique1()
EnableWindow FindWindow(vbNullString, Application.Caption), 1
End Sub

Private Sub Technique2()
Application.SendKeys "{esc}", True
Application.CommandBars.FindControl(ID:’7).Execute
End Sub

Private Sub Technique3()
Application.SendKeys "{esc}", True
Application.GetOpenFilename
End Sub

Private Sub UserForm_Activate()
'Technique1
'Technique2
Technique3
End Sub

Pour annuler l'activation possible du classeur, tu peux modifier la
procédure Technique3 comme suit:
Private Sub Technique3()
Application.SendKeys "{esc}", True
Application.GetOpenFilename
EnableWindow FindWindow(vbNullString, Application.Caption), 0
AppActivate Me.Caption
End Sub

MP


"Xavier POWAGA" a écrit dans le message de news:
4417fd78$0$27989$
Bonjour à tous,

encore un mystère pour moi. Voilà j'ai crée une "Form" showmodal=true et
à partir du clic sur un bouton contenu dans cette form j'ouvre un
fichier en utilisant application.Getopenfilename. A partir de là ma form
n'est plus showmodal, c'est à dire que je peux activer d'autres fenetre
alors que je ne le souhaite pas.

comment empécher ce phénomène.

merci











Avatar
Xavier POWAGA
t'es génial michel. Cette fois j'ai tout compris. Bizarre, un peu plus haut
MichDenis ne semble pas rencontrer mon pb en testant ma procédure.
je teste cet AM .
merci pour ta patience.

NB : Que des gens sympa sur ce forum

A+
Xavier


"Michel Pierron" a écrit dans le message de news:
%
Bonjour Xavier;
Je persiste et je signe, l'utilisation de GetOpenFilename annule en partie
la propriété modal de l'UserForm et autorise ensuite la sélection de
cellules sur la feuille (testé avec xl2003) pour les versions d'Excel
supérieures à xl97. Avec xl97, cette méthode annule totalement la
propriété modal de l'UserForm.
Pour éviter ce problème, en première ligne de ton module UserForm ou en
deuxième si tu utilises l'instruction Option Explicit, tu fais un
copier-coller des deux déclarations suivantes:

Private Declare Function EnableWindow& Lib _
"user32" (ByVal hWnd&, ByVal fEnable&)
Private Declare Function FindWindow& Lib _
"user32" Alias "FindWindowA" _
(ByVal lpClassName$, ByVal lpWindowName$)

Ensuite, tu modifies ta procédure comme suit; je te conseille de passer
par une variable intermédiaire (fName ou ce que tu souhaites) pour gérer
le cas où l'utilisateur annule la sélection de fichier :

Private Sub Btnr_Click()
On Error Resume Next
Dim fName As String
NomduProgramme = ActiveWorkbook.Name
ChDrive Left(ThisWorkbook.Path, 1)
ChDir ThisWorkbook.Path
fName = Application.GetOpenFilename(("Fichier AIC (*.csv),*.csv"))
If Len(fName) > 7 Then TextNomFichier.Text = fName
EnableWindow FindWindow(vbNullString, Application.Caption), 0
AppActivate Me.Caption
End Sub

Le nom du fichier comprend nécessairement au moins 8 caractères (exemple:
c:a.csv) tandis que l'annulation renvoie Faux ou False (suivant la
langue) qui ne correspond au mieux qu'à 5 caractères; la condition If
Len(fName) > 7 te permets donc de gérer la condition d'annulation et / ou
la sélection d'un nom de fichier valide.
La sélection possible des cellules dans le classeur suite à l'utilisation
de GetOpenFilename est annulée par la ligne d'instruction EnableWindow
FindWindow(vbNullString, Application.Caption), 0 et la réactivation de
l'UserForm au premier plan par l'instruction AppActivate Me.Caption

MP

"Xavier POWAGA" a écrit dans le message de news:
4418924a$0$13225$
c'est gentils Michel mais j'ai rien compris. Mon niveau en VBA ne me
permet pas d'intégrer tes remarques. J'ai bien essayé, mais rien à faire.
Une bonne nuit de sommeil et demain peut être que j'y arriverai.

merci

Xavier


"Michel Pierron" a écrit dans le message de
news: %
Bonjour Xavier;
Bah oui, c'est l'une des techniques possibles pour rendre une forme non
modale avec xl97; néanmoins, avec une version excel supérieure, cette
fçon de faire permet les sélections dans la feuille, mais ne donne pas
la main au clavier pour y écrire quoi que ce soit sauf par
copier-coller.

Un exemple, les 3 techniques suivantes dans un module UserForm
conduisent au même constat:

Private Declare Function EnableWindow& Lib _
"user32" (ByVal hWnd&, ByVal fEnable&)
Private Declare Function FindWindow& Lib _
"user32" Alias "FindWindowA" _
(ByVal lpClassName$, ByVal lpWindowName$)

Private Sub Technique1()
EnableWindow FindWindow(vbNullString, Application.Caption), 1
End Sub

Private Sub Technique2()
Application.SendKeys "{esc}", True
Application.CommandBars.FindControl(ID:’7).Execute
End Sub

Private Sub Technique3()
Application.SendKeys "{esc}", True
Application.GetOpenFilename
End Sub

Private Sub UserForm_Activate()
'Technique1
'Technique2
Technique3
End Sub

Pour annuler l'activation possible du classeur, tu peux modifier la
procédure Technique3 comme suit:
Private Sub Technique3()
Application.SendKeys "{esc}", True
Application.GetOpenFilename
EnableWindow FindWindow(vbNullString, Application.Caption), 0
AppActivate Me.Caption
End Sub

MP


"Xavier POWAGA" a écrit dans le message de news:
4417fd78$0$27989$
Bonjour à tous,

encore un mystère pour moi. Voilà j'ai crée une "Form" showmodal=true
et à partir du clic sur un bouton contenu dans cette form j'ouvre un
fichier en utilisant application.Getopenfilename. A partir de là ma
form n'est plus showmodal, c'est à dire que je peux activer d'autres
fenetre alors que je ne le souhaite pas.

comment empécher ce phénomène.

merci