• Initiateur de la discussion Initiateur de la discussion Cutbill1234
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

Cutbill1234

Guest
Bonjour à tous,

Je n'arrive pas à trouver la macro qui permet d'annuler la sortie d'Excel. En gros j'ai besoin d'une macro qui agit comme le 'ANNULER' qui est dans le message de sortie de Excel : 'Voulez vous enregistrer';'OUI';'NON;'ANNULER'.

Je ne sais pas si j'ai étais très clair.

D'avance merci

Cutbill
 
Bonjour CutBill,

il ne s'agit pas d'une macro, mais d'un 'INputBox'
Quand en Vba tu poses une question, tu peux passer par un 'InputBox' (boite de questions) et quand tu crées un InputBox tu peux lui adjoindre des paramètres qui te permettent de faire apparaître dans la boite des boutons du genre 'OK' , 'OUI' , 'NON' , 'Annuler' etc ...
en fonction du bouton surklequel l'utilisateur cliquera, une procédure sp^écifique sera lancée automatiquement

Voila

Bon courage

 
Bonjour,

Si tu travailles avec un PC sous windows cette procédure devrait te convenir :

1. Va dans VBA via ALT+F11
2. Sur ton clavier fais CTRL + R pour ouvrir à gauche VBA project
3. Double clique sur Thisworkbook
4. Dans la fenetre' de droite places cette macro :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Msg, Style, Title, Answer
Msg = 'Voulez-vous réellement quitter l'application' ' Définit le message.
Style = vbOKCancel + vbQuestion ' Définit les boutons.
Title = 'Quitter' ' Définit les titres.
Answer = MsgBox(Msg, Style, Title)
If Answer = vbOK Then Application.Quit
If Answer = vbCancel Then Cancel = True
End Sub

5. Enregistre cette macro et ton fichier

Bon ap. 🙂
 
Bonjour à tous,

Il est vrai que cette méthode est tout à fait correct mais ne convient pas à ce que je voulais faire. Je vais essayer d'être plus precis :
Lorsque l'on click sur la croix j'ai un UserForm qui s'ouvre sur lequel on peut trouver 3 boutons :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Save
UserForm5.Show
End Sub

Le fichier est enregistré et le UserForm s'ouvre avec les boutons

1.'Quitter l'application' :
Private Sub CommandButton1_Click()
UserForm5.Hide
End Sub

Ici aucun problème, le fichier étant déjà enregistré, lorsque le UserForm se ferme, l'application quitte automatiquement sans aucun autre message d'Excel (C'est ce que je voulais)

2.'Imprimer':
Private Sub CommandButton2_Click()
Application.Dialogs(xlDialogPrint).Show , , , 1
UserForm5.Hide
End Sub

Ici je peux imprimer : lorsque mon impression est lancée, le UserForm se ferme et l'application se ferme. J'aimerais que l'application ne se ferme pas après l'impression.

3.'ANNULER':
C'est ici que je séche complétement. Je veux simplement en faisant 'ANNULER' que le document reste ouvert. Or au départ j'avais mis : UserForm5.Hide, mais le problème c'est qu'il me ferme bien le UserForm mais quitte également le document.

Peut être que la solution est simple, mais je n'y arrive vraiment pas !

D'avance merci

Cutbill
 
Re

Ta procédure évennementielle est 'Workbook_beforeClose
donc le code qui suit s'effectuera avant la fermeture du WorkBook, mais il me semble que inévitablement celui-ci se fermera en fin de procédure.
N'en serait-ce pas la raison ?

 
Bon, en fait c'est très simple...il faut utiliser le Cancel qui est entre paranthèse 😛

Dans le module ThisWorkbook déclare en entête une variable que tu modifieras en fonction du contexte (impression ou non)

Dim MaVariable As Integer

Private Sub Workbook_BeforeClose (Cancel As Boolean)
...
Ton code
...
If MaVariable=vbCancel Then Exit Sub
End Sub

Private Sub CommandButton2_Click()
...
MaVariable=vbCancel
End Sub

Voili voilou
MrExcel

NB. ATTENTION le fait de mettre .Hide ne ferme PAS la userform et donc la garde en mémoire. Tant qu'XL ne sera pas fermé la forme ne sera pas suprimée de la mémoire. La meiileure méthode c'est d'utiliser Me.Close. Le hide ne doit servir que si la forme doit être réaffichée par la suite et afin d'être plus rapide à l'afficher ou d'éviter de la recalculer/recréer.
 
Bonjour Dan,

J'me permet de faire quelques remarques sur ta programmation certe didacticielle mais pas efficace.

Tout d'abord le Dim...aïe, toutes les variables seront de type Variant ce qui va bouffer de la mémoire (bon OK, je chipote mais quand y a beaucoups de ligne dans un programme c'est beauoup mieux et ça évite des erreurs de programmation).

Pour l'affichage de l'inputbox, utiliser directement la syntaxe:
Answer=MsgBox('Mon message', vbOkCancel,'MonTitre')
C'est plus simple et ça évite de déclarer 3 variables en mémoire pour pas grand chose en fait.
Les If c'est pas beau beau non plus B)
Un p'tit Select Case sera plus beau et efficace (en rapidité d'exécution du code)
Mais en fait 1 seul If suffit
If Answer=vbCancel Then Exit Sub
Quand au Application.Quit il fermera XL, c'est pas le but 😉

Bon j'espère que cela ne te vexeras pas (ce n'est pas le but ici).

Cordialement
MrExcel
 
RE Bonjour Léa, MrExcel, Bonjour CutBill, Dan, le Forum

Attention MrExcel
La meiileure méthode c'est d'utiliser Me.Close

