USF en "cascade"

Blafi

XLDnaute Occasionnel
Bonjour aux forumeurs...

J'ai 2 questions si quelqu'un peut m'aider :

Dans une appli que je crée, j'ai un USF1 qui recueille un certains nombre d'éléments sous forme de variables entrées dans des textebox, des controles calendrier et des cases à cocher.
Cet USF1 possède aussi une case à cocher qui entraine l'ouverture d'un USF2 destiné à recueillir d'autres variables si elle est cochée.
Lorsque l'on clique sur OK de l'USF1, une procédure se déroule avant d'ouvrir l'USF2(naturellement si la case à cocher est remplie).
Mon problème, c'est que l'USF2 s'affiche par-dessus l'USF1 alors que j'ai pourtant placé une ligne 'USF1.Hide'.

Mes questions :
1/ Comment réussir à cacher l'USF1 au moment d'afficher l'USF2 ?

2/ Comment récupérer dans la pocédure OK_click de l'USF2, les variables entrées précedemment dans l'USF ??

Merci d'avance de vos réponses et à bientôt...
Cordialement.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Blafi, le Forum

Il est tout d'abord important de connaître ce qu'est le Mode Modal (Par Défaut si non spécifié).

En Mode Modal qu'il s'agisse d'une Simple MSgBox ou d'un UserForm, l'Objet prend la main et stoppe les procédures suivantes tant que l'utilisateur n'enclenche pas d'action qui refermera l'Objet.

Par conséquent, en pratique, cette syntax lancée depuis le UserForm1 :

Private Sub CommandButton1_Click()
UserForm2.Show
UserForm1.Hide
End Sub

Laissera le UserForm1 visible tant qu'on ne fermera pas le UserForm2.

Si on applique une inversion :

Private Sub CommandButton1_Click()
UserForm1.Hide
UserForm2.Show
End Sub

Tout rentre dans l'ordre...

Ou bien on travaille en mode 'Non-Modal' et les tous les UserForms seront lancés avec cette syntax :

UserFormX.Show False

Pour ce qui est des variables, pour jongler de l'un à l'autre des UserForms (ou autres Modules) avec leurs valeurs respectives, il faut qu'elles soient déclarées Public dans un Module Publique lui-même (un Module 'Standard' (Module1 par Exemple)).

Un dernier point si tu utilises la Méthode Hide du UserForm1, tu n'as pas besoin de Variables Publiques, puisque justement en appliquant 'Hide' le UserForm est toujours chargé en mémoire ainsi que les valeurs respectives des contrôles qu'il contient. (Sinon préférer la méthode 'Unload UserFormX' qui libérera de la mémoire)

Bonne Soirée
[ol]@+Thierry[/ol]
 

bobjazz

XLDnaute Impliqué
Bonsoir

Je suis novice '2 mois'

Mais pour ouvrir un autre USF en fermant l'autre je met ces lignes de code si cela peut d'aider

Private Sub CmdUSF2_Click()

Unload USF1
USF2.Show

End Sub

Pour ta question 1
avec cela mache pour moi
Pour ta question 2, j'ai fait la meme chose que toi, et j'ai garder les lignes de codes du USF1

Si cela peut d'aider

Bobjazz
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour BobJazz, re Blafi

Merci à toi BobJazz, je suis désolé de t'avoir 'couper l'herbe sous le pied' lol

Mais ta réponse à la question 1 est tout à fait correcte.

Pour la question 2, par contre quelque chose m'échappe dans ton explication ?

Je pense que tu veux dire depuis le USF2 tu fais appelles aux Contrôles du USF1 comme ceci :

TextBox1 = USF1.TextBox1

(Si le USF1 est en mode Hide uniquement)

Bonne Soirée, je file je suis à la bourre
[ol]@+Thierry[/ol]
 

Blafi

XLDnaute Occasionnel
Merci particulièrement à Thierry et bobjazz , qui m'ont répondu avec célérité et toujours la même compétence..

Je vais essayer tout cela et je pense que je vais m'en sortir...

Encore merci et à bientôt pour d'autres problèmes... que je rencontre souvent !
 

Statistiques des forums

Discussions
312 938
Messages
2 093 779
Membres
105 823
dernier inscrit
sawosko