Autres Fermeture USF en cliquant en dehors de l'USF

marcelio

XLDnaute Occasionnel
Bonjour le Forum,
Est il possible de fermer totalement un USF en cliquant en dehors de celui ci, je ne veux pas utiliser la croix ni un bouton.
Merci de votre aide
Marcelio
 

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour marcelio

Oui, tu le peux mais il te faut utiliser ton UserForm en mode "non modal" car en mode "modal" tu n'as accès à rien d'autre qu'à ton USF.
Donc pour ce faire appel de ton USF :
VB:
Private Sub CommandButton1_Click()
UserForm1.Show vbModeless ' ou 0
End Sub
puis pour le fermer (par un double-click dans une cellule) :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Unload Userform1 : Cancel = True
End Sub
@+ Eric c
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Si vous voulez que l'UserForm non modal (vous pouvez aussi préciser sa propriété ShowModal à false pour ne pas avoir à le préciser au Show) détecte de lui même son devoir de se fermer, déclarez en tête une Private AppXl As Application, et dans la Sub UserForm_Initialize mettez Set AppXl = Application. Vous devriez voir votre objet AppXl dans la liste "Objet" de gauche qui surmonte la fenêtre de code. Quand vous l'y aurez sélectionné, sélectionnez SheetSelectionChange dans la liste "Procédure" de droite et mettez un Unload Me dans le modèle de Sub qui aura ainsi été implanté.
 

Eric C

XLDnaute Barbatruc
Bonjour le fil
Bonjour Dranreb

Pourriez-vous, je vous prie, en dire un peu plus sur cette procédure. Je recherche mais ne trouve rien ?? Par ailleurs, ma version d'Excel est quelque peu obsolète et l'aide (F1) peu efficace car souvent absente. J'ai du oublier les MàJ recommandées.
Merci - Eric
 

patricktoulon

XLDnaute Barbatruc
re
Bonsoir a tous
a mon avis Dranreb c'est un peu emballé avec application c'est plutôt workbook

petite démonstration

prenez un userform vierge et mettez le en non modal pour commencer

mettez lui ce code
VB:
'*****************************************************************************************
'on classe le worbook dans le userform
Private WithEvents wbk As Workbook 'on cré un map  evenement pour workbook

Private Sub UserForm_Initialize()
Set wbk = ThisWorkbook 'wbk devient CE!!!  CLASSEUR !!!!!
End Sub

'en temps normal , cet événement devrait se trouve dans le module thisworkbook
'comme on classe le workbook dans le userform avec withevents
'on a acces a tous les événements du module thisworkbook

Private Sub wbk_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Unload Me
End Sub
'*******************************************************************************************
' un petit message dans l'evenement close du userform pour vérifier qu'il se ferme bien
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
MsgBox "bye!!bye!!"
End Sub

affichez votre userform et maintenant cliquez quelque part dans une cellule

donc en effet
un module userform est un module classe a part entière
la création du map (withevents) va insérer tout les propriété et événement de l'object classé en l’occurrence ici le thisworkbook
on a donc tout ces événement dans la liste dispo DANS LE USERFORM !!!! voir capture ci dessous

il vous est donc possible de coder les Evénements (workbook)comme si vous étiez dans le module thisworkbook
demo3.gif


voila @Eric C et @marcello maintenant vous en savez un peu plus
;)
 

patricktoulon

XLDnaute Barbatruc
re
tiens @Eric C je suis aller un peu plus loin
regarde
en cliquant sur la colonne 1 à 3(orange) tu show le userform et en cliquant sur les vertes tu ferme le userform
mais ....surprise surprise il n'y a pas de sub show pour le userform
j'attire ton attention sur le module thisworkbook et l'userform
ça c'est rigolo ;)
il suffit simplement d'instancier la classe userform et rien d'autre dans le thisworkbook
vraiment très rigolo
quelqu'un qui n'est pas tres module classe y retrouverait pas ces petits :):p
 

Pièces jointes

  • userform thisworkbook je sais plus moi.xlsm
    18.2 KB · Affichages: 20

Dranreb

XLDnaute Barbatruc
Oui, ça marche aussi avec un objet Workbook initialisé à ThisWorkbook ou un objet Worksheet initialisé à ActiveSheet par exemple.
C'est sans doute même mieux que Application initialisé à Application, qui conviendrait plus si l'utilisateur devait naviguer dans plusieurs classeurs.
Mais j'avais oublié de dire qu'il faut préciser WithEvents aussi pour cet objet là, pour que ses évènements soient disponibles. Ce sont pratiquement les mêmes que ceux de l'objet Workbook, mais qui se déclenchent quel que soit le classeur concerné.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
je reviens sur e que j'ai dit
effectivement ca fonctionne aussi avec application
d'ailleurs il y a des trucs interessant
du genre
un événement open avec le return du workbook absent de l'evenement classique dans thisworkbook
VB:
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)

End Sub
je l'ignorais donc merci Dranreb
ça ouvre des perspectives intéressante
;)
 

Discussions similaires

Réponses
93
Affichages
2 K

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972