Lancer une macro après l'exécution + x secondes

Bonjour,

J'ai un fichier excel qui sert de tableau de bord avec 3 onglets différents.

Je souhaiterais que chaque onglet s'affiche une dizaine de secondes, puis le suivant une dizaine de secondes, puis le suivant ... le tout en boucle.

J'ai essayé de faire une procédure d'affichage pour chaque onglet mais comme cela se base sur l'heure + xx secondes, l'affichage ne s'exécute pas à leur de fin d'exécution de la procédure précédente mais par rapport à l'heure système.

Voici le code utilisé :

Sub Affichage()

Affichage_1

Affichage_2

Affichage_3

End Sub

Sub Affichage_1()

majauto = TimeSerial(Hour(Time), Minute(Time), Second(Time) + 10)

' Appel récursif

Application.OnTime majauto, "Affichage_1"

Call onglet_1

End Sub

Sub onglet_1

ActiveWorkbook.Sheets("1").Activate

Range("A1").Select

End Sub

Sub Affichage_2()

majauto = TimeSerial(Hour(Time), Minute(Time), Second(Time) + 15)

' Appel récursif

Application.OnTime majauto, "Affichage_2"

Call onglet_2

End Sub

Sub onglet_2

ActiveWorkbook.Sheets("2").Activate

Range("A1").Select

End Sub

Sub Affichage_3()

majauto = TimeSerial(Hour(Time), Minute(Time), Second(Time) + 30)

' Appel récursif

Application.OnTime majauto, "Affichage_3"

Call onglet_3

End Sub

Sub onglet_3

ActiveWorkbook.Sheets("3").Activate

Range("A1").Select

End Sub

Je cherche donc un moyen d’exécuter une procédure seulement quand la précédente est terminée, ou bien faire une pause entre les 2.

Quelqu'un aurait-il une idée?

Merci pour votre aide

(je précise que je ne suis pas spécialiste de VBA)

Bonjour,

avec une seule procédure et un index que tu incrémente :

Dim iOnglet As Integer

Sub AfficheOnglet()
    If iOnglet < 1 Or iOnglet > 3 Then iOnglet = 1 'Limite la valeur l'index
    ThisWorkbook.Sheets(iOnglet).Activate
    iOnglet = iOnglet + 1 'Incremente
    Application.OnTime Now + TimeSerial(0, 0, 2), "AfficheOnglet"
End Sub

tu met le code dans un module standard..

et voilà..

Bonjour,

Met toi sur le sheet "Feuil4" et clique sur le bouton afin d'exécuter.

Bien à toi

144classeur1.xlsm (20.25 Ko)

Bonsoir,

Tu peux également utiliser Application.Wait (auquel cas, il faut réorganiser autrement)...

Je ne sais quel est l'objectif, mais j'espère que tu as prévu un arrêt de la procédure !

NB- Utiliser les balises Code pour citer du code...

Merci pour vos retours rapides.

DHARDY : j'ai essayé ton fichier et j'ai 2 problèmes :

  • le message de fin réapparait toutes les 15 secondes alors que l'affichage des onglets successif ne s'est réalisé qu'une fois.
  • je n'arrive pas à intégrer le code dans mon fichier : il ne se passe rien, sauf le message. Est-ce le fait que j'ai plus de 4 onglets qui pourrait poser problème?

Pierre.Jy : j'ai essayé d'intégrer le code à mon fichier sans succès. Je suis novice en VBA : comment est réalisée l'association de l'index avec les différents onglets?

Merci à vous

L'index varie de 1 a 3 et fait donc le lien avec tes differents onglets..

Execute une fois le code par F5 par exemple

pierre.jy, merci encore pour ta réponse.

Je m'aperçois que quand je lance ta macro, seul le premier onglet s'affiche. Si je clique sur un autre onglet, l'affichage reviens sur le premier au bout des 2 secondes paramétrées. Les 2 autres onglets ne s'affichet pas.

Bonjour,

Effectivement, j'ai fait une erreur de débutant dans la récurcivité.

Voici le code corriger :

Sub RafraichissementSheet()
    If NbOnglet >= 1 And NbOnglet <= 3 Then
        ' Définit l'intervalle avec l'heure actuelle + 15 secondes
        DansXTemps = TimeSerial(Hour(Time), Minute(Time), Second(Time) + 15)
        ' Appel récursif de la fonction RafraichissementGraphe
        Application.OnTime DansXTemps, "RafraichissementSheet"
        ' Appel de la fonction EnregistrerEnPageWeb
        Select Case NbOnglet
            Case 1
                ActiveWorkbook.Sheets("Feuil1").Activate
                Range("A1").Select
            Case 2
                ActiveWorkbook.Sheets("Feuil2").Activate
                Range("A1").Select
            Case 3
                ActiveWorkbook.Sheets("Feuil3").Activate
                Range("A1").Select
            End Select
            NbOnglet = NbOnglet + 1
    Else
            MsgBox "FINI !!!!"
            Exit Sub
    End If
End Sub

Bàt

Merci pour vos réponses.

ça fonctionne.

Rechercher des sujets similaires à "lancer macro execution secondes"