OVH Cloud OVH Cloud

Fermer ouvrir userform

15 réponses
Avatar
Thierry
Bonjour,
j'aimerais savoir s'il est possible de fermer un USERFORM=20
lorsque l'on change de page (en clickant sur les onglets=20
en bas de la page)...Et dans le cas contraire de r=E9ouvrir=20
le USRFORM lorsqu'on est de retour sur la feuille sur=20
lequel il doit s'ouvrir...

Merci
Thierry

10 réponses

1 2
Avatar
garnote
Salut Thierry,

Quelque chose du genre.
Tu mets la propriété ShowModal de ton UserForm à False
et tu crées deux macros de feuille :

Private Sub Worksheet_Activate()
UserForm1.Show
End Sub

Private Sub Worksheet_Deactivate()
Unload UserForm1
End Sub

Qu'en penses-tu ?

Serge

"Thierry" a écrit dans le message de
news: 06a601c3b41c$4fd83800$
Bonjour,
j'aimerais savoir s'il est possible de fermer un USERFORM
lorsque l'on change de page (en clickant sur les onglets
en bas de la page)...Et dans le cas contraire de réouvrir
le USRFORM lorsqu'on est de retour sur la feuille sur
lequel il doit s'ouvrir...

Merci
Thierry
Avatar
Merci Serge, ta réponse me parait pas mal mais il y a un
petit soucis...Mon workbook initiale va créer un nouveau
workbook (car je fais un Opentext) qui va créer de
nouvelles sheets.Donc tu comprendras que je n'ai pas accès
au départ aux pages que je vais créé donc je ne peut pas
mettre les maccros que tu me donnes dans les pages
puisqu'au départ elle n'existe pas...

Tu comprends ce que je veux dire Serge?
-----Message d'origine-----
Salut Thierry,

Quelque chose du genre.
Tu mets la propriété ShowModal de ton UserForm à False
et tu crées deux macros de feuille :

Private Sub Worksheet_Activate()
UserForm1.Show
End Sub

Private Sub Worksheet_Deactivate()
Unload UserForm1
End Sub

Qu'en penses-tu ?

Serge

"Thierry" a écrit
dans le message de

news: 06a601c3b41c$4fd83800$
Bonjour,
j'aimerais savoir s'il est possible de fermer un USERFORM
lorsque l'on change de page (en clickant sur les onglets
en bas de la page)...Et dans le cas contraire de réouvrir
le USRFORM lorsqu'on est de retour sur la feuille sur
lequel il doit s'ouvrir...

Merci
Thierry


.



Avatar
Vincent.
Oulala !
Mais je le dois de t'arrêter tout de suite, parce qu'il va
être possible d'inscrire ledit code dans les modules
souhaités lors de la création des feuilles...
Disons que lors de l'opentext, tu crées un objet workbook
qu'on va appeler myWbk.
Alors,

With ThisWorkbook.VBProject.VBComponents( _
Worksheets("Nom de la feuille").CodeName).CodeModule
.InsertLines 1, "End Sub"
.InsertLines 1, "Unload UserForm1"
.InsertLines 1, "Private Sub Worksheet_Deactivate()"
.InsertLines 1, ""
.InsertLines 1, "End Sub"
.InsertLines 1, "UserForm1.Show"
.InsertLines 1, "Private Sub Worksheet_Activate()"
End With

J'espère que cela te sera utile...
A+

V.

-----Message d'origine-----
Merci Serge, ta réponse me parait pas mal mais il y a un
petit soucis...Mon workbook initiale va créer un nouveau
workbook (car je fais un Opentext) qui va créer de
nouvelles sheets.Donc tu comprendras que je n'ai pas
accès

au départ aux pages que je vais créé donc je ne peut pas
mettre les maccros que tu me donnes dans les pages
puisqu'au départ elle n'existe pas...

Tu comprends ce que je veux dire Serge?
-----Message d'origine-----
Salut Thierry,

Quelque chose du genre.
Tu mets la propriété ShowModal de ton UserForm à False
et tu crées deux macros de feuille :

Private Sub Worksheet_Activate()
UserForm1.Show
End Sub

Private Sub Worksheet_Deactivate()
Unload UserForm1
End Sub

Qu'en penses-tu ?

Serge

"Thierry" a écrit
dans le message de

news: 06a601c3b41c$4fd83800$
Bonjour,
j'aimerais savoir s'il est possible de fermer un USERFORM
lorsque l'on change de page (en clickant sur les onglets
en bas de la page)...Et dans le cas contraire de réouvrir
le USRFORM lorsqu'on est de retour sur la feuille sur
lequel il doit s'ouvrir...

Merci
Thierry


.

.





Avatar
garnote
Très très oulala !!!
Mais où vont-ils chercher tout ça ?

;-)))

Serge

"Vincent." a écrit dans le message de
news: 000a01c3b42f$a6a1ccb0$
Oulala !
Mais je le dois de t'arrêter tout de suite, parce qu'il va
être possible d'inscrire ledit code dans les modules
souhaités lors de la création des feuilles...
Disons que lors de l'opentext, tu crées un objet workbook
qu'on va appeler myWbk.
Alors,

With ThisWorkbook.VBProject.VBComponents( _
Worksheets("Nom de la feuille").CodeName).CodeModule
.InsertLines 1, "End Sub"
.InsertLines 1, "Unload UserForm1"
.InsertLines 1, "Private Sub Worksheet_Deactivate()"
.InsertLines 1, ""
.InsertLines 1, "End Sub"
.InsertLines 1, "UserForm1.Show"
.InsertLines 1, "Private Sub Worksheet_Activate()"
End With

J'espère que cela te sera utile...
A+

V.

-----Message d'origine-----
Merci Serge, ta réponse me parait pas mal mais il y a un
petit soucis...Mon workbook initiale va créer un nouveau
workbook (car je fais un Opentext) qui va créer de
nouvelles sheets.Donc tu comprendras que je n'ai pas
accès

au départ aux pages que je vais créé donc je ne peut pas
mettre les maccros que tu me donnes dans les pages
puisqu'au départ elle n'existe pas...

Tu comprends ce que je veux dire Serge?
-----Message d'origine-----
Salut Thierry,

Quelque chose du genre.
Tu mets la propriété ShowModal de ton UserForm à False
et tu crées deux macros de feuille :

Private Sub Worksheet_Activate()
UserForm1.Show
End Sub

Private Sub Worksheet_Deactivate()
Unload UserForm1
End Sub

Qu'en penses-tu ?

Serge

"Thierry" a écrit
dans le message de

news: 06a601c3b41c$4fd83800$
Bonjour,
j'aimerais savoir s'il est possible de fermer un USERFORM
lorsque l'on change de page (en clickant sur les onglets
en bas de la page)...Et dans le cas contraire de réouvrir
le USRFORM lorsqu'on est de retour sur la feuille sur
lequel il doit s'ouvrir...

Merci
Thierry


.

.





Avatar
Denis Michon
Bonjour Thierry,

Si tu utilises cet événement du ThisWorkbook pour insérer ton code, je crois que cela devrait aller


Dans le ThisWorkbook de ton classeur :

'---------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Userform1.hide 'or unload userform1

End Sub
'---------------------


Salutations!



"Thierry" a écrit dans le message de
news:06a601c3b41c$4fd83800$
Bonjour,
j'aimerais savoir s'il est possible de fermer un USERFORM
lorsque l'on change de page (en clickant sur les onglets
en bas de la page)...Et dans le cas contraire de réouvrir
le USRFORM lorsqu'on est de retour sur la feuille sur
lequel il doit s'ouvrir...

Merci
Thierry
Avatar
thierry
Merci pour votre aide je pense que l'"on" tient le bon
bout cela dit lorque je met
/With Workbooks(answer).VBProject.VBComponents( _
/ Worksheets("Raw Data Charts").CodeName).CodeModule
/ .InsertLines 1, "End Sub"
/ .InsertLines 1, "Unload UserForm1"
/ .InsertLines 1, "Private Sub Worksheet_Deactivate()"
/ .InsertLines 1, ""
/ .InsertLines 1, "End Sub"
/ .InsertLines 1, "UserForm1.Show"
/ .InsertLines 1, "Private Sub Worksheet_Activate()"
/End With

j'ai une erreur qui me dit "erreur d'éxécution 9: indice
en dehors de la plage"...Et c'est la ligne du with qui est
en jaune...J'ai essayé de mettre with activeworkbook mais
j'obtien la meme erreur...

