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

sortie de procédure récalcitrante ...

3 réponses
Avatar
j-pascal
Bonjour,

Je n'arrive pas à trouver une solution pour SORTIR de cette procédure
si l'utilisateur clic sur "Enregistrer Sous". Ceci est un essai parmi
beaucoup d'autres ...

La procédure semble fonctionner jusqu'au bout ("pas à pas") si
l'utilisateur clique sur "Enregistrer sous", mais le classeur ne se
ferme pas !!!!


'---------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim Sh As Worksheet
Dim MaPlageDeSaisies
Dim PlageDeSaisies

On Error Resume Next
Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
Schedule:=False

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
_
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
GoTo suite:
Else 'End If
suite:
With ThisWorkbook
ChDrive "C"
ChDir .Path

Application.ScreenUpdating = False

With Feuil2
.Unprotect
.[b3:i2000].Locked = False
End With

MaPlageDeSaisies = Range("B3:I" &
Application.CountA(Range("G:G"))).Address
With Range(MaPlageDeSaisies)
.Locked = True
.FormulaHidden = False
End With

With ActiveSheet
.Protect _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True
.EnableSelection = xlUnlockedCells
End With

Application.EnableEvents = False
With Feuil3
.Visible = True '[accueil] visible
.Activate
ActiveWindow.ScrollRow = 1
End With
Application.EnableEvents = True

For Each Sh In ThisWorkbook.Sheets
If Sh.CodeName <> "Feuil3" Then Sh.Visible =
xlSheetVeryHidden
Next
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
End If

End Sub
'---------------------

Merci pour votre aide,

JP

3 réponses

Avatar
Papyjac
Bonjour J-pascal

Je déconseille de mettre du code applicatif dans les procédures événement :
Il faut mettre juste du code technique, car effectivement il se peut que le
"cancel" soit positionné, mais ce n'est plus visible facilement dans tout ce
code