Non, Me.Close n'est pas applicable pour un UserForm, la méthode pour définitivement décharger de la mémoire un UserForm est :

Unload Me (ou encore Unload UserFormX)

Pour ce qui est du reste, je suis d'accord, on peut passer par une simple Boolean Public qui sera utilisée pour paramétrer le Cancel de la Private Sub Workbook_BeforeClose (Cancel As Boolean), mais on peut être bien plus Direct aussi :

Public MaBooleanClosing As Boolean '(En Top d'un Module Standard)

Par Exemple si tu veux fermer... Alors tu paramètres dans ton Bouton d'USF :
MaBooleanClosing = False

Par Exemple tu ne veux pas fermer alors tu paramètres dans ton Bouton d'USF :
MaBooleanClosing = True

Et Donc dans ton Private Module de ThisWorkBook :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Save
UserForm5.Show
Cancel = MaBooleanClosing
End Sub

C'est pas plus compliqué...

Pour ce qui est de l'exemple donné par mon compatriote et ami Dan et oui... pas de déclaration de Variable, et il sait que je veille au grain aussi pour les déclarations de Variable dans ce Forum, mais en fait on ne peut pas lui en vouloir car c'est exactement ce que donne l'aide VBA pour une MsgBox !!! lol donc...

Bon Aprèm
@+Thierry
 
Bonjour à tous,

Léa tu as raison le fichier se fermera inevitablement, c'est ce que je voulais éviter.

En ce qui concerne la réponse de MrExcel, j'avoue sincerement ne pas comprendre, je ne critique pas, c'est certainement bon, mais sur ce coup la je n'ai pas la capacité du fait du manque de connaissances de modifier car je ne comprends pas.

Je joins le fichier pour vous montrer (c'est un peu le bordel dedans)

D'avance merci [file name=Forum XLD_20050228161128.zip size=38498]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Forum XLD_20050228161128.zip[/file]
 

Pièces jointes

:whistle: Oooops, j'm'a gouré...désolé pour avoir énoncé une bêtise.
Merci Thierry (ça me fait drôle de t'appeler comme ça parce que mon prénom à moi c'est Thierry dans ma vrai vie aussi 😉

Euh, Dan en fait c'est pas compliqué mais j'vais essayer de jeter un coup d'oeil à ton fichier pour 'régler' le problème.

@+
MrExcel
 
Re Bonjour Cher Homonyme, CutBill, Dan, Léa, le Forum

Thierry, ce n'est pas Dan, mais CutBill qui a un problème avec son Fichier !!! lol

Bon voilà les corrections de ton fichier en suivant ma proposition :

Module Standard (Module1)
Code:
Public MyBooleanClosing As Boolean

Private Module de ThisWorkBook
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Save
UserForm5.Show
Cancel = MyBooleanClosing
End Sub

Private Module du UserForm5
Code:
Private Sub CommandButton1_Click()
Unload UserForm5
MyBooleanClosing = False
End Sub

Private Sub CommandButton2_Click()
Application.Dialogs(xlDialogPrint).Show , , , 1
Unload UserForm5
MyBooleanClosing = True
End Sub

Private Sub CommandButton3_Click()
Unload UserForm5
Sheets('Analyses').Select
MyBooleanClosing = True
End Sub

Voilà, ce devrait fonctionner...

Bonne Fin d'Aprèm
@+Thierry
 
Salut CutBill et tous les autres,

En pièce attachée le programme qui marche tout seul 🙂

Bon, j'ai suivi ma méthode (en la corrigeant des quelques bugs que j'avais omis) cf lignes ajoutées/modifiées dans le code.

NB.: J'ai supprimé les modules vides (en fait ca ne sert à rien de les garder même si ça fait class d'en avoir autant 🙂 ).
NB2: J'ai modifié quelques Select et ClearContents (à toi de trouver où 😉 ) En fait ça simplifie le code: 1 ligne de code au lieu de 2. Tu verras y a souvent des choses qu'on peut simplifier en VB(A).
NB3.: Tjrs concernant les modules, en fait 1 seul suffit avec toutes tes procédures dedans (à l'exception des modules de classe).

PS à _Thierry...j'me suis pas trompé, juste que dans mon premier post j'ai pas indiqué à qui je répondai mais il s'agissait bien de CutBill. Dans le second c'était pour le code de Dan.

Cordialement
MrExcel
[file name=Forum XLD_20050228161128_20050228165317.zip size=33524]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Forum XLD_20050228161128_20050228165317.zip[/file]
 

Pièces jointes

Salut CutBill et tous les autres,

En pièce attachée le programme qui marche tout seul 🙂

Bon, j'ai suivi ma méthode (en la corrigeant des quelques bugs que j'avais omis) cf lignes ajoutées/modifiées dans le code.

NB.: J'ai supprimé les modules vides (en fait ca ne sert à rien de les garder même si ça fait class d'en avoir autant 🙂 ).
NB2: J'ai modifié quelques Select et ClearContents (à toi de trouver où 😉 ) En fait ça simplifie le code: 1 ligne de code au lieu de 2. Tu verras y a souvent des choses qu'on peut simplifier en VB(A).
NB3.: Tjrs concernant les modules, en fait 1 seul suffit avec toutes tes procédures dedans (à l'exception des modules de classe).

PS à _Thierry...j'me suis pas trompé, juste que dans mon premier post j'ai pas indiqué à qui je répondai mais il s'agissait bien de CutBill. Dans le second c'était pour le code de Dan.

Cordialement
MrExcel
[file name=Forum XLD_20050228161128_20050228165457.zip size=33524]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Forum XLD_20050228161128_20050228165457.zip[/file]
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
40
Affichages
2 K
Retour