NB: vous l'aurez compris le nom de mon "deuxieme" workbook
est dans la variable answer...

Vous voyez pourquoi ça bug??
Merci

-----Message d'origine-----
Salut Serge,
Je la trouvais marrante celle-là ! ;-))
Cela dit, il vaudrait mieux remplacer ThisWorkbook par
MyWbk...
Un petit craquage bien légitime, ma(mon) foi(e).
A+

V.

-----Message d'origine-----
Très très oulala !!!
Mais où vont-ils chercher tout ça ?

;-)))

Serge

"Vincent." a écrit
dans le message de

news: 000a01c3b42f$a6a1ccb0$
Oulala !
Mais je le dois de t'arrêter tout de suite, parce qu'il
va


être possible d'inscrire ledit code dans les modules
souhaités lors de la création des feuilles...
Disons que lors de l'opentext, tu crées un objet workbook
qu'on va appeler myWbk.
Alors,

With ThisWorkbook.VBProject.VBComponents( _
Worksheets("Nom de la feuille").CodeName).CodeModule
.InsertLines 1, "End Sub"
.InsertLines 1, "Unload UserForm1"
.InsertLines 1, "Private Sub Worksheet_Deactivate()"
.InsertLines 1, ""
.InsertLines 1, "End Sub"
.InsertLines 1, "UserForm1.Show"
.InsertLines 1, "Private Sub Worksheet_Activate()"
End With

J'espère que cela te sera utile...
A+

V.

-----Message d'origine-----
Merci Serge, ta réponse me parait pas mal mais il y a un
petit soucis...Mon workbook initiale va créer un nouveau
workbook (car je fais un Opentext) qui va créer de
nouvelles sheets.Donc tu comprendras que je n'ai pas
accès

au départ aux pages que je vais créé donc je ne peut pas
mettre les maccros que tu me donnes dans les pages
puisqu'au départ elle n'existe pas...

Tu comprends ce que je veux dire Serge?
-----Message d'origine-----
Salut Thierry,

Quelque chose du genre.
Tu mets la propriété ShowModal de ton UserForm à False
et tu crées deux macros de feuille :

Private Sub Worksheet_Activate()
UserForm1.Show
End Sub

Private Sub Worksheet_Deactivate()
Unload UserForm1
End Sub

Qu'en penses-tu ?

Serge

"Thierry" a écrit
dans le message de

news: 06a601c3b41c$4fd83800$
Bonjour,
j'aimerais savoir s'il est possible de fermer un
USERFORM



lorsque l'on change de page (en clickant sur les
onglets




en bas de la page)...Et dans le cas contraire de
réouvrir



le USRFORM lorsqu'on est de retour sur la feuille sur
lequel il doit s'ouvrir...

Merci
Thierry


.

.





.

.







Avatar
Vincent.
Bonjour Thierry,
Est-ce que tu pourrais rajouter le code suivant avant le
with :
Dim x
Set x = Workbooks(answer)
Set x = Workbooks(answer).VBProject
Set x = Workbooks(answer).VBProject.VBComponents( _
Worksheets("Raw Data Charts").CodeName)
Set x = Workbooks(answer).VBProject.VBComponents( _
Worksheets("Raw Data Charts").CodeName).CodeModule

Ca devrait permettre quel est l'élément qui n'est pas
reconnu dans la ligne du with...
Peut-être est-ce un problème de portée de variable. Mais
sans plus d'info, je ne pourrais pas te répondre.
A+

V.

PS : au pire, envoie-moi ton fichier sur ma bal !

-----Message d'origine-----
Merci pour votre aide je pense que l'"on" tient le bon
bout cela dit lorque je met
/With Workbooks(answer).VBProject.VBComponents( _
/ Worksheets("Raw Data Charts").CodeName).CodeModule
/ .InsertLines 1, "End Sub"
/ .InsertLines 1, "Unload UserForm1"
/ .InsertLines 1, "Private Sub Worksheet_Deactivate()"
/ .InsertLines 1, ""
/ .InsertLines 1, "End Sub"
/ .InsertLines 1, "UserForm1.Show"
/ .InsertLines 1, "Private Sub Worksheet_Activate()"
/End With

