Creer ppt via VBA
Bonjour,
J'ai besoin d'actualiser une grosse quantité de présentation PPT (250). Le problème, c'est que il me faut créer totalement la slide via un template bien précis et déja créer. J'en suis actuellement la :
Sub UPDATE_PPT()
'déclaration des variables
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim shpTexte As Shape
'
' PPT Macro
' ACTU PPT + NOM + GRAPH FUTUR
'
' Touche de raccourci du clavier: Ctrl+Shift+P
'
' On déclare une variable de type Application PowerPoint
Dim ppt As PowerPoint.Application
Dim Diapo1 As PowerPoint.slide
Set ppt = CreateObject("PowerPoint.Application")
ppt.Visible = True '
' 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:="CHEMIN DU DOSSIER")
End Sub
Voila, mtn je bloque, j'aimerais qu'il :
- aille chercher une cellule dans excel, (exemple : B4)
- qu'il copie colle le contenu de celle-ci,
- qu'il aille chercher dans la slide du PPT le mot JEAN (par exemple)
- qu'il le remplace par le contenu de la cellule excel copier coller juste avant.
Si quelqu'un m'apporte la solution, son poids en air lui sera délivré !
Bonne soirée
bonjour,
une proposition
Sub aargh()
Dim sh As Object, ppt As Object
Dim pres As Object, dia As Object, s As Object
Dim fichierpres$, motinitial$, motfinal$
Set ppt = CreateObject("powerpoint.application") 'application powerpoint
Set sh = ThisWorkbook.Sheets("sheet1") 'feuille excel à adapter
fichierpres = "d:\downloads\modèle de présentation.pptx" 'nom fichier présentation à adapter
Set pres = ppt.presentations.Open(fichierpres) 'ouverture de la présentation
motinitial = "jean" 'mot à remplacer
motfinal = sh.Range("B4") 'mot de remplacement
For Each dia In pres.slides 'on parcourt tous les slides
For Each s In dia.Shapes 'on examine toutes les formes sur le slide
If s.HasTextFrame Then 'la forme contient-elle du texte ?
With s.TextFrame
If .HasText Then
.TextRange.Text = Replace(.TextRange.Text, motinitial, motfinal) 'on remplace le texte
End If
End With
End If
Next s
Next
pres.Save
pres.Close
ppt.Quit
End Sub
Bonjour h2so4,
Alors déjà merci, ensuite pour la macro, tout marche bien ! Mais elle ne change pas le mot "jean" par la cellule "B4"
Je pense qu'il faudrait d'abord lui dire d'ouvrir le classeur,
j'ai pensé a duplique ton code du style :
fichierexcel = "V: etc ....."
workbooks.open fichierexcel
Mais après avoir essayer, ca ne change strictement rien, à part le fait qu'il ouvre excel.
Donc pour résumer après l'avoir tester en ligne par ligne via F8:
- il ouvre bien excel,
- il check bien les shapes de la slide
- il ne change pas "jean" mais je pense qu'il le trouve...
Je suis pas un pro dans VBA, donc la solution du problème m'échappe !
Soit :
1) il ne trouve pas la feuille, je devrais donc lui déclarer qu'il doit chercher dans la feuille excel active (activesheet ...)
2) Il trouve la feuille, mais ne change pas car il veut m'emmerder !
Encore merci et bon vendredi !
Bonjour, salut h2so4,
Le code VBA proposé est à placer et à exécuter depuis le classeur Excel dans lequel se trouves le fameux "B4".
Tu peux le voir dans cet extrait :
Set sh = ThisWorkbook.Sheets("sheet1")
sh représentant l'onglet appelé "sheet1" dans le classeur dans lequel se trouve le code VBA.
Bonjour,
comme tu ne nous as mis aucun fichier exemple de ce que tu veux, je t'ai donné une solution sur base des infos que tu as bien voulu nous donner.
tu nous parles d'un fichier présentation qu'il faut ouvrir, tu nous parles d'un mot à aller chercher en B4 dans la feuille d'un classeur (j'ai fait la supposition qu'il s'agissait du classeur dans lequel se trouve la macro et j'ai appelé cette feuille sheet1), et utiliser ce mot pour remplacer toutes les occurrences de "jean" dans la présentation.
C'est ce que fait la macro que j'ai proposée. Si tu veux autre chose, à toi de l'adapter, je t'ai mis de commentaires là où je pense que tu dois faire des adaptations ou tu précises ce que tu veux en nous mettant des fichiers exemples.
Bonjour Pedro,
Justement, je l'ai bien placé :
Mon chemin :
- Ouverture de mon Excel + ALT F11 => Nouveau module => Copier coller de la nouvelle macro, lancement en automatique puis ligne par ligne
Mais ça n'a pas marché (je remets pas en cause le code ci dessus qui fait surement ce pourquoi il a été conçu, je remets en cause mon manque de connaissance qui fait que j'arrive pas spécialement a lire à travers les lignes)
Donc pour l'instant, ça n'impact pas la shape de mon PPT qui contient "xxx"
Compliqué de mettre un fichier exemple, il faudrait que je change toute la chartre du PPT pour ne pas identifier l'entreprise (vous feriez vite le lien avec l'objet final sinon) et enlever l'intégralité des données de l'excel. Les données sont trés sensibles ...
Je vais te résumer en donnant le plus de détails possible :
Ca concerne des fonds d'investissements, l'idée est la suivante :
Dans excel, je vais ajouter le nom du fond et les détails qui lui sont associés, jusque la rien de bien compliqué
Dans un second temps, la macro va intervenir, pour aller chercher des données historiques dans un logiciel financier puis mettre l'excel a jour via une msgbox sur la plage de temps voulu, la aussi tout va bien
Et pour finir, une autre macro, disons la macro "relou" va elle, prendre les données de l'excel, les transférer dans mon PPT. La partie transfert de graphique marche, car elle n'a rien a remplacé, elle les positionne et c'est fini. Mais quand il s'agit de trouver la shape "NOM DU FONDS" et de la renommer par la fameuse cellule B4, la elle veut plus rien savoir ...
Je sais pas si je suis clair
Bon, quand j'enlève la commande qui va chercher le cellule en b4, et que je lance, ça marche !
J'ai :
motinitial = "JEAN"
motfinal = "CA MARCHE !"
Résultat : Le mot final est bien inscrit dans la shape
Du coup, c'est forcément mon excel qui merde, je vais plancher sur le sujet
Encore merci pour ton aide !
Je clôture par le sujet encore en résolu, dans le doute ou je n'y arrive pas.
Bonjour,
la macro ne renomme pas une shape dont le nom est "jean", la macro remplace "jean" dans le contenu d'une shape, car ce n'est pas ce que j'ai compris.
Quant à ton "ça va être difficile", c'est à toi de voir.
moi cela m'a pris 3 secondes pour faire un classeur avec "coucou" en B4 et 10 secondes pour faire une présentation qui contient "Jean" dans un shape sur un slide, pour tester la macro que je t'ai proposée.
Bon, après y avoir passer la matinée, elle fonctionne, étrangement il ne reconnait pas certain mot à partir du moment ou il y a plus de 2 espace ... Allez savoir pq !
J'ai un autre soucis, mais surement que vous aurez vite vu de trouver la solution,
J'aimerais dans le même style que la dernière macro que cette fois ci :
- il selectionne le graph "1" dans mon excel, il n'y en aura qu'un (graph de performance)
- il aille chercher le mot "balise" (la zone de texte ou le graph ira s'installer) et qu'il y mette le graph 1
C'est tout, peut etre qu'il y a plus simple pour copier coler un graphique à un endroit précis mais objectivement la dernière méthode marchait bien donc ....!
Encore merci H2so4, tu m'as épargné bon nombre d'heure de travail !