'-------------------------------------
'Mode d'affichage du UserForm
'
'- Obj est soit un Control du UserForm
' soit un UserForm
'
'- Return: vbModal (1)
' vbModeless (0)
' Erreur (-1)
'-------------------------------------
Function UserFormShowMode(ByVal Obj As Object) As Integer
On Error Resume Next
'Cherche l'objet au sommet de la hiérarchie
Do While Err.Number = 0
Set Obj =...
'-------------------------------------
'Mode d'affichage du UserForm
'
'- Obj est soit un Control du UserForm
' soit un UserForm
'
'- Return: vbModal (1)
' vbModeless (0)
' Erreur (-1)
'-------------------------------------
Function UserFormShowMode(Obj As Object) As Integer
On Error Resume Next
If TypeOf Obj Is UserForm Then
Obj.Show vbModeless
ElseIf TypeOf Obj.Parent Is UserForm Then
Obj.Parent.Show vbModeless
Else
UserFormShowMode = -1
End If
If Err.Number = 0 Then
UserFormShowMode = vbModeless
Else
UserFormShowMode = vbModal
End If
On Error GoTo 0
End Function
J'étais sûr que tu m'interpellerais sur ce sujet auquel j'ai pensé en codant, évidemment.on fait quoi?
'-------------------------------------
'Mode d'affichage du UserForm
'
'- Obj est soit un Control du UserForm
' soit un UserForm
'
'- Return: vbModal (1)
' vbModeless (0)
' Erreur (-1)
'-------------------------------------
Function UserFormShowMode(ByVal Obj As Object) As Integer
On Error Resume Next
'Init Return Value
UserFormShowMode = -1
While Not TypeOf Obj Is UserForm
Set Obj = Obj.Parent
If Err.Number Then GoTo ExitFunction
Wend
Obj.Show vbModeless
'Return Value
If Err.Number = 0 Then
UserFormShowMode = vbModeless
Else
UserFormShowMode = vbModal
End If
ExitFunction:
On Error GoTo 0
End Function
Sub testNonModal()
UserForm1.Show 0
End Sub
Sub testModal()
UserForm1.Show
End Sub
Sub test_avec_un_control_du_userform() 'le meme test est efectué au click sur le bouton dans le userform en modal
MsgBox UserFormShowMode(UserForm1.CommandButton1)
End Sub
Sub test_avecquelquechose() 'pour provoquer une erreur on injecte n'importe quoi
MsgBox UserFormShowMode([A1])
Dim toto As Object
MsgBox UserFormShowMode(toto)
MsgBox UserFormShowMode(ActiveSheet)
End Sub
'-------------------------------------
'Mode d'affichage du UserForm
'
'- Obj est soit un Control du UserForm
' soit un UserForm
'
'- Return: vbModal (1)
' vbModeless (0)
' Erreur (-1)
'-------------------------------------
Function UserFormShowMode(Obj As Object) As Integer
Dim I&
On Error Resume Next
If Not TypeOf Obj Is UserForm Then
Do While TypeName(Obj) <> "UserForm" And I < 200 Or TypeName(Obj) <> "Application": I = I + 1: Set Obj = Obj.Parent
Debug.Print TypeName(Obj)
If Err.Number > 0 Then Err.Clear: Exit Do
Loop
End If
'on teste quand meme typeof userform au cas ou la boucle aurait atteint 200 sans trouver le parent userform avec l'obj injecté
' le 200eme parent d'un control devrait couvrir pas mal la remonter si controls beaucoup imbriqué :) LOL!!!
If Not TypeOf Obj Is UserForm Then UserFormShowMode = -1: Exit Function Else Obj.Show vbModeless
If Err.Number = 0 Then UserFormShowMode = vbModeless Else UserFormShowMode = vbModal
On Error GoTo 0
End Function
c'est pour ce la que je l’arrête à "application et j'ai fait une erreur c'est "And" et non "Or"Le compteur à 200 est pour moi inutile, vu que de toutes façons un Set Obj = Obj.Parent finira toujours pas se planter quand on arrive au sommet de la hiérarchie des objets, où l'objet n'a plus de propriété .Parent.
heu si quand même!!!! tu ne travaille qu'avec les enfants directs du userform moi je peux commencer tout en bas et remonte tout en hautje ne vois pas trop ce que ça apporte par rapport au mien, plus simple.
'-------------------------------------
'Mode d'affichage du UserForm
'
'- Obj est soit un Control du UserForm
' soit un UserForm
'
'- Return: vbModal (1)
' vbModeless (0)
' Erreur (-1)
'-------------------------------------
Function UserFormShowMode(ByVal Obj As Object) As Integer
On Error Resume Next
'Cherche l'objet au sommet de la hiérarchie
Do While Err.Number = 0
Set Obj = Obj.Parent
Loop
If Not TypeOf Obj Is UserForm Then
UserFormShowMode = -1
Else
Err.Clear
Obj.Show vbModeless
'Return Value
If Err.Number Then
UserFormShowMode = vbModal
Else
UserFormShowMode = vbModeless
End If
End If
On Error GoTo 0
End Function