Fermeture UserForm(S)

aristote67

XLDnaute Nouveau
Bonsoir

Une question idiote sans doute

Vba Excel 2007


  1. Soit 2 Userforms :Userform1 et Userform2
  2. Le userform2 est lancé à partir du Userform1
  3. Pour des raisons de validation j' interdit la fermeture par la croix

Mon problème est de fermer Complètement Le Userform2 sans fermer le 1

la commande Unload Userform2 ferme les 2 Formes

Je n'ai pas trouvé d'autre solution que Userform2.Hide pour le masquer


Mais ce n'est pas satisfaisant Userform2 devant être réinitialisé à chaque lancement

Qu'elle est l'astuce s'il y en a une

Merci d'avance

Cordialement à tous

Alain
 

laetitia90

XLDnaute Barbatruc
Re : Fermeture UserForm(S)

bonjour aristote67,carcharodon-carcharias
un peu surprise!! si ton code de fermeture de user...2 est dans user...2
il devrait se fermer ??? ou utiliser
Code:
Unload Me
dans user...2
autrement met un petit exemple

ps salut Pierrot bien matinal:):):)
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Fermeture UserForm(S)

Bonjour,

ta commande ci-dessous ne devrait pas fermer les 2 usf
Code:
Unload Userform2
devrais se contenter de décharger le 2... A voir les procédures déclenchées lors de la fermeture... vérifie peut être que tu n'as pas un "End" dans l'une d'entre elles...
bonne journée
@+
 

aristote67

XLDnaute Nouveau
Re : Fermeture UserForm(S)

Bonjour
Merci de vos réponses
Le code simplifié

Code:
'###UserForm1##############
Private Sub CommandButton1_Click()
'---------------------------------------------------------------------------------------
' Procedure : CommandButton1_Click
' 
    Unload Me
End Sub

Private Sub CommandButton2_Click()
'---------------------------------------------------------------------------------------
' Procedure : CommandButton2_Click
'---------------------------------------------------------------------------------------
Load UserForm2
UserForm2.Show
End Sub

Private Sub UserForm_Initialize()
'---------------------------------------------------------------------------------------
' Procedure : UserForm_Initialize

    Pasdecroix Me
    '#########################################################################
End Sub
Code:
' Module    : UserForm2
'---------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
 Pasdecroix Me
 'Procedures
End Sub
Code:
'---------------------------------------------------------------------------------------
' Module    : FermetureForm
Option Private Module

'Pas de croix
Declare Function GetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'*********************
Sub Pasdecroix(USF As UserForm)
'---------------------------------------------------------------------------------------
' Procedure : Pasdecroix
'---------------------------------------------------------------------------------------
'
    Dim hWnd As Long
10  hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
                                       "X", "D") & "Frame", USF.Caption)
20  SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub
Le code est expurgé mais les procédures en aval ne sont pas en cause
Ces simples lignes générent mon Problème

Je l'ai également testé sur Excel 2003 même résultat


Si j'élimine la procédure pas de croix dans les deux Userform

La fermeture du Userform2 par la croix laisse Le Userform1 ACTIF
Par contre la fermeture par Unload (que ce soit UnloadUserform2 ou Unload Me) ferme les 2 Userform

Il n'y a aucun "End"
La fonction Hide ne me convient pas dans la mesure ou des variables doivent être initialisées en Tête du module Form2....!

Cordialement

Alain
 

laetitia90

XLDnaute Barbatruc
Re : Fermeture UserForm(S)

rebonjour j'ai teste pas de pb...???

DANS
Code:
Sub Pasdecroix(USF As UserForm)
 Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
  End Sub
LE 10 & le 20 servent a rien!!!

autrement essai de modifier comme cela ta variable public
Code:
Private Declare Function GetWindowLongA& Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long)
Private Declare Function SetWindowLongA& Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long)
Private Declare Function FindWindowA& Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String)
sans option private module ni option explicit si present au debut de ton module

j'ai teste sous excel2007 ...mais ce code ne pose de souci sous 2003 teste il y a longtemps

autrement tu peus toujours bloque la fermeture par la croix avec ce code la msgbox tu peus eventuellement la supprimer
dans chaque user
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then Cancel = True: MsgBox " pour fermer utiliser le bouton"
End Sub
 

Pièces jointes

  • user.zip
    16.4 KB · Affichages: 48
  • user.zip
    16.4 KB · Affichages: 46
  • user.zip
    16.4 KB · Affichages: 49
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 859
Membres
103 978
dernier inscrit
bderradji