j'ai une erreur qui me dit "erreur d'éxécution 9: indice
en dehors de la plage"...Et c'est la ligne du with qui
est

en jaune...J'ai essayé de mettre with activeworkbook mais
j'obtien la meme erreur...

NB: vous l'aurez compris le nom de mon "deuxieme"
workbook

est dans la variable answer...

Vous voyez pourquoi ça bug??
Merci




Avatar
Ca commence à prendre forme...En fait c'est mon answer qui
n'était pas bon alors j'ai mis ca:
a = ActiveWorkbook.Name

With Workbooks(a).VBProject.VBComponents( _
Worksheets("Header").CodeName).CodeModule
'.InsertLines 1, "End Sub"
'.InsertLines 1, "UserForm1"
'.InsertLines 1, "Private Sub Worksheet_Desactivate()"
'.InsertLines 1, ""
.InsertLines 1, "End Sub"
.InsertLines 1, "UserForm2.Hide"
.InsertLines 1, "Private Sub Worksheet_Activate()"
End With

Les Sub se retrouve dans la page ca c'est bon, et elle
s'éxécute le problème est que j'ai l'erreur "objet requis"
avec (userform1.hide en jaune dans la sub de la page
Header) quand elle devrait s'éxécuter...


-----Message d'origine-----
Bonjour Thierry,
Est-ce que tu pourrais rajouter le code suivant avant le
with :
Dim x
Set x = Workbooks(answer)
Set x = Workbooks(answer).VBProject
Set x = Workbooks(answer).VBProject.VBComponents( _
Worksheets("Raw Data Charts").CodeName)
Set x = Workbooks(answer).VBProject.VBComponents( _
Worksheets("Raw Data Charts").CodeName).CodeModule

Ca devrait permettre quel est l'élément qui n'est pas
reconnu dans la ligne du with...
Peut-être est-ce un problème de portée de variable. Mais
sans plus d'info, je ne pourrais pas te répondre.
A+

V.

PS : au pire, envoie-moi ton fichier sur ma bal !

-----Message d'origine-----
Merci pour votre aide je pense que l'"on" tient le bon
bout cela dit lorque je met
/With Workbooks(answer).VBProject.VBComponents( _
/ Worksheets("Raw Data Charts").CodeName).CodeModule
/ .InsertLines 1, "End Sub"
/ .InsertLines 1, "Unload UserForm1"
/ .InsertLines 1, "Private Sub Worksheet_Deactivate()"
/ .InsertLines 1, ""
/ .InsertLines 1, "End Sub"
/ .InsertLines 1, "UserForm1.Show"
/ .InsertLines 1, "Private Sub Worksheet_Activate()"
/End With

j'ai une erreur qui me dit "erreur d'éxécution 9: indice
en dehors de la plage"...Et c'est la ligne du with qui
est

en jaune...J'ai essayé de mettre with activeworkbook
mais


j'obtien la meme erreur...

NB: vous l'aurez compris le nom de mon "deuxieme"
workbook

est dans la variable answer...

Vous voyez pourquoi ça bug??
Merci


.





Avatar
Vincent.
Re !
Bien sûr ! En fait, quand la procédure nouvellement créée
demande au userform1 de se fermer, vba croit légitimement
que tu lui parles d'un userform1 qui se situerait dans le
fichier en cours, et qui n'y est pas.
Je ne vois pas tellement de solution sinon que de
transférer également le userform en question dans a... ce
qui donnerait :

Sub OnVaYArriver()
Dim a As Workbook
Set a = ActiveWorkbook
With a.VBProject.VBComponents( _
Worksheets("Header").CodeName).CodeModule
.InsertLines 1, "End Sub"
.InsertLines 1, "UserForm1.Show"
.InsertLines 1, "Private Sub Worksheet_Desactivate()"
.InsertLines 1, ""
.InsertLines 1, "End Sub"
.InsertLines 1, "UserForm1.Hide"
.InsertLines 1, "Private Sub Worksheet_Activate()"
End With
On Error Resume Next
ThisWorkbook.VBProject.VBComponents("UserForm1").
Export "C:Temptest"
a.VBProject.VBComponents.Import "C:Temptest"
Kill "C:Temptest"
End Sub

