Problème fermeture UserForm
Bonjour,
J'ai un petit problème avec un UserForm...
En effet, lorsque je ferme l'UserForm avec la petite croix en haut à droite, celà crée un bugg dans l'une des macros qu'il appelle/utilise...
Serait il possible de rajouter des lignes de codes pour programmer ce bouton consistant à ne pas appeler ces maccros...
Ou tout simplement cacher ce bouton ou rendre son utilisation impossible?
Merci de vos réponses!
Cdlt,
Sym
-- 28 Juil 2011, 15:15 --
Ré bonjour!
J'ai été trop impatient dans mes recherches :
https://forum.excel-pratique.com/post4494.html#p4494
Désolé pour l'encombrement du forum.
Bonjour
A rajouter dans le code de l'userform
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then ' Vient de la croix
Cancel = True
End If
End SubMerci beaucoup! C'est parfait!
PS j'ai toute fois dûe rajouter, dans la macro qui fait des siennes:
If CloseMode = vbFormControlMenu Then
Exit Sub
End IfEn revanche, j'ai essayé avec la condition
if cancel = true then
Exit sub
End ifEt le bugg persiste...
Bonjour
Ce code ne sert à rien
If CloseMode = vbFormControlMenu Then
Exit Sub
End IfCar peu importe CloseMode on sortira toujours de cette macro
tandis que le code
if cancel = true then
Exit sub
End ifPas mieux car à l'arrivée dans cette macro Cancel sera toujours à False et justement si tu ne veux pas que la fermeture se fasse il faut renvoyer Cancel avec la valeur True
Mais je ne connais pas ton code donc je ne peux savoir ce qui bugge
A suivre si tu veux (dans ce cas
)
Bonne journée
Bonsoir,
Enfait, ma solution la plus favorable était de quitter la macro appelante en cas d'utilisation de ce bouton "quitter"...
Ne pas pouvoir utiliser ce bouton était ma roue de secour =)
Je n'ai pas le programme avec moi, j'essaierai de penser à le ramener demain du travail (je n'ai pas non plus internet au travail
Le fait étant que,
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then ' Vient de la croix
Cancel = True
End If
End SubDans l'UserForm
avec
If CloseMode = vbFormControlMenu Then
Exit Sub
End Ifdans la macro appelant l'UserForm
=
Pas de bugg si on quitte l'UserForm
Ceci dit, il y a quelques trucs que je ne comprend pas...
1° Avec le premier code, CloseMode = vbFormControlMenu implique Cancel = True
Dans le deuxième, CloseMode = vbFormControlMenu implique Exit Sub
Ce que je ne comprend pas c'est que Cancel = True implique Exit Sub est FAUX (vu qu'il y a quand même bugg)
2° De plus, on dit Cancel = True mais on a définit Cancel comme un Integer... On ne devrait pas le définir comme un
Boolean?
3° (qui devrait peut-être être la première) C'est quoi vbFormControlMenu?
C'est une forme de contrôle du menu, c'est çà? Si oui, il y a d'autres choses que la pitite croix? (je pense par
exemple à "mettre en barre de tâche" ou "agrandir" qu'on ne voit pas dans les UserForm
C'est tout nouveau et un peu flou pour moi ces bidules...
J'avoue, ce sont des questions gratuites, je ne les ai pas testé au travail mais çà m'intrigue depuis que je suis rentré :-/
Merci pour tes réponses banzaï, même si tu me torture l'esprit à me faire réfléchir, tu m'as carrément débloqué mon bazarre! (la macro biensûre
Cdlt,
Sym
Bonsoir
Sauf erreurs ou omissions
Sym a écrit :vbFormControlMenu
C'est une constante déjà définie dans le VBA (qui vaut 0)
CloseMode indique d'où vient l'appel à la procédure UserForm_QueryClose
Tiré de l'aide de VBA
QueryClose, constantes
Les constantes suivantes peuvent remplacer les valeurs réelles partout dans votre code :
Constante Valeur Description
vbFormControlMenu 0 L'utilisateur choisit la commande Fermeture dans le menu système de la feuille.
vbFormCode 1 L'instruction Unload est invoquée à partir du code.
vbAppWindows 2 La session de l'environnement d'exploitation Microsoft Windows en cours se termine.
vbAppTaskManager 3 Le Gestionnaire de tâches Windows ferme l'application.
Donc le fait de clic sur la croix appelle cette procédure et si tu ne veux pas que l'userform se ferme il faut mettre Cancel à True (Valeur = -1 donc c'est aussi un Integer)
Sym a écrit :Ce que je ne comprend pas c'est que Cancel = True implique Exit Sub est FAUX (vu qu'il y a quand même bugg)
Je ne comprends pas ta question, si question il y a ?
Une dernière remarque : Si tu utilises le code que je t'ai donné ne pas oublier de mettre un bouton dans l'userform pour justement le quitter
Private Sub CommandButton1_Click()
Unload Me
End SubBonjour,
Pour :
Private Sub CommandButton1_Click()
Unload Me
End SubJ'utilise çà si j'ai interdit l'utilisation du bouton rouge, c'est çà?
Ma question était :
Pourquoi, dans ma macro appelant l'UserForm, les lignes de code :
If CloseMode = vbFormControlMenu Then
Exit Sub
End Ifarrivent à fermer la macro sans bugg
Alors que
If Cancel = True Then
Exit Sub
End IfEn sachant que j'ai laissé, dans le code de l'UserForm les lignes que tu m'avais indiqué, à savoir :
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then ' Vient de la croix
Cancel = True
End If
End SubMerci pour les infos, je pourrais me pencher stap sur le QueryClose
Cdlt,
Sym
Bonjour
Ok pour le code du bouton
mais pour quitter l'userform je pense qu'il y a un mélange dans les procédures
Sym a écrit :Pourquoi, dans ma macro appelant l'UserForm, les lignes de code
La variable CloseMode n'est utilisée que dans la procédure UserForm_QueryClose
Le mieux serait que
Bonne journée
Oui il y a du avoir des confusions ^^ mon fichier se ferme à merveille, seul pb : quand je veux continuer sa se ferme quand même :-/ je vous ferais un formule simplifiée de mon fichier et vous l'enverrais ce soir
Cdlt,
Sym