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 :

Suppression des slides masquées via une boucle for


Sujet :

VBA PowerPoint

  1. #1
    Futur Membre du Club
    Suppression des slides masquées via une boucle for
    Bonjour,

    Je rencontre une petite difficulté à laquelle je n'ai pas trouvé de solution. Afin d'alléger mes présentations et de les faire passer à d'autres personnes (collègues, clients), je cherche à supprimer de manière automatique les slides masquées pour créer ensuite une version supplémentaire de mon fichier qui sera ainsi allégé et sans informations inutiles. Jusqu'à présent, la sauvegarde au format PDF me permettait de contourner ce problème, mais certaines personnes me demandent une version powerpoint.

    J'ai donc créé une boucle for afin d'identifier les slides masquées pour ensuite les supprimer l'une après l'autre, seulement, je suis confronté à un problème : en supprimant une slide, le système passe à la suivante dans la présentation ; effectivement, la slide n'étant plus, l'index actuel passe à la suivante qui est donc occultée du traitement...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For Each diapo In ActivePresentation.Slides
     
         If diapo.SlideShowTransition.Hidden = True Then
              diapo.Delete
         End If
     
    Next


    L'idéal serait de traiter ce problème à l'envers j'imagine en remontant la collection de slides plutôt qu'en la descendant, la solution est sans doute toute simple, mais là je bloque...

    Si vous avez une idée, je suis preneur

    Merci d'avance pour votre aide

  2. #2
    Inactif  
    Bonjour,

    Tu peux utiliser une boucle For ordinaire, en comptant à rebours. Et c'est aussi vrai pour Excel, Word et les autres.

    De mémoire et non testé. Mais cela devrait être au moins un peu ressemblant.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub SansLesDiapositivesMasquées()
        dim Nombre as integer
        dim i as integer
        dim diapo as slide
        Nombre = activepresentation.slides.count
        For i = Nombre to 1 step -1
            'Pas obligatoire. on pourrait tout passer dans le If, mais
            'cela complique le débogage
            diapo = slides(i)
            If diapo.SlideShowTransition.Hidden = True Then
                 diapo.Delete
            End If
        next
    end sub


    P.S. Si tu mets step 2 (boucle croissante) ou step -2 (boucle décroissante), ti fais une diapo sur 2
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Futur Membre du Club
    Ca marche, mais pas optimal
    Bonjour,

    Merci beaucoup pour cette réponse rapide.

    J'ai l'impression que ça marche, mais j'ai dû modifier le code pour cela et exploiter la fonction Range, par contre, je ne comprends pas pourquoi je n'arrive pas à définir "diapo" pour simplifier la lecture du code comme dans ta proposition car cela plantait...

    Voilà ce que j'ai fait pour que ça fonctionne :

    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
     
    Sub SupprimerLesDiapositivesMasquees()
        Dim Nombre As Integer
        Dim i As Integer
        'Dim diapo As Slide
     
        Nombre = ActivePresentation.Slides.Count
     
        For i = Nombre To 1 Step -1
            'Pas obligatoire. on pourrait tout passer dans le If, mais
            'cela complique le débogage
            'diapo = ActivePresentation.Slides(i)
     
            If ActivePresentation.Slides.Range(i).SlideShowTransition.Hidden = True Then
                'MsgBox "diapo" & ActivePresentation.Slides.Range(i).SlideIndex & " à supprimer"
                ActivePresentation.Slides.Range(i).Delete
            End If
     
        Next
    End Sub


    Si tu as une explication, je suis preneur.

    Encore merci.