'----------------------------
'Test si UserForm est affiché
'Attention ! Si l'argument est UserFormX.Name alors il sera chargé et sa fontion UserForm_Initialize sera exécutée
'Voir https://excel-downloads.com/threads/vba-lister-les-userforms-du-projet-vba.20071238/page-3#post-20540897
'----------------------------
Public Function UserFormIsVisible(UsfName As String) As Boolean
Dim Usf As Object
'Parcours des UserForms chargés dans le Projet
For Each Usf In VBA.UserForms
If UCase(Usf.Name) = UCase(UsfName) Then
If Usf.Visible Then Exit For
End If
Next Usf
If Not Usf Is Nothing Then
'Return value
UserFormIsVisible = True
End If
End Function
'---------------------------
'Test si UserForm est chargé = Load avec Visible = False (Hide) ou True (Show)
'Attention ! Si l'argument est UserFormX.Name alors il sera chargé et sa fontion UserForm_Initialize sera exécutée
'Voir https://excel-downloads.com/threads/vba-lister-les-userforms-du-projet-vba.20071238/page-3#post-20540897
'----------------------------
Public Function UserFormIsLoaded(UsfName) As Boolean
Dim Usf As Object
'Parcours des UserForms effectivement chargés dans le Projet
For Each Usf In VBA.UserForms
If UCase(Usf.Name) = UCase(UsfName) Then Exit For
Next Usf
If Not Usf Is Nothing Then
'Return value
UserFormIsLoaded = True
End If
End Function
Private Init As Boolean
Private Sub UserForm_Activate()
MsgBox "UserForm1 Activate"
If Not Init Then
Call UserForm1_Initialize
Init = True
End If
End Sub
Private Sub UserForm1_Initialize()
MsgBox "UserForm1 Initialize"
End Sub
Private Sub CommandButtonUserForm2_Click()
UserForm2.Show
End Sub
tu t’égare dans ton raisonnement làC'est un peu comme si on lisait la plaque d'immatriculation d'une voiture et qu'elle se mettait à démarrer.
Private UserFormInitialised As Boolean
'-----------------------
'Initialisation UserForm
'-----------------------
Private Sub UserForm_Initialisation()
.../...
End Sub
'-----------------
'UserForm Activate
'-----------------
Private Sub UserForm_Activate()
'Initialisation UserForm
If Not UserFormInitialised Then
UserFormInitialised = True
Call UserForm_Initialisation
End If
.../...
End Sub
Bonjour Dudu2,Donc, cet évènement UserForm_Initialize() est une vraie source de problèmes, utilisation à éviter !
Et bien c'est précisément ce que je me demandais à l'instant.UserForm_Initialize à grandement sa place et son utilitité.
Non car l'UserForm_Initialize n'est pas srtictement lié à un Show. Alors tu peux faire ça si tu veux, mais quel intérêt de le faire en UserForm_Initialize plutôt qu'en UserForm_Activate qui lui est spécifiquement lié au Show ?Dans l'UserForm_Initialize on doit initialiser ce qui est nécessaire pour des Show futurs
Il n'y a pas de problème avec Visible. Simplement tu déclenches UserForm_Initialize que tu as programmé pour préparer un Show. C'est effectivement ce que je faisais avant cette discussion.Quel problème avec la propriété Visible ?