Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vba impossible de fermer le classeur ... de force !

7 réponses
Avatar
j-pascal
Bonjour,

Je souhaite que mon classeur se ferme sans laisser le choix à l'utilisateur
de cliquer sur "Annuler" dans le msgbox ! Il peut cliquer évidemment cliquer
sur "Oui" ou "Non". L'important étant que le classeur ne reste pas ouvert !

Voici le code :

Sub Validité()
Dim Code As Variant
JourDeValidité = Range("U6").Value
If JourDeValidité > 0 Then
MsgBox ("Validité de l'application : " & JourDeValidité & "
jour(s)"), vbOKOnly + vbInformation, "A noter"
Else
MsgBox ("La date limite d'utilisation a expiré !"), vbOKOnly +
vbInformation, "Contactez l'auteur"
Code = InputBox("Entrez le nouveau code ...", "contactez
l'auteur ...")
If Code <> "travail" Then
MsgBox "Code erroné !"
With ThisWorkbook
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name
'"yyyymmmdd-hhnn"

Application.EnableEvents = False
'ActiveWorkbook.Save
ThisWorkbook.Close
End With
Else
End If
End If
End Sub


Sachant que j'ai ceci dans ThisWorkbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim tst
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
Else
tst = MsgBox("Voulez-vous enregistrer une copie sous la forme : " &
"Date Heure Fichier.xls" & " ?", vbYesNo)

With ThisWorkbook
ChDir .Path
If tst = 6 Then
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name
'"yyyymmmdd-hhnn"

'ActiveSheet.Protect Password:="travail" 'ajout du 25/02/07

Else
Cancel = True
End If
End With
End If
End Sub


Je suis perdu ;-(

Merci pour votre aide !


--
Cordialement @+
j.p

7 réponses

Avatar
LSteph
Bonsoir,

On dirait un code repris d'un autre code qui normalement allait dans
une private sub...

Comme on l'a déjà dit ce genre de code ne tient que si l'utilisateur
daigne activer les macros et de plus ne désactive pas les évènnements
ne fait pas Ctrl+Pause ou toute autre échapatoire


Je souhaite que mon classeur se ferme sans laisser le choix à
l'utilisateur de cliquer sur "Annuler" dans le msgbox
remplace

msgbox "Code erroné !"
par
application.statusbar= "Code erroné !"



Bon courage.

Cordialement.

lSteph

Avatar
LSteph
..autre possibilité exemple:

Sub fermeture()
Application.EnableCancelKey = xlDisabled

On Error GoTo fin
MsgBox "on ferme"
fin:
ThisWorkbook.Close True
End Sub


Bonjour,

Je souhaite que mon classeur se ferme sans laisser le choix à
l'utilisateur de cliquer sur "Annuler" dans le msgbox ! Il peut cliquer
évidemment cliquer sur "Oui" ou "Non". L'important étant que le classeur
ne reste pas ouvert !

Voici le code :

Sub Validité()
Dim Code As Variant
JourDeValidité = Range("U6").Value
If JourDeValidité > 0 Then
MsgBox ("Validité de l'application : " & JourDeValidité & "
jour(s)"), vbOKOnly + vbInformation, "A noter"
Else
MsgBox ("La date limite d'utilisation a expiré !"), vbOKOnly
+ vbInformation, "Contactez l'auteur"
Code = InputBox("Entrez le nouveau code ...", "contactez
l'auteur ...")
If Code <> "travail" Then
MsgBox "Code erroné !"
With ThisWorkbook
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name
'"yyyymmmdd-hhnn"

Application.EnableEvents = False
'ActiveWorkbook.Save
ThisWorkbook.Close
End With
Else
End If
End If
End Sub


Sachant que j'ai ceci dans ThisWorkbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim tst
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
Else
tst = MsgBox("Voulez-vous enregistrer une copie sous la forme : "
& "Date Heure Fichier.xls" & " ?", vbYesNo)

With ThisWorkbook
ChDir .Path
If tst = 6 Then
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name
'"yyyymmmdd-hhnn"

'ActiveSheet.Protect Password:="travail" 'ajout du 25/02/07

Else
Cancel = True
End If
End With
End If
End Sub


Je suis perdu ;-(

Merci pour votre aide !




Avatar
j-pascal
Bsr,

J'ai mis ce code en pratique. Ca marche bien !
Je ne comprends pas pourquoi on "ferme" s'il y a une erreur !

JP

"LSteph" a écrit dans le message de news:

..autre possibilité exemple:

Sub fermeture()
Application.EnableCancelKey = xlDisabled

On Error GoTo fin
MsgBox "on ferme"
fin:
ThisWorkbook.Close True
End Sub


Bonjour,

Je souhaite que mon classeur se ferme sans laisser le choix à
l'utilisateur de cliquer sur "Annuler" dans le msgbox ! Il peut cliquer
évidemment cliquer sur "Oui" ou "Non". L'important étant que le classeur
ne reste pas ouvert !

Voici le code :

Sub Validité()
Dim Code As Variant
JourDeValidité = Range("U6").Value
If JourDeValidité > 0 Then
MsgBox ("Validité de l'application : " & JourDeValidité & "
jour(s)"), vbOKOnly + vbInformation, "A noter"
Else
MsgBox ("La date limite d'utilisation a expiré !"), vbOKOnly +
vbInformation, "Contactez l'auteur"
Code = InputBox("Entrez le nouveau code ...", "contactez
l'auteur ...")
If Code <> "travail" Then
MsgBox "Code erroné !"
With ThisWorkbook
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name
'"yyyymmmdd-hhnn"

Application.EnableEvents = False
'ActiveWorkbook.Save
ThisWorkbook.Close
End With
Else
End If
End If
End Sub


Sachant que j'ai ceci dans ThisWorkbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim tst
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
Else
tst = MsgBox("Voulez-vous enregistrer une copie sous la forme : "
& "Date Heure Fichier.xls" & " ?", vbYesNo)

With ThisWorkbook
ChDir .Path
If tst = 6 Then
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name
'"yyyymmmdd-hhnn"

'ActiveSheet.Protect Password:="travail" 'ajout du 25/02/07

Else
Cancel = True
End If
End With
End If
End Sub


Je suis perdu ;-(

Merci pour votre aide !





Avatar
j-pascal
Re,

"LSteph" a écrit dans le message de news:

Bonsoir,

On dirait un code repris d'un autre code qui normalement allait dans une
private sub...

Comme on l'a déjà dit ce genre de code ne tient que si l'utilisateur
daigne activer les macros et de plus ne désactive pas les évènnements ne
fait pas Ctrl+Pause ou toute autre échapatoire


Je t'assure que je fais de gros efforts pour comprendre tout ça, mais cette
notion de fermeture est loin d'être limpide pour moi.
J'ai failli ajouter à mon dernier post "L'auteur se reconnaîtra !". J'espère
que tu ne m'en veux pas de ne pas l'avoir fait ...


Je souhaite que mon classeur se ferme sans laisser le choix à
l'utilisateur de cliquer sur "Annuler" dans le msgbox
remplace

msgbox "Code erroné !"
par
application.statusbar= "Code erroné !"


En un mot, peux-tu me dire l'effet que ça a ?
Veux-tu voir l'application ?

@+ ?

JP


Bon courage.

Cordialement.

lSteph



Avatar
LSteph
C'est juste un exemple ...,
ce qui empêche l'annulation c'est
Application.EnableCancelKey = xlDisabled
pour la suite
on peut supposer y glisser du code
avant d'arriver à la fermeture et que
lors de l'execution l'utilisateur fasse
planter ce code d'une façon ou une autre
dans cette hypothèse il convient d'arriver à fin:
ThisWorkbook.Close True

Cordialement.

lSteph

Bsr,

J'ai mis ce code en pratique. Ca marche bien !
Je ne comprends pas pourquoi on "ferme" s'il y a une erreur !

JP

"LSteph" a écrit dans le message de news:

..autre possibilité exemple:

Sub fermeture()
Application.EnableCancelKey = xlDisabled

On Error GoTo fin
MsgBox "on ferme"
fin:
ThisWorkbook.Close True
End Sub


Bonjour,

Je souhaite que mon classeur se ferme sans laisser le choix à
l'utilisateur de cliquer sur "Annuler" dans le msgbox ! Il peut
cliquer évidemment cliquer sur "Oui" ou "Non". L'important étant que
le classeur ne reste pas ouvert !

Voici le code :

Sub Validité()
Dim Code As Variant
JourDeValidité = Range("U6").Value
If JourDeValidité > 0 Then
MsgBox ("Validité de l'application : " & JourDeValidité &
" jour(s)"), vbOKOnly + vbInformation, "A noter"
Else
MsgBox ("La date limite d'utilisation a expiré !"),
vbOKOnly + vbInformation, "Contactez l'auteur"
Code = InputBox("Entrez le nouveau code ...", "contactez
l'auteur ...")
If Code <> "travail" Then
MsgBox "Code erroné !"
With ThisWorkbook
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " &
.Name '"yyyymmmdd-hhnn"

Application.EnableEvents = False
'ActiveWorkbook.Save
ThisWorkbook.Close
End With
Else
End If
End If
End Sub


Sachant que j'ai ceci dans ThisWorkbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim tst
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible
!", vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
Else
tst = MsgBox("Voulez-vous enregistrer une copie sous la forme
: " & "Date Heure Fichier.xls" & " ?", vbYesNo)

With ThisWorkbook
ChDir .Path
If tst = 6 Then
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " &
.Name '"yyyymmmdd-hhnn"

'ActiveSheet.Protect Password:="travail" 'ajout du 25/02/07

Else
Cancel = True
End If
End With
End If
End Sub


Je suis perdu ;-(

Merci pour votre aide !







Avatar
LSteph
Pas de souci, je voulais juste te rappeler que si tout cela semble
intéressant à expérimenter cela restera assez facilement contournable.

l'autre option avec enablecancelkey est sans doute mieux

remplace
msgbox "Code erroné !"
par
application.statusbar= "Code erroné !"


En un mot, peux-tu me dire l'effet que ça a ?


Oui, cela indique le message dans la barre d'état (en bas) statusbar
ainsi tu n'attends pas un Ok ( ou Ctrl+Pause ) de l'utilisateur.

Cordialement.

lSteph


Re,

"LSteph" a écrit dans le message de news:

Bonsoir,

On dirait un code repris d'un autre code qui normalement allait dans
une private sub...

Comme on l'a déjà dit ce genre de code ne tient que si l'utilisateur
daigne activer les macros et de plus ne désactive pas les évènnements
ne fait pas Ctrl+Pause ou toute autre échapatoire


Je t'assure que je fais de gros efforts pour comprendre tout ça, mais
cette notion de fermeture est loin d'être limpide pour moi.
J'ai failli ajouter à mon dernier post "L'auteur se reconnaîtra !".
J'espère que tu ne m'en veux pas de ne pas l'avoir fait ...


Je souhaite que mon classeur se ferme sans laisser le choix à
l'utilisateur de cliquer sur "Annuler" dans le msgbox
remplace

msgbox "Code erroné !"
par
application.statusbar= "Code erroné !"


En un mot, peux-tu me dire l'effet que ça a ?
Veux-tu voir l'application ?

@+ ?

JP


Bon courage.

Cordialement.

lSteph






Avatar
j-pascal
Bonjour,

Merci pour cette réponse ; c'est plus clair.
Je vais faire un petit tour au marché pour m'aérer le(s) neurone(s) ... Je
reprends tout ça tout à l'heure ;-)

A+

NB : Merci également pour ta précédente réponse.

"LSteph" a écrit dans le message de news:
e2$
C'est juste un exemple ...,
ce qui empêche l'annulation c'est
Application.EnableCancelKey = xlDisabled
pour la suite
on peut supposer y glisser du code
avant d'arriver à la fermeture et que
lors de l'execution l'utilisateur fasse
planter ce code d'une façon ou une autre
dans cette hypothèse il convient d'arriver à fin:
ThisWorkbook.Close True

Cordialement.

lSteph

Bsr,

J'ai mis ce code en pratique. Ca marche bien !
Je ne comprends pas pourquoi on "ferme" s'il y a une erreur !

JP

"LSteph" a écrit dans le message de news:

..autre possibilité exemple:

Sub fermeture()
Application.EnableCancelKey = xlDisabled

On Error GoTo fin
MsgBox "on ferme"
fin:
ThisWorkbook.Close True
End Sub


Bonjour,

Je souhaite que mon classeur se ferme sans laisser le choix à
l'utilisateur de cliquer sur "Annuler" dans le msgbox ! Il peut cliquer
évidemment cliquer sur "Oui" ou "Non". L'important étant que le
classeur ne reste pas ouvert !

Voici le code :

Sub Validité()
Dim Code As Variant
JourDeValidité = Range("U6").Value
If JourDeValidité > 0 Then
MsgBox ("Validité de l'application : " & JourDeValidité & "
jour(s)"), vbOKOnly + vbInformation, "A noter"
Else
MsgBox ("La date limite d'utilisation a expiré !"), vbOKOnly
+ vbInformation, "Contactez l'auteur"
Code = InputBox("Entrez le nouveau code ...", "contactez
l'auteur ...")
If Code <> "travail" Then
MsgBox "Code erroné !"
With ThisWorkbook
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name
'"yyyymmmdd-hhnn"

Application.EnableEvents = False
'ActiveWorkbook.Save
ThisWorkbook.Close
End With
Else
End If
End If
End Sub


Sachant que j'ai ceci dans ThisWorkbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim tst
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
Else
tst = MsgBox("Voulez-vous enregistrer une copie sous la forme :
" & "Date Heure Fichier.xls" & " ?", vbYesNo)

With ThisWorkbook
ChDir .Path
If tst = 6 Then
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name
'"yyyymmmdd-hhnn"

'ActiveSheet.Protect Password:="travail" 'ajout du 25/02/07

Else
Cancel = True
End If
End With
End If
End Sub


Je suis perdu ;-(

Merci pour votre aide !