VBASupprimer toute les images d'une slide PPT

RodyRody Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   -  
RodyRody Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour le forum,

Existe t-il un code VBA pr supprimer depuis Excel toutes les images d'une slide PPT.
Je ne veux pas utiliser de reférence absolue de type

Dim Pptdoc As Powerpoint.Presentation
Pptdoc.Slides(6).Shapes("Picture 9").Delete

car le nom de ma picture variera tous les mois. Ce mois ci c'est (Picture 9) mais le mois prochain ca sera ("Picture X")

Merci d'avance de votre aide

R
A voir également:

3 réponses

m@rina Messages postés 23945 Date d'inscription   Statut Contributeur Dernière intervention   11 466
 
Bonjour,

Il n'existe pas UN code... le VBA est un langage de programmation, il faut donc l'écrire.
Et pour savoir l'écrire, il faut être précis dans ce qu'on souhaite.
Tu parles d'image à supprimer (shapes).

Mais Shapes c'est un peu tout ce qu'on veut : images, dessins, formes automatiques, en-têtes et pdp, un tableau Excel, etc.

Donc, oui on peut supprimer toutes les "shapes" de la diapo... Mais dans ce cas, autant remplacer la diapo par une diapo vierge !!

Maintenant on peut éventuellement filtrer en fonction de la shape à supprimer.

m@rina

0
RodyRody Messages postés 44 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Marina,

Merci de ta réponse. Désolé, je vais essayer d'être plus précis.

Je cherche à automatiser une présentation PPT qui s'actualise tous les mois en fonction d'un fichier excel. Je ne peux pas travailler avec des liens entre excel et PPT parce que ceux ci alourdissent trop la présentation. L'idée est donc de passer par VBA. Une fois que le fichier xls est à jour, j'appuis sur un bouton qui lance une macro qui :
1) Ouvre le PPT
2) Supprime les anciens tableaux
3) Colle avec collage spéciale metafichier elaboré les nouveaux tableaux.
4) Enregistre, puis ferme le nouveau PPT.

Mon problème se trouve sur le point numéro 2. En effet, pour le moment je passe par une référence absolue. Voici le début de mon code


Dim PPT As Powerpoint.Application
Dim Pptdoc As Powerpoint.Presentation
Dim nbshpe As Byte



Set PPT = CreateObject("Powerpoint.Application")
PPT.Visible = True

1) => Ouvre le fichier

Set Pptdoc = _
PPT.Presentations.Open("U:\Prive\Finance Team\Rodrigo\Automatisation des présentations\PEMJP_pres\Rapport Mensuel_04-2012.ppt")

2) =>Supprime les anciens tableaux

ptdoc.Slides(6).Shapes("Picture 9").Delete

3=>Colle avec collage spéciale metafichier elaboré les nouveaux tableaux.

Sheets("ITC_Periodic").Range("A13:BR32").Copy
Pptdoc.Slides(6).Shapes.PasteSpecial ppPasteEnhancedMetafile

Le souci est qu'une fois que la macro a supprimé Picture 9 et a recollé le tableau, son nom PPT change et devient Picture 10.

Je voulais contourner le problème en écrivant une ligne de code qui demande à PPT de supprimer toutes les images de la slide 6 afin de ne pas avoir à modifier le code à chaque update.
Si je supprime la diapo est la remplace par une vierge je devrais réécrire le titre.

J'espère avoir réussi à clarifier mon problème.

Qu'en penses tu ?


Merci d'avance à tous.
0
m@rina Messages postés 23945 Date d'inscription   Statut Contributeur Dernière intervention   11 466
 
Bonsoir,

Le plus simple est de donner toujours le même nom au tableau.
Pour cela, après avoir collé, on prendra le dernier objet et on lui donnera le nom choisi.

Ainsi dans la macro, il suffira de supprimer l'objet de ce nom et de renommer avec ce même nom, ce qui donnerait :

dim tablo As Shape, nb

'suppression du tableau
On Error Resume Next 'au cas où le tablo n'existerait pas
Set tablo=Pptdoc.Slides(6).Shapes("tablo")
tablo.Delete
On Error Goto 0

'on colle le tableau
Pptdoc.Slides(6).Shapes.PasteSpecial ppPasteEnhancedMetafile
'on compte le nb de shapes
nb = Pptdoc.Slides(6).Shapes.Count
'on donne le nom tablo au dernier :
Pptdoc.Slides(6).Shapes(nb).Name = "tablo"

m@rina
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour tout le monde,

Par analogie avec excel, lors de l'ajout du shape il n'est pas actif ?
Ca éviterait de compter pour le retrouver, sans compter que s'il y a eu un ajout manuel c'est foutu.
Sur excel ça donnerait juste après l'ajout :
Selection.ShapeRange.Name = "toto" 
eric
0
m@rina Messages postés 23945 Date d'inscription   Statut Contributeur Dernière intervention   11 466
 
Salut eric ! ;)

Malheureusement, je crains que non, d'où ma petite pirouette... ;)
m@rina
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
tant pis...
Bonne nuit :-)
0
RodyRody Messages postés 44 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Marina,

Merci pour ces informations. J'essaye cet après midi et vous tiens au courant....
Merci infiniment
Bonne journée
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Je me remercie donc tout seul de ma participation même si elle fut stérile...
merci eric
0