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 SubModule 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
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 SubBonjour 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 SubBonjour ,
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 SubJ'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
stProgIf Not Arret Then Application.OnTime d, stProgEncore 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 Subbonjour a tous
Misterkey, ce forum est plus réactif que l'autre tu trouve pas
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