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

Discussion :

Suppression des slides masquées via une boucle for [PPT-2010]


Sujet :

VBA PowerPoint

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur agronome
    Inscrit en
    janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur agronome
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : janvier 2012
    Messages : 6
    Points : 7
    Points
    7
    Par défaut 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
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    4 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 855
    Points : 9 969
    Points
    9 969
    Billets dans le blog
    33
    Par défaut
    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
    Homme Profil pro
    Ingénieur agronome
    Inscrit en
    janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur agronome
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : janvier 2012
    Messages : 6
    Points : 7
    Points
    7
    Par défaut 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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour progress bar via une boucle for
    Par solo190 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/03/2017, 18h33
  2. Charger des fichiers .mat dans une boucle for
    Par chouicha dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/02/2014, 01h05
  3. [PowerShell] Exécution .cmd via une boucle for
    Par powershell dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 19/03/2013, 13h48
  4. [CR 10] Génerer des sous-rapports via une boucle
    Par Marco94 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 11/08/2009, 15h30
  5. Réponses: 5
    Dernier message: 30/05/2007, 18h08

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