XL 2019 Rotation automatique entre deux feuilles

pierrelcq

XLDnaute Junior
Bonjour,

J'utilise une macro pour faire une rotation entre deux feuilles automatiquement, ce qui me permet d'afficher en continue ces deux feuilles sur un écran de télévision avec un intervalle choisi en fonction de ma convenance.

L'un d'entre vous m'avez déjà donné un bon coup de main pour faire cette macro, j'ai juste ajouté 1 ou 2 lignes pour qu'elle me convienne parfaitement.

Globalement pour la résumer:

Si on est le lundi/mardi/mercredi alors rotation Feuille 1 (30sec) ensuite switch sur Feuille 2 (1sec) et reswitch sur Feuille 1 ()
Cette première étape de rotation sert juste à actualiser mes TCD sur la feuille 1 car il s'actualise lors de l'activation de ma feuille.

En revanche, si nous sommes un jour supérieur mercredi alors Feuille 1 (30sec) ensuite switch sur Feuille 2 (30sec) et ainsi de suite, là pour le coup les informations sur la feuille 2 m'intéressent vraiment c'est pourquoi je veux qu'elle apparaisse 30 secondes.

Ce que je souhaite ajouter sur cette macro c'est un test à chaque rotation du jour actuel.

Le problème c'est que là le jeudi matin, elle a pas pris en compte que nous étions jeudi car je laisse allumer le pc pendant la semaine entière et l'activation de la macro date du lundi.

Donc la macro a bien vu que nous étions lundi le jour du lundi mais après elle ne va plus jamais retester le jour.

J'espère avoir été claire, et je vous remercie par avance pour votre aide.

Bien cordialement

Pierre


' Identification du Timer : important pour le désactiver
Public RotationId As Date
Public RotationId2 As Date
Public RotationId3 As Date

Sub Start_Rotation()

' On lance la rotation
' Si le jour est jeudi/vendredi/samedi/dimanche
If Weekday(Now, vbMonday) >= 4 Then
Rotation
Else
Rotation2
End If

End Sub

Sub Stop_Rotation()
' On supprime la tache horaire de Rotation
If RotationId > 0 Then
Application.OnTime RotationId, "Rotation", , False
Application.StatusBar = ""
RotationId = Empty
ElseIf RotationId2 > 0 Then
Application.OnTime RotationId2, "Rotation2", , False
Application.StatusBar = ""
RotationId2 = Empty
End If
End Sub


Sub Rotation()

' Liste des feuilles à afficher
Dim Fls() As Variant
Fls = Array("TDB S+1", "TDB S")

' On active la feuille qui n'est pas actuellement affichée (flip/flop)
ThisWorkbook.Sheets(IIf(ActiveSheet.Name = Fls(0), Fls(1), Fls(0))).Activate

' Création d'une tache horaire à faire dans 30 secondes
RotationId = Now + TimeValue("00:00:30") ' 45 secondes
Application.OnTime RotationId, "Rotation"

' On indique que la rotation est en cours
Application.StatusBar = "Prochaine rotation à " & Format(RotationId, "hh:mm:ss")

End Sub

Sub Rotation2()
If ActiveSheet.Name = ("TDB S") Then
Worksheets("TDB S+1").Activate
RotationId3 = Now + TimeValue("00:00:0001")
Application.OnTime RotationId3, "Rotation3"
Else: MsgBox "Merci de vous placer sur la semaine S pour lancer la rotation!"

End If

End Sub

Sub Rotation3()

Worksheets("TDB S").Activate
RotationId2 = Now + TimeValue("00:00:30")
Application.OnTime RotationId2, "Rotation2"


' On indique que la rotation est en cours
Application.StatusBar = "Prochaine rotation à " & Format(RotationId2, "hh:mm:ss")


End Sub
 

Phil69970

XLDnaute Accro
Bonjour @pierrelcq, le forum

Je ne comprends pas bien à quoi cela sert de se "promener"🤔 entre les feuilles pour mettre à jour les TCD alors que tu peux le faire comme ça et sans "promenade".

VB:
Sub Test()
'Pour geler l'écran lors de la MaJ des TCD
Application.ScreenUpdating = False

Dim TCD As PivotTable
  For i = 1 To Sheets.Count
     For Each TCD In Worksheets(i).PivotTables
          TCD.RefreshTable
     Next
 Next i
End Sub

Et tous tes TCD sont à jour.... immédiatement

@Phil69970
 

pierrelcq

XLDnaute Junior
J'avais fait un test de mise à jour automatique de TCD sans changer de feuilles le lundi/Mardi/mercredi puisque je n'ai pas besoin de la feuille 2.

Le problème c'était que la mise à jour automatique entrainait des sauts à l'écran et ça faisait que de redimensionner les TCD c'est comme si l'écran faisait que de vibrer dès qu'une nouvelle données étaient ajoutées.
 

pierrelcq

XLDnaute Junior
c'est exactement ce que je voulais faire, c'est à dire lorsqu'une nouvelle donnée est importée sur une de mes feuilles X alors cela actualise mes TCD sur mes feuilles Y.

Le problème c'est que la balise worksheet_change ou la balise worksheet_calculate n'est absolument pas trigger dans mon scénario, car je copie colle les données d'un autre fichier sur mes feuilles types X et cela semble poser problème.
 

pierrelcq

XLDnaute Junior
L'importation est en continue, les utilisateurs saisissent dans un excel X en permanence toute la journée.

Mon excel Y vient copier ses données.

Je comprends pas a quel moment l'actualisation des TCD se fait si la balise worksheet_change ne marche pas ?

Je veux que tout soit absolument automatique sans actions de l'utilisateurs aussi
 

Phil69970

XLDnaute Accro
Re

Je comprends pas cette phrase : mon excel x et mon excel y et l'importation en continue !!!
L'importation est en continue, les utilisateurs saisissent dans un excel X en permanence toute la journée.

Mon excel Y vient copier ses données.

Pour moi il y a un code vba qui fait l'importation et il suffit qu'en fin d'importation de faire la MAJ des TCD et pis c'est tout....

@Phil69970
 

Discussions similaires

Haut Bas