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 Sub

Merci 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 If

En revanche, j'ai essayé avec la condition

if cancel = true then
         Exit sub
End if

Et le bugg persiste...

Bonjour

Ce code ne sert à rien

    If CloseMode = vbFormControlMenu Then
             Exit Sub
    End If

Car peu importe CloseMode on sortira toujours de cette macro

tandis que le code

    if cancel = true then
             Exit sub
    End if

Pas 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 Sub

Dans l'UserForm

avec

    If CloseMode = vbFormControlMenu Then
             Exit Sub
    End If

dans 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 Sub

Bonjour,

Pour :

Private Sub CommandButton1_Click()
  Unload Me
End Sub

J'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 If

arrivent à fermer la macro sans bugg

Alors que

    If Cancel = True Then
             Exit Sub
    End If

En 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 Sub

Merci 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

Rechercher des sujets similaires à "probleme fermeture userform"