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

vba - proc de tempo : le classeur se rouvre tout seul !!

5 réponses
Avatar
j-pascal
Bonsoir,

Je suis face à un pb que je n'imaginais pas ...
Une procédure de temporisation me rouvre un classeur Excel !!!

Je vais essayer de faire court (peut-être trop pour certain !) en
indiquant que le code qui concerne la tempo :

Dans ThiWorkbook :

'----
Private Sub Workbook_Open()

Call ProchaineAlerte
'----

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal
Target As Range)
On Error Resume Next
Application.OnTime HeureAlerte, Procedure:="Fin", Schedule:=False
ProchaineAlerte
End Sub

'-----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

bla, bla

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

End Sub
'---


Et dans un module standard :

'---
Public HeureAlerte
Sub ProchaineAlerte()
HeureAlerte = Now + TimeValue("00:10:10")
Application.OnTime HeureAlerte, "Fin"
End Sub
'---

Sub Fin()

On Error Resume Next
Application.OnTime HeureAlerte, Procedure:="Fin", Schedule:=False
'annule événnement

Réponse = MsgBox("Avez-vous fini d'utiliser le classeur ?", vbYesNo
+ vbQuestion)
If Réponse = vbNo Then
Call ProchaineAlerte
Else
On Error Resume Next
Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
Schedule:=False
MsgBox "essai ..." '"Au revoir ..."
' ActiveWorkbook.Save
'ThisWorkbook.Close True
End If
End Sub
'---


J'ai planché pas mal de temps aujourd'hui sur le sujet, et je suis à
court d'idée pour résoudre ce pb !

Merci d'avance pour votre aide.

JP

5 réponses

Avatar
JB
Bonsoir,

http://cjoint.com/?meuKaVACUH

JB

On 4 déc, 20:29, j-pascal wrote:
Bonsoir,

Je suis face à un pb que je n'imaginais pas ...
Une procédure de temporisation me rouvre un classeur Excel !!!

Je vais essayer de faire court (peut-être trop pour certain !) en
indiquant que le code qui concerne la tempo :

Dans ThiWorkbook :

'----
Private Sub Workbook_Open()

    Call ProchaineAlerte
'----

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal
Target As Range)
    On Error Resume Next
    Application.OnTime HeureAlerte, Procedure:="Fin", Schedule:=F alse
    ProchaineAlerte
End Sub

'-----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

bla, bla

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

End Sub
'---

Et dans un module standard :

'---
Public HeureAlerte
Sub ProchaineAlerte()
    HeureAlerte = Now + TimeValue("00:10:10")
    Application.OnTime HeureAlerte, "Fin"
End Sub
'---

Sub Fin()

    On Error Resume Next
    Application.OnTime HeureAlerte, Procedure:="Fin", Schedule:=F alse
'annule événnement

    Réponse = MsgBox("Avez-vous fini d'utiliser le classeur ?", v bYesNo
+ vbQuestion)
    If Réponse = vbNo Then
        Call ProchaineAlerte
    Else
        On Error Resume Next
        Application.OnTime EarliestTime:=HeureAlerte, Procedure :="fin",
Schedule:úlse
        MsgBox "essai ..." '"Au revoir ..."
'         ActiveWorkbook.Save
        'ThisWorkbook.Close True
    End If
End Sub
'---

J'ai planché pas mal de temps aujourd'hui sur le sujet, et je suis à
court d'idée pour résoudre ce pb !

Merci d'avance pour votre aide.

JP


Avatar
j-pascal
Bonsoir Jacques,

Merci pour ta patience !

J'ai donc "viré" tous les bouts de codes (liés à cette tempo) de ma
macro. J'ai déplacé ton module standard vers mon classeur, et tout
semble bien fonctionner ... néanmoins :

Dans "ma" macro, module ThisWorkbook, j'ai :

'---
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !"
Cancel = True
Exit Sub
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
etc.
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
etc.
'---


Si dans ton code, à la ligne : "Réponse = MsgBox("Avez-vous fini
d'utiliser le classeur ?", vbYesNo + vbQuestion)"

... je réponds "oui", j'exécute : "ThisWorkbook.Close True"


Et là, j'enregistre bien le classeur, mais je shunte toutes les options
qui me sont offertes par le code contenu dans "Workbook_BeforeSave"
(comme l'enregistrement ".SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn")
& " " & .Name" (ie)


Comment est-il possible d'orienter la femeture vers
"Workbook_BeforeSave" du module "ThisWorkbook" ?

Merci pour ton aide,

JP



Bonsoir,

http://cjoint.com/?meuKaVACUH

JB

On 4 déc, 20:29, j-pascal wrote:
Bonsoir,

Je suis face à un pb que je n'imaginais pas ...
Une procédure de temporisation me rouvre un classeur Excel !!!

Je vais essayer de faire court (peut-être trop pour certain !) en
indiquant que le code qui concerne la tempo :

Dans ThiWorkbook :

'----
Private Sub Workbook_Open()

    Call ProchaineAlerte
'----

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal
Target As Range)
    On Error Resume Next
    Application.OnTime HeureAlerte, Procedure:="Fin", Schedule:úlse
    ProchaineAlerte
End Sub

'-----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

bla, bla

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

End Sub
'---

Et dans un module standard :

'---
Public HeureAlerte
Sub ProchaineAlerte()
    HeureAlerte = Now + TimeValue("00:10:10")
    Application.OnTime HeureAlerte, "Fin"
End Sub
'---

Sub Fin()

    On Error Resume Next
    Application.OnTime HeureAlerte, Procedure:="Fin", Schedule:úlse
'annule événnement

    Réponse = MsgBox("Avez-vous fini d'utiliser le classeur ?", vbYesNo
+ vbQuestion)
    If Réponse = vbNo Then
        Call ProchaineAlerte
    Else
        On Error Resume Next
        Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
Schedule:úlse
        MsgBox "essai ..." '"Au revoir ..."
'         ActiveWorkbook.Save
        'ThisWorkbook.Close True
    End If
End Sub
'---

J'ai planché pas mal de temps aujourd'hui sur le sujet, et je suis à
court d'idée pour résoudre ce pb !

Merci d'avance pour votre aide.

JP




Avatar
Youky \(BJ\)
> Comment est-il possible d'orienter la femeture vers "Workbook_BeforeSave"
du module "ThisWorkbook" ?



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbook_BeforeSave
End Sub

Youky (BJ)
Avatar
j-pascal
Bonsoir Youky,

Je sens que la solultion n'est pas loin, mais la ligne
:"Workbook_BeforeSave" me renvoit : "Erreur de compilation - Argument
non facultatif"
J'ai cherché dans l'aide, mais aucune des solutions appliquées n'est
efficace. N'ai probablement pas tout compris ...

@+

JP

PS : j'ai mis ce code dans le module "ThisWorkbook" ; c'est bon ?



Comment est-il possible d'orienter la femeture vers "Workbook_BeforeSave"
du module "ThisWorkbook" ?



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbook_BeforeSave
End Sub

Youky (BJ)


Avatar
Youky \(BJ\)
J'ai fais la boulette, pourtant j'avais testé avec un beep, j'ai bien recu
le beep mais sans doute celui de l'erreur
Voiçi la rectif....il suffit de...... ThisWorbook.Save
J'ai de nouveau testé avec succés.
Youky (BJ)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Save
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
'ici ta macro de BeforeSave
End Sub

"j-pascal" a écrit dans le message de news:

Bonsoir Youky,

Je sens que la solultion n'est pas loin, mais la ligne
:"Workbook_BeforeSave" me renvoit : "Erreur de compilation - Argument non
facultatif"
J'ai cherché dans l'aide, mais aucune des solutions appliquées n'est
efficace. N'ai probablement pas tout compris ...

@+

JP

PS : j'ai mis ce code dans le module "ThisWorkbook" ; c'est bon ?



Comment est-il possible d'orienter la femeture vers
"Workbook_BeforeSave" du module "ThisWorkbook" ?



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbook_BeforeSave
End Sub

Youky (BJ)