Evidemment, sans l'exemple, je ne peux pas tester
correctement tout ça, et il se pourait que ça foire un
peu, mais je pense aussi qu'on s'approche du bout !

A+

V.



-----Message d'origine-----
Ca commence à prendre forme...En fait c'est mon answer
qui

n'était pas bon alors j'ai mis ca:
a = ActiveWorkbook.Name

With Workbooks(a).VBProject.VBComponents( _
Worksheets("Header").CodeName).CodeModule
'.InsertLines 1, "End Sub"
'.InsertLines 1, "UserForm1"
'.InsertLines 1, "Private Sub Worksheet_Desactivate()"
'.InsertLines 1, ""
.InsertLines 1, "End Sub"
.InsertLines 1, "UserForm2.Hide"
.InsertLines 1, "Private Sub Worksheet_Activate()"
End With

Les Sub se retrouve dans la page ca c'est bon, et elle
s'éxécute le problème est que j'ai l'erreur "objet
requis"

avec (userform1.hide en jaune dans la sub de la page
Header) quand elle devrait s'éxécuter...




Avatar
Michel Gaboly
Bonjour,

Probablement parce qu'il n'existe pas de UserForm2
dans le classeur?

Ajoute au début du module "Option Explicit" (sans les
guillemets)

Si mon hypothèse est la bonne, tu auras comme message
"Erreur de compilation ; variable non définie", à la place
du précédent.

C'est UserForm1 qu'il faut mettre.

Par ailleurs,

'.InsertLines 1, "UserForm1.Show"

est devenu

'.InsertLines 1, "UserForm1"



Ca commence à prendre forme...En fait c'est mon answer qui
n'était pas bon alors j'ai mis ca:
a = ActiveWorkbook.Name

With Workbooks(a).VBProject.VBComponents( _
Worksheets("Header").CodeName).CodeModule
'.InsertLines 1, "End Sub"
'.InsertLines 1, "UserForm1"
'.InsertLines 1, "Private Sub Worksheet_Desactivate()"
'.InsertLines 1, ""
.InsertLines 1, "End Sub"
.InsertLines 1, "UserForm2.Hide"
.InsertLines 1, "Private Sub Worksheet_Activate()"
End With

Les Sub se retrouve dans la page ca c'est bon, et elle
s'éxécute le problème est que j'ai l'erreur "objet requis"
avec (userform1.hide en jaune dans la sub de la page
Header) quand elle devrait s'éxécuter...

-----Message d'origine-----
Bonjour Thierry,
Est-ce que tu pourrais rajouter le code suivant avant le
with :
Dim x
Set x = Workbooks(answer)
Set x = Workbooks(answer).VBProject
Set x = Workbooks(answer).VBProject.VBComponents( _
Worksheets("Raw Data Charts").CodeName)
Set x = Workbooks(answer).VBProject.VBComponents( _
Worksheets("Raw Data Charts").CodeName).CodeModule

Ca devrait permettre quel est l'élément qui n'est pas
reconnu dans la ligne du with...
Peut-être est-ce un problème de portée de variable. Mais
sans plus d'info, je ne pourrais pas te répondre.
A+

V.

PS : au pire, envoie-moi ton fichier sur ma bal !

-----Message d'origine-----
Merci pour votre aide je pense que l'"on" tient le bon
bout cela dit lorque je met
/With Workbooks(answer).VBProject.VBComponents( _
/ Worksheets("Raw Data Charts").CodeName).CodeModule
/ .InsertLines 1, "End Sub"
/ .InsertLines 1, "Unload UserForm1"
/ .InsertLines 1, "Private Sub Worksheet_Deactivate()"
/ .InsertLines 1, ""
/ .InsertLines 1, "End Sub"
/ .InsertLines 1, "UserForm1.Show"
/ .InsertLines 1, "Private Sub Worksheet_Activate()"
/End With

j'ai une erreur qui me dit "erreur d'éxécution 9: indice
en dehors de la plage"...Et c'est la ligne du with qui
est

en jaune...J'ai essayé de mettre with activeworkbook
mais


j'obtien la meme erreur...

NB: vous l'aurez compris le nom de mon "deuxieme"
workbook

est dans la variable answer...

Vous voyez pourquoi ça bug??
Merci


.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com



1 2