IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA PowerPoint Discussion :

Simuler un bouton "précédent" qui remonte l'historique de navigation


Sujet :

VBA PowerPoint

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    778
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 778
    Par défaut Simuler un bouton "précédent" qui remonte l'historique de navigation
    Bonjour
    J'ai fait une présentation avec des liens et boutons d'actions qui permettent, comme sur le Web, de "naviguer" d'une rubrique à l'autre de manière non linéaire.
    En revanche, je n'ai pas trouvé de fonction qui permette de remonter l'historique de navigation un peu comme le fait le bouton "précédent" d'un navigateur web.
    Par exemple
    Au slide 1, j'ai un renvoi vers une rubrique située à partir du slide 10 et jusqu'au slide 12
    Au slide 1, j'insère un bouton d'action qui m'envoie vers le slide 10.
    L'utilisateur peut décider de lire de 10 à 12 ou de "revenir en arrière".
    La seule manière qu'offre PTT en base est d'insérer de boutons d'action "précédent" (vers slide N-1) ou "dernier slide affiché" mais pas de remonter le fil.
    Vous me direz : tu n'as qu'à mettre un bouton d'action au slide 10 qui te ramène au slide 1.
    Le problème est que j'ai plusieurs slides (pas que le 1) qui pointent vers la rubrique qui commence au slide 10. Donc quand je suis au slide 10, il y a plusieurs "retours" possibles et si je mets un bouton pour chaque, l'utilisateur ne sait pas sur lequel cliquer sauf à mettre des libellés qui alourdissent le visuel. Et cela m'oblige à programmer un bouton pour chaque possibilité.
    J'ai fait beaucoup de recherche sur internet sans rien trouver
    Je pense qu'il doit y avoir une solution en code VBA (je suppose qu'il faut d'abord créer et mémoriser un "historique de navigation".
    Quelqu'un aurait-il la solution ?

    Je m'y connais pas mal en VBA mais plutôt appliqué à Excel. Je connais peu ou pas les méthodes existantes pour Powerpoint

    Merci de votre aide

  2. #2
    Membre très actif

    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 457
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Le fichier joint contient un module de classe qui permet d'utiliser l'événement WindowSelectionChange.

    Les différentes diapos utilisées sont enregistrées dans une ListBox d'un userform. Un click dans la listbox renvoie sur la diapo.

    Pour lancer le userform et l'événement, cliquer sur le bouton vert dans la barre d'outils d'accès rapide

    Nom : Capture1.JPG
Affichages : 96
Taille : 12,9 Ko

    Au fur et à mesure de la navigation, le nom des diapos est ajouté :

    Nom : Capture2.JPG
Affichages : 90
Taille : 22,9 Ko


    Dans la barre d'accès rapide :


    • la flèche <--- fait disparaître la boite de dialogue.
    • La flèche ---> la fait réapparaître.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    778
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 778
    Par défaut
    Bonjour,

    Mon message d'origine étant ancien, j'ai trouvé une solution mais je ne sais plus comment. Je la partage ici :
    D'abord, il faut lancer une macro "RunEvents" à l'ouverture de la présentation. Pour cela j'ai créé un bouton sur la première page dont le code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    RunEvents
    End Sub
    C'est le seul truc un peu artificiel car pour la suite, je crée du code dans un module :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    Option Explicit
    Public Historique As New Collection
    Public DerniereDiapo As Integer
    Public SiRetour As Boolean
     
    ' Objet pour gestion des événements
    Private oEvents As ClEvents
     
    ' Active les événements
    Public Sub AttachEvents()
    Set oEvents = New ClEvents
    End Sub
     
    ' Désactive les événements
    Public Sub DetachEvents()
    Set oEvents = Nothing
    End Sub
     
    ' Lance les événements sur la première diapo
    Public Sub RunEvents()
    InitialiserHistorique
    ' Active les événements
    AttachEvents
    ' Passe à la diapositive suivante
    ActivePresentation.SlideShowWindow.View.Next
     
    End Sub
     
    Sub InitialiserHistorique()
        Set Historique = Nothing
        Historique.Add ActivePresentation.SlideShowWindow.View.Slide.SlideIndex
        'MsgBox "historique.count = " & Historique.Count
        SiRetour = False
    End Sub
     
    Sub AjouterALHistorique()
        If SiRetour = False Then
            Historique.Add ActivePresentation.SlideShowWindow.View.Slide.SlideIndex
        Else
            SiRetour = False
        End If
        'MsgBox "historique.count = " & Historique.Count
    End Sub
     
    Sub Retour()
        If Historique.Count > 1 Then
                'MsgBox "historique.count avant retour " & Historique.Count
            DerniereDiapo = Historique(Historique.Count - 1)
                'MsgBox "dernièrediapo.index = " & DerniereDiapo
            Historique.Remove Historique.Count
                'MsgBox "historique.count après remove " & Historique.Count
            ActivePresentation.SlideShowWindow.View.GotoSlide (DerniereDiapo)
            SiRetour = True
        End If
    End Sub

    Après cela, il suffit de créer un bouton "retour" sur chaque diapo où je souhaite pouvoir retourner en arrière et j'associe à ce bouton la macro "Retour".

    Voilà, si ça peut servir à d'autres...

  4. #4
    Membre très actif

    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 457
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Merci pour le retour. Vous devez avoir également un module de classe.

    En ce qui me concerne :

    Dans le module de classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Option Explicit
     
    ' Objet application qui reçoit les événements
    Private WithEvents oApp As PowerPoint.Application
     
    '----------------------------
    ' Initialisation de la classe
    '----------------------------
    Private Sub Class_Initialize()
            Set oApp = New PowerPoint.Application
    End Sub
     
    '------------------------
    ' Libération de la classe
    '------------------------
    Private Sub Class_Terminate()
            Set oApp = Nothing
    End Sub
     
     
    Private Sub Oapp_WindowSelectionChange(ByVal Sel As Selection)
     
            If Sel.Type = ppSelectionSlides Then UsfSlides.ListBoxSlides.AddItem Sel.SlideRange.Name
     
    End Sub
    Dans le module standard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Option Explicit
     
    ' Objet pour gestion des événements
    Private oEvents As clEvents
     
    ' Active les événements
    Public Sub AttachEvents()
           Set oEvents = New clEvents
    End Sub
     
    ' Désactive les événements
    Public Sub DetachEvents()
           Set oEvents = Nothing
    End Sub
     
    Public Sub RunEvents()
           AttachEvents
           UsfSlides.Show 0
    End Sub
     
    Public Sub AfficherUsfSlides()
           UsfSlides.Show 0
    End Sub
     
    Public Sub MasquerUsfSlides()
           UsfSlides.Hide
    End Sub
    Dans l'userform contenant une ListBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Private Sub ListBoxSlides_Click()
     
          ActivePresentation.Slides(Me.ListBoxSlides.Value).Select
     
    End Sub
    La macro RunEvents est lancée depuis la barre d'accès rapide.

Discussions similaires

  1. Réponses: 26
    Dernier message: 03/03/2015, 15h45
  2. [VS2013] boutons qui remontent
    Par Kropernic dans le forum Visual Studio
    Réponses: 8
    Dernier message: 27/02/2015, 10h36
  3. Concaténation de plusieurs valeurs : des quotes qui manquent ?
    Par Palsajicoco dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/03/2011, 14h26
  4. Double quote qui viennent de nulle part
    Par mioux dans le forum Coldfusion
    Réponses: 4
    Dernier message: 26/04/2007, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo