Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Comment savoir dans le code d'un UserForm s'il a été ouvert en vbModal ou vbModeless ?

Dudu2

XLDnaute Barbatruc
Bonjour,

La question est dans le titre.

Merci pour toute indication.

Bonne journée.
 
Dernière édition:
Solution
Tu as mis le doigt sur quelque chose d'inattendu !
Si Obj est un Frame TypeOf Obj Is UserForm = True !!!

Je trouve cela très étrange et je ne sais pas si cela fait sens mais je dirais que c'est un bug car le TypeOf Frame existe bel et bien.

Le bon code est donc:
VB:
'-------------------------------------
'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 =...

Dudu2

XLDnaute Barbatruc
En fait j'ai stupidement ramé parce que j'avais pas fait de Err.Clear après la recherche de l'objet au sommet de la hiérarchie et je massérais dans cette erreur. Mais bon finalement, c'est super simple.
 

patricktoulon

XLDnaute Barbatruc
ben oui c'est simple
c'est ce que j'utilise dans mon placementusf dans mon calendar (on arrete a l'erreur .parent c'est tout)
comme quoi j'ai bien fait de te tarabiscoter quand même
là c'est universel et typeof ou typename bye!!bye!!
 

patricktoulon

XLDnaute Barbatruc
je vois que tu utilise encore un test typeof pour le -1 au cas ou l'object injecté serait n'importe quoi et n'aboutirais pas a un userform
je l'ai zappé dans ma version me semble t il
mais au moins là c'est bien le dernier des éléments tout en haut de la hiérarchie qui passe dans typeof

les deux font la paire
 

Discussions similaires

Réponses
22
Affichages
662
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…