En fait, si je comprends un peu, quand l'utilssateur clique enregistré sous,
tu lui refuse cette option (on sait qu'il pourra toujours le faire s'il
n'active pas les macros)

Bref tu positionne Cancel = True donc le classeur reste ouvert


--
Papyjac


"j-pascal" a écrit :

Bonjour,

Je n'arrive pas à trouver une solution pour SORTIR de cette procédure
si l'utilisateur clic sur "Enregistrer Sous". Ceci est un essai parmi
beaucoup d'autres ...

La procédure semble fonctionner jusqu'au bout ("pas à pas") si
l'utilisateur clique sur "Enregistrer sous", mais le classeur ne se
ferme pas !!!!


'---------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim Sh As Worksheet
Dim MaPlageDeSaisies
Dim PlageDeSaisies

On Error Resume Next
Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
Schedule:úlse

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
_
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
GoTo suite:
Else 'End If
suite:
With ThisWorkbook
ChDrive "C"
ChDir .Path

Application.ScreenUpdating = False

With Feuil2
.Unprotect
.[b3:i2000].Locked = False
End With

MaPlageDeSaisies = Range("B3:I" &
Application.CountA(Range("G:G"))).Address
With Range(MaPlageDeSaisies)
.Locked = True
.FormulaHidden = False
End With

With ActiveSheet
.Protect _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True
.EnableSelection = xlUnlockedCells
End With

Application.EnableEvents = False
With Feuil3
.Visible = True '[accueil] visible
.Activate
ActiveWindow.ScrollRow = 1
End With
Application.EnableEvents = True

For Each Sh In ThisWorkbook.Sheets
If Sh.CodeName <> "Feuil3" Then Sh.Visible =
xlSheetVeryHidden
Next
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
End If

End Sub
'---------------------

Merci pour votre aide,

JP





Avatar
j-pascal
Bonjour,

Merci pour ta réponse.

(L'utlisateur ne peut pas ne pas activer les macros, sinon il n'a
qu'une page d'accueil (l'invitant à les activer) et toutes les autres
feuilles sont "Very Hidden". C'est la macro qui rend les feuilles
visibles ...)

Je ne comprends pas le rôle de Cancel ...

Bref tu positionne Cancel = True donc le classeur reste ouvert



???

Je ne comprends pas bien ta première remarque ;-(

Je déconseille de mettre du code applicatif dans les procédures événement :
Il faut mettre juste du code technique, car effectivement il se peut que le
"cancel" soit positionné, mais ce n'est plus visible facilement dans tout ce
code



@+ ?

JP


Bonjour J-pascal

Je déconseille de mettre du code applicatif dans les procédures événement :
Il faut mettre juste du code technique, car effectivement il se peut que le
"cancel" soit positionné, mais ce n'est plus visible facilement dans tout ce
code

En fait, si je comprends un peu, quand l'utilssateur clique enregistré sous,
tu lui refuse cette option (on sait qu'il pourra toujours le faire s'il
n'active pas les macros)

Bref tu positionne Cancel = True donc le classeur reste ouvert


--
Papyjac


"j-pascal" a écrit :

Bonjour,

Je n'arrive pas à trouver une solution pour SORTIR de cette procédure
si l'utilisateur clic sur "Enregistrer Sous". Ceci est un essai parmi
beaucoup d'autres ...

La procédure semble fonctionner jusqu'au bout ("pas à pas") si
l'utilisateur clique sur "Enregistrer sous", mais le classeur ne se
ferme pas !!!!


'---------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim Sh As Worksheet
Dim MaPlageDeSaisies
Dim PlageDeSaisies

On Error Resume Next
Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
Schedule:úlse

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
_
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
GoTo suite:
Else 'End If
suite:
With ThisWorkbook
ChDrive "C"
ChDir .Path

Application.ScreenUpdating = False

With Feuil2
.Unprotect
.[b3:i2000].Locked = False
End With

MaPlageDeSaisies = Range("B3:I" &
Application.CountA(Range("G:G"))).Address
With Range(MaPlageDeSaisies)
.Locked = True
.FormulaHidden = False
End With

With ActiveSheet
.Protect _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True
.EnableSelection = xlUnlockedCells
End With

Application.EnableEvents = False
With Feuil3
.Visible = True '[accueil] visible
.Activate
ActiveWindow.ScrollRow = 1
End With
Application.EnableEvents = True

For Each Sh In ThisWorkbook.Sheets
If Sh.CodeName <> "Feuil3" Then Sh.Visible =
xlSheetVeryHidden
Next
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
End If

End Sub
'---------------------

Merci pour votre aide,

JP







Avatar
Papyjac
Bonjour J-pascal

L'aide me semble clair à ce sujet : Cancel = False en début de procédure, si
tu ne changes rien, le classeur doit se fermer. Par contre si tu mets Cancel
= True, cela signifie que tu veux que le classeur reste ouvert


--
Papyjac


"j-pascal" a écrit :

Bonjour,

Merci pour ta réponse.

(L'utlisateur ne peut pas ne pas activer les macros, sinon il n'a
qu'une page d'accueil (l'invitant à les activer) et toutes les autres
feuilles sont "Very Hidden". C'est la macro qui rend les feuilles
visibles ...)

Je ne comprends pas le rôle de Cancel ...

> Bref tu positionne Cancel = True donc le classeur reste ouvert

???

Je ne comprends pas bien ta première remarque ;-(

> Je déconseille de mettre du code applicatif dans les procédures événement :
> Il faut mettre juste du code technique, car effectivement il se peut que le
> "cancel" soit positionné, mais ce n'est plus visible facilement dans tout ce
> code

@+ ?

JP


> Bonjour J-pascal
>
> Je déconseille de mettre du code applicatif dans les procédures événement :
> Il faut mettre juste du code technique, car effectivement il se peut que le
> "cancel" soit positionné, mais ce n'est plus visible facilement dans tout ce
> code
>
> En fait, si je comprends un peu, quand l'utilssateur clique enregistré sous,
> tu lui refuse cette option (on sait qu'il pourra toujours le faire s'il
> n'active pas les macros)
>
> Bref tu positionne Cancel = True donc le classeur reste ouvert
>
>
> --
> Papyjac
>
>
> "j-pascal" a écrit :
>
>> Bonjour,
>>
>> Je n'arrive pas à trouver une solution pour SORTIR de cette procédure
>> si l'utilisateur clic sur "Enregistrer Sous". Ceci est un essai parmi
>> beaucoup d'autres ...
>>
>> La procédure semble fonctionner jusqu'au bout ("pas à pas") si
>> l'utilisateur clique sur "Enregistrer sous", mais le classeur ne se
>> ferme pas !!!!
>>
>>
>> '---------------------
>> Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
>> Boolean)
>> Dim Sh As Worksheet
>> Dim MaPlageDeSaisies
>> Dim PlageDeSaisies
>>
>> On Error Resume Next
>> Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
>> Schedule:úlse
>>
>> If SaveAsUI Then
>> MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
>> _
>> vbExclamation, "choix possibles : Enregistrer ou Fermer"
>> Cancel = True
>> GoTo suite:
>> Else 'End If
>> suite:
>> With ThisWorkbook
>> ChDrive "C"
>> ChDir .Path
>>
>> Application.ScreenUpdating = False
>>
>> With Feuil2
>> .Unprotect
>> .[b3:i2000].Locked = False
>> End With
>>
>> MaPlageDeSaisies = Range("B3:I" &
>> Application.CountA(Range("G:G"))).Address
>> With Range(MaPlageDeSaisies)
>> .Locked = True
>> .FormulaHidden = False
>> End With
>>
>> With ActiveSheet
>> .Protect _
>> DrawingObjects:=True, _
>> Contents:=True, _
>> Scenarios:=True
>> .EnableSelection = xlUnlockedCells
>> End With
>>
>> Application.EnableEvents = False
>> With Feuil3
>> .Visible = True '[accueil] visible
>> .Activate
>> ActiveWindow.ScrollRow = 1
>> End With
>> Application.EnableEvents = True
>>
>> For Each Sh In ThisWorkbook.Sheets
>> If Sh.CodeName <> "Feuil3" Then Sh.Visible =
>> xlSheetVeryHidden
>> Next
>> .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
>> End With
>> End If
>>
>> End Sub
>> '---------------------
>>
>> Merci pour votre aide,
>>
>> JP
>>
>>
>>