CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 2018
-
20 oct. 2010 à 02:30
CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 2018
-
20 oct. 2010 à 18:13
Bonjour,
Une sub A "ouvre" MaForm contenant une ComboBox avec "Maform.Show"
Avec "initialize", je charge une liste par "RowSource"... Tout va bien...
Puis une Sub B "ferme" MaForm par "MaForm.Hide" ... Tout va bien...
Mais si je relance la sub A... MaForm ne charge plus la Liste dans la ComboBox! J'ai uniquement la valeur précédemment sélectionnée de la Liste.
En revanche Si je FERME MaForm avec la croix, la Sub A rouvre bien MaForm avec la liste dans la ComboBox.
Il semble donc que le "MaForm.Hide" via la Sub B "cache" MaForm, mais ne la FERME pas.
J'ai tenté DoEvents, UnLoad : je n'y suis pas arrivé.
Mon appli étant trop lourde, je propose du code pour un petit exemple avec un classeur "Test.xls", dans la feuille "Liste", un Button "MaForm", et une liste de 1 à 13 en colonne A
Macro feuille "Liste" :
Private Sub Button_Click()
MaForm.Show
End Sub
Userform "MaForm" comprenant une Combo et un Button "OK"
If MaComboBox.Value = 3 Then MaForm.Hide
End Sub
Private Sub UserForm_Initialize()
Dim Listing
MaComboBox.Value = "Choisir dans la liste..."
Listing = Workbooks("Test.xls").Sheets("Liste").Range("A1:A13").Address(external:=True) 'plage du Row.Source Tests
MaComboBox.RowSource = Listing
End Sub
En choisissant 3 dans la liste et en cliquant sur OK, MaForm semble refermée,
Mais si je la rouvre depuis le bouton "MaForm" : je n'ai plus la liste, mais la valeur 3 !!!
Si maintenant je ferme avec la croix et que je rouvre avec le bouton "MaForm", j'ai bien la liste!
J'ai donc fait ça :
Private Sub Button_Click()
If MaComboBox.Value = 3 Then
Dim Listing
MaComboBox.Value = "Choisir dans la liste"
Listing = Workbooks("Test.xls").Sheets("Liste").Range("A1:A13").Address(external:=True) 'plage du Row.Source Tests
MaComboBox.RowSource = Listing
MaForm.Hide
End If
End Sub
Et là c'est bon, mais PARCE QU'ON EST EN PRIVATE SUB...!
Mais ça ne marche PAS si l'ordre "MaForm.Hide" arrive depuis la réponse d'une MsgBox ou d'un Module, même avec les 2 lignes
Listing = Workbooks("Test.xls").Sheets("Liste").Range("A1:A13").Address(external:=True) 'plage du Row.Source Tests
MaComboBox.RowSource = Listing
Listing = Workbooks("Test.xls").Sheets("Liste").Range("A1:A13").Address(external:=True) 'plage du Row.Source Tests
MaComboBox.RowSource = Listing
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 20 oct. 2010 à 08:59
Salut
Oui, la méthode Hide cache, escamote, masque la forme mais ne la ferme pas.
Cela a certains avantages.
Par contre, Unload décharge l'objet et ses composants perdent leurs références donc leurs contenus.
Fais ce simple exemple, hors de ton projet :
Tu crées un nouveau classeur et tu y ajoutes deux UserForm1 et UserForm2.
Sur UserForm1, tu ajoutes un bouton dans le code duquel tu mets
UserForm2.Show
Sur UserForm2, tu ajoutes :
- un bouton dans le code duquel tu mets
Me.Hide
- un autre bouton dans le code duquel tu mets
Unload Me
- Une TextBox dans laquelle tu mets "Coucou" (en mode création)
- Dans l'évènement UserForm_Initialize, tu places ce code :
Debug.Print "UserForm2 Initialize"
Tu lances la UserForm1 et tu cliques sur le bouton.
-1- La UserForm2 s'affiche et sa TextBox renferme "Coucou".
Dans la fenêtre de debug (Ctrl-G), tu notes que l'Initialisation a eu lieu.
Modifie le texte de la TextBox puis clique sur le bouton qui provoque le Hide de la forme.
Reclique sur le bouton de la première forme, la seconde forme s'affiche à nouveau, en ayant conservé le texte modifié, et l'initialisation ne s'est pas redéclenchée.
-2- Refait cette même manip mais en cliquant sur le bouton qui provoque le Unload.
Tu verras que lors du rappel de forme 2, la TextBox reprend le texte mis en configuration, et l'initialisation a lieu.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)