Macro VBA Powerpoint - Suppression de plusieurs slides

Nani972 Messages postés 6 Statut Membre -  
Nani972 Messages postés 6 Statut Membre -
Bonjour,

Je suis en train de faire une macro pour mettre à jour automatiquement une présentation PPT.
J'ai en parallèle de cela un fichier excel pour identifier, en fonction des slides à inserer, où il doit les prendre dans le fichier source & où il doit les insérer dans le fichier de destination.
Pour cela, j'ai besoin qu'il me supprime plusieurs slides.

Est-ce que quelqu'un aurait une idée?

Merci d'avance pour votre aide,

Mélanie

5 réponses

  1. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

    J'ai l'impression que c'est une macro Excel qu'il te faut, du coup.
    Cherche "VBA piloter powerpoint depuis Excel", tu devrais trouver ton bonheur.

    A+
    0
  2. Nani972 Messages postés 6 Statut Membre
     
    Bonjour,

    J'ai cherché avec ce que vous m'avez donné, mais je ne trouve pas un code qui me permet de supprimer plusieurs slides, en disant "supprimer de la slide a à la slide r"...
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Voici un exemple à adapter:

    'Microsoft PowerPoint 11.0 Object Library
    Sub TestPowerPoint()
      ' On déclare une variable de type Application PowerPoint
      Dim ppt As PowerPoint.Application
      Set ppt = CreateObject("PowerPoint.Application")
      ppt.Visible = True ' Indispensable, sinon il ne peut pas ouvrir de fichier (Erreur)
      ' On crée maintenant un objet Presentation
      Dim Pres As PowerPoint.Presentation
      ' Et on lui dit de quelle présentation il s'agit :
      Set Pres = ppt.Presentations.Open(Filename:="C:\chemin de la presentation")
     ' Et on supprime la deuxieme diapositive de la présentation :
      Pres.Slides(2).Delete
    'mettre tous les slides a supprimer a la suite
      ' On enregistre la présentation PowerPoint :
      Pres.Save
      ' Et on quitte PowerPoint proprement :
      ppt.Quit
      Set ppt = Nothing
    End Sub

    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Si tu as plusieurs slides qui se suivent tu peux faire une boucle comme ceci:

      Dim i As Integer
      For i = 8 To 25
      Pres.Slides(i).Delete
      Next
      0
    2. Nani972 Messages postés 6 Statut Membre
       
      Sauf que les valeurs 8 et 25 de votre exemple peuvent être aléatoires.
      C'est pour cela que j'ai une table de référence dans un fichier excel ou je peux modifier beaucoup facilement ces valeurs (sans avoir à les chercher dans tout le code).

      J'ai déjà déclaré ses valeurs. Elles sont associées à des variables.
      Seulement, j'ai essayé de le remplacer mais ça ne fonctionne pas.

      For i = PositionPPTDestD1 To PositionPPTDestDn
      pptTdB.Slides(i).Delete
      Next


      La boucle For bloque.
      0
    3. Zoul67 Messages postés 2001 Statut Membre 149
       
      Que sont PositionPPTDestD1 et PositionPPTDestDn ??
      De plus, après avoir supprimé le premier slide, les autres slides risquent de se renuméroter...
      0
    4. Nani972 Messages postés 6 Statut Membre
       
      Ce sont des variables que j'ai déclaré, qui correspondent à des cellules dans mon fichier excel de référence.
      PositionPPTDestD1= 1ère slide à supprimer
      PositionPPTDestDn = Dernière slide à supprimer

      j'ai un code qui permet de faire une selection de slides, mais je suis obligée d'énumérer toutes les slides à supprimer.
      L'idéal, ça serait que je puisse faire cette selection, en disant "selectionner des slides a à z" & les supprimer.
      0
    5. Zoul67 Messages postés 2001 Statut Membre 149
       
      Peux-tu nous envoyer ton fichier Excel via https://www.cjoint.com/ ?
      Avec un UserForm, c'est plus convivial que d'utiliser des cellules à mon avis.
      0
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Il faut faire une boucle sur un tableau, comme ceci:

    Option Explicit
    Option Base 0
    Sub MonPremierTableau()
    Dim toto, tata, titi, tutu, tonton As Integer
    toto = 20
    tata = 18
    titi = 16
    tutu = 14
    tonton = 12
        'Définit la taille du tableau et le type de données.
        Dim NomTableau(4) As String 'a adapter
        Dim i As Integer
        
        'Alimente les éléments du tableau
        NomTableau(0) = toto
        NomTableau(1) = tata
        NomTableau(2) = titi
        NomTableau(3) = tutu
        NomTableau(4) = tonton
        'Boucle sur les éléments du tableau pour lire leur contenu
        For i = 0 To 4 'a adapter
            MsgBox NomTableau(i)
        Next i
    End Sub
    Private Sub CommandButton1_Click()
    MonPremierTableau
    End Sub
    


    Il faudra déclarer tes variables en leur attribuant une valeur, en commençant par les plus hautes. Car comme l'a dit zoul7, les slides n'ont pas le même numéro si tu commences par le début. Tu changeras le MsgBox par Pres.Slides(i).Delete
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour Mélanie,

    Je n'en démords pas, je trouve plus logique d'avoir la macro dans le fichier Excel tableau de bord.
    J'ai donc mis un bout de macro dans le fichier Excel, j'ai aussi corrigé ta macro PowerPoint si tu persistes dans ce sens.

    NB : il ne faut pas oublier de cocher les bonnes références (MS Excel et Powerpoint) pour que l'interaction fonctionne.

    Les fichiers : https://www.cjoint.com/?DLdlo4BBkkY

    A+

    Zoul67
    0
    1. Nani972 Messages postés 6 Statut Membre
       
      Bonjour,

      Merci beaucoup d'avoir pris le temps de regarder tout cela.
      Je vais suivre votre conseil et positionner la macro directement dans le fichier Excel plutot que dans le fichier PPT.
      Je teste le code que vous m'avez donné et je vous donnerais des nouvelles.

      Merci :)
      0