Fermeture impossible si un autre classeur est ouvert

Bonjour à tous,

J'ai un classeur1 avec défilement automatique de page toutes les 5 secondes.

Quand le classeur1 est ouvert seul et qui j'y apporte des modifications, je sais le fermer et sauver sans problèmes.

Le hic c'est que quand des autres classeurs sont ouverts en même temps, et que je veux fermer le classeur1 il se ferme et se relance.

Il faut donc que je ferme d'abord les autres classeurs pour enfin pouvoir fermer le classeur1.

Une idée?

Merci d'avance de votre support.

Cordialement

Thisworkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Arret = True
End Sub

 Private Sub Workbook_Open()

 ' Affiche le fichier en plein écran au démarrage
 Application.DisplayFullScreen = True

 'Démarrage sur la page "Loading"
 PageLoading

 End Sub

Module défilement

Public Arret As Boolean

Sub PageLoading()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Loading").Select
  End If
  If Not Arret Then Application.OnTime Now + TimeValue("00:00:05"), "Page1"
End Sub

Sub Page1()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Page1").Select
  End If
  If Not Arret Then Application.OnTime Now + TimeValue("00:00:05"), "Page2"
End Sub

Sub Page2()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Page2").Select
  End If
  If Not Arret Then Application.OnTime Now + TimeValue("00:00:05"), "Page3"
End Sub
Sub Page3()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Page3").Select
  End If
  If Not Arret Then Application.OnTime Now + TimeValue("00:00:05"), "PageLoading"
End Sub

Sub StopDefilement()
    Arret = True
    If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Loading").Select
  End If
End Sub

Sub StartDefilement()
  Arret = False
  PageLoading
End Sub
11classeur1.xlsm (28.59 Ko)

Bonjour,

C'est ta dernière fonction OnTime qui vient à terme et s'exécute, pour l'arrêter :

à chaque utilisation de OnTime il faut que tu mémorise la date et la tâche à exécuter .. puis pour arrêter ta tâche tu rappelle la fonction OnTime avec le paramètre schedule à False ..

exemple de code pour illustrer mon propos :

Dim d As Date
Dim stProg As String

Sub Test1()
 Debug.Print Time & "Test1"
   d = Now + TimeValue("00:00:01")
   stProg = "Test1"
    Application.OnTime d, stProg
End Sub

Sub Fin()
On Error Resume Next
 Application.OnTime d, stProg, , False
End Sub

Bonjour Pierre.jy

Merci de ta réponse mais ou dois-je inclure ton code?

Je débute et je dois avouer que je ne comprend pas trop....

Merci de ton support

Cordialement

Ben tu rajoute la déclaration des 2 variables d et stProg , tout en haut de ton code en dehors de toutes procédure (comme ta variable arret ..)

tu modifie chaque appel à On time sur le principe :

d = Now + TimeValue("00:00:05")
stProg   ="Page1"
If Not Arret Then Application.OnTime d, 

et tu rajoute dans ton code d'arrêt :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Arret = True
On Error Resume Next
 Application.OnTime d, stProg, , False
End Sub

Bonjour ,

Voici le code adapté qui fonctionne.

Dim d As Date
Dim stProg As String
Public Arret As Boolean

Sub PageLoading()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Loading").Select
Debug.Print Time & "PageLoading"
d = Now + TimeValue("00:00:05")
'lance la macro Page1
stProg = "Page1"
If Not Arret Then Application.OnTime d, stProg
End If
End Sub

Sub Page1()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Page1").Select
  Debug.Print Time & "Page1"
  d = Now + TimeValue("00:00:05")
  'lance la macro Page2
stProg = "Page2"
If Not Arret Then Application.OnTime d, stProg
End If
End Sub

Sub Page2()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Page2").Select
    Debug.Print Time & "Page2"
  d = Now + TimeValue("00:00:05")
  'lance la macro Page3
stProg = "Page3"
If Not Arret Then Application.OnTime d, stProg
End If
End Sub
Sub Page3()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Page3").Select
    Debug.Print Time & "Page3"
  d = Now + TimeValue("00:00:05")
  'lance la macro PageLoading
stProg = "PageLoading"
If Not Arret Then Application.OnTime d, stProg
End If
End Sub

Sub StopDefilement()
    Arret = True
    If ActiveWorkbook.Name = ThisWorkbook.Name Then
    Sheets("Loading").Select
    'arrête le défilement
    On Error Resume Next
    Application.OnTime d, stProg, , False

  End If
End Sub

Sub StartDefilement()
  Arret = False
  PageLoading
  'relance le défilement
  On Error Resume Next
  Application.OnTime d, stProg, , True
End Sub

Sub Fin_OnTime()
 On Error Resume Next
 Application.OnTime d, stProg, , False
End Sub

J'ai eu quelques difficultés à comprendre car tu m'avais fournis 2 codes différents.

If Not Arret Then Application.OnTime d, 

il manquait le

stProg
If Not Arret Then Application.OnTime d,  stProg

Encore 1000 merci's à toi.

Rebonjour,

Autre souci lorsque j'essaye de faire un refresh de données sur un fichier fermé.

Lors de l'ouverture d'un autre fichier, ce code me bloque le défilement des pages.

Ce code est mis à la suite des codes ci dessus...

J'ai pourtant répété le même principe OnTime???

Cdt,

'Module pour rafraichir les données toutes les 30secondes

Sub Update_value()

Debug.Print Time & "Update_value"
'Nombre de secondes avant le refresh données
    d = Now + TimeValue("00:00:05")
'lance la macro
    stProg = "update_start"
If Not Arret Then Application.OnTime d, stProg
End Sub

Sub update_start()
'Modifier le nom du fichier excel que l'on veut faire le refresh données
If ActiveWorkbook.Name = ThisWorkbook.Name Then
    ActiveWorkbook.UpdateLink Name:="Value_affichage_tv.xlsm", Type:= _
        xlExcelLinks
End If

End Sub

bonjour a tous

Misterkey, ce forum est plus réactif que l'autre tu trouve pas

En effet

Je comprends pas tout ce que tu veux faire ...

mais pour ma part je pense que tu devrais utiliser un autre couple de variable d2 et stProg2 pour tes onTime à 30 secondes....

et penser à rajouter dans le workbook close une autre arrêt avec ces variables..

Je voudrais que les pages défilent.

Grâce à toi cela fonctionne.

Je voudrais aussi lancer une macro au démarrage du classeur qui effectue un refresh de données sur un autre classeur toutes les 30 secondes.

Merci de ton aide

Rechercher des sujets similaires à "fermeture impossible classeur ouvert"