FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Comment créer une présentation PPT par VBA ?
- Comment modifier une présentation ?
- Comment masquer totalement powerPoint pendant l'exécution d'une macro via VBA Excel ?
- Comment changer la source d'un classeur lié, dans une présentation powerPoint ?
- Comment mettre à jour les données d'un graphique Excel incorporé dans une présentation ?
- Comment insérer des diapositives provenant d'une autre présentation fermée dans la présentation ouverte ?
L'exemple proposé nécessite d'activer la référence "Microsoft Powerpoint x.x Object Library".
Dans l'éditeur de macros :
Menu Outils
Références
Cochez la ligne "Microsoft Powerpoint x.x Object Library".
Cliquez sur OK pour valider.
(x.x dépend de la version d'Office installée sur votre poste)
Sub
NouvellePresentation
(
)
Dim
PptApp As
PowerPoint.Application
Dim
PptDoc As
PowerPoint.Presentation
Dim
Diapo As
PowerPoint.Slide
Dim
Sh As
PowerPoint.Shape
Dim
Cs1 As
ColorScheme
Dim
NbShpe As
Integer
Set
PptApp =
CreateObject
(
"Powerpoint.Application"
)
Set
PptDoc =
PptApp.Presentations.Add
With
PptDoc
'--- Ajoute un Slide
.Slides.Add
Index:=
1
, Layout:=
ppLayoutBlank
'Crée une zone de texte (AddLabel)
Set
Sh =
.Slides
(
1
).Shapes.AddLabel
(
Orientation:=
msoTextOrientationHorizontal, _
Left
:=
100
, Top:=
100
, Width:=
150
, Height:=
60
)
'insère la valeur de la Cellule A1 dans une zone de texte
Sh.TextFrame.TextRange.Text
=
Range
(
"A1"
)
'Modifie la couleur du texte
Sh.TextFrame.TextRange.Font.Color
=
RGB
(
255
, 100
, 255
)
'--- Ajoute un nouveau slide et le positionner en 2eme position
Set
Diapo =
.Slides.Add
(
Index:=
2
, Layout:=
ppLayoutBlank)
'copie le 1er graphique contenu dans la feuille Excel active
ActiveSheet.ChartObjects
(
1
).Copy
'collage dans la 2eme diapositive
Diapo.Shapes.Paste
'Compte le nombre de shapes dans la diapositive :
'le dernier objet inséré correspond à l'index le plus élevé
NbShpe =
Diapo.Shapes.Count
'Renomme et met en forme l'objet collé
With
Diapo.Shapes
(
NbShpe)
.Name
=
"monGraph"
'personnalise le nom
.Left
=
150
'définit la position horizontale dans le slide
.Top
=
100
'définit la position verticale dans le slide
.Height
=
300
'hauteur
.Width
=
400
'largeur
End
With
'--- Modifie la couleur de fond dans les différents Slides
Set
Cs1 =
.ColorSchemes
(
3
)
Cs1.Colors
(
ppBackground).RGB
=
RGB
(
225
, 233
, 200
)
.SlideMaster.ColorScheme
=
Cs1
End
With
'Sauvegarde la présentation
'dans le meme répertoire que le classeur excel contenant la macro.
PptDoc.SaveAs
Filename:=
ThisWorkbook.Path
&
"\"
&
"NouvellePresentation.ppt"
'ferme la presentation
PptDoc.Close
'ferme powerpoint
PptApp.Quit
MsgBox
"Opération terminée."
End
Sub
La procédure montre comment coller une plage de cellules dans une diapositive et insérer le contenu d'une cellule dans une zone de texte de la présentation.
Sub
ModifierPresentationExistante
(
)
Dim
PptApp As
PowerPoint.Application
Dim
PptDoc As
PowerPoint.Presentation
Set
PptApp =
CreateObject
(
"Powerpoint.Application"
)
PptApp.Visible
=
True
Set
PptDoc =
PptApp.Presentations.Open
(
"C:\LaPresentation.ppt"
)
With
PptDoc
'copie la plage de cellules dans la feuille Excel active
Feuil1.Range
(
"B1:H5"
).Copy
'Effectue un collage dans la 2eme diapositive
.Slides
(
2
).Shapes.Paste
With
.Slides
(
2
).Shapes
(
.Slides
(
2
).Shapes.Count
)
.Name
=
"monTableau"
'Renomme l'objet collé
.Left
=
150
'position horizontale dans le slide
.Top
=
100
'position verticale dans le slide
.Height
=
300
'hauteur
.Width
=
400
'largeur
End
With
'insère le contenu de la cellule A1 dans la deuxième zone de texte,
'du 3eme slide
.Slides
(
3
).Shapes
(
2
).TextFrame.TextRange.Text
=
Range
(
"A1"
)
'sauvegarde la présentation
.Save
End
With
'ferme la présentation
PptDoc.Close
'ferme powerpoint
PptApp.Quit
End
Sub
Indiquez l'argument WithWindow
:=
msoFalse lors de l'ouverture de la présentation.
Cette solution ne permet pas l'utilisation ensuite de la méthode Select lors de la manipulation du fichier PPT.
Set
pptDoc =
pptApp.Presentations.Open
(
"C:\maPresentation.ppt"
, WithWindow:=
msoFalse)
Dim
pwrPoint As
PowerPoint.Application
Dim
Prez As
PowerPoint.Presentation
Dim
targetMaj As
String
Dim
Forme As
PowerPoint.Shape
Dim
Diapo As
PowerPoint.Slide
Presentation =
ThisWorkbook.Path
&
"\maPresentation.ppt"
'Le nouveau classeur lié
targetMaj =
ThisWorkbook.Path
&
"\monClasseurMisAJour.xls"
Set
pwrPoint =
CreateObject
(
"PowerPoint.Application"
)
pwrPoint.Visible
=
msoTrue
Set
Prez =
pwrPoint.Presentations.Open
(
Presentation)
'Boucle sur les Slide de la présentation
For
Each
Diapo In
Prez.Slides
'Boucle sur les formes
For
Each
Forme In
Diapo.Shapes
'Vérifie s'il s'agit d'un objet lié
If
Forme.Type
=
msoLinkedOLEObject Then
'Vérifie si l'objet lié est un objet Excel
If
Forme.OLEFormat.progID
=
"Excel.Sheet.8"
Then
'Modifie la source
Forme.LinkFormat.SourceFullName
=
targetMaj
'Mise à jour
Forme.LinkFormat.Update
End
If
End
If
Next
Next
Prez.Save
'ferme la présentation
Prez.Close
'ferme powerpoint
pwrPoint.Quit
Sub
MAJ_graphiqueDansPresentation
(
)
Dim
appPPT As
PowerPoint.Application
Dim
Sh As
PowerPoint.Shape
Dim
Gr As
Workbook
Set
appPPT =
CreateObject
(
"PowerPoint.Application"
)
appPPT.Visible
=
msoTrue
appPPT.Presentations.Open
"C:\maPresentation.ppt"
'Copie une plage de cellules dans la feuille active
'Ces données vont être collées dans le classeur incorporé, dans ppt, servant
'de source pour le graphique.
ActiveSheet.Range
(
"A1:G10"
).Copy
'Le classeur incorporé est dans le 1er Slide
With
appPPT.ActivePresentation.Slides
(
1
)
'Boucle sur les formes pour retrouver l'objet Excel
For
Each
Sh In
.Shapes
'Verifié s'il s'agit d'un objet incorporé
If
Sh.Type
=
msoEmbeddedOLEObject Then
'Vérifie s'il s'agit d'une feuille graphique
If
Sh.OLEFormat.progID
=
"Excel.Chart.8"
Then
Set
Gr =
Sh.OLEFormat.Object
'Colle les données dans la Feuil1 du classeur incorporé
'La feuil1 contient la source de données pour le graphique
Gr.Sheets
(
"Feuil1"
).Range
(
"A1"
).PasteSpecial
'réactive la première feuille du classeur incorporé
'(Le graphique est situé dans ce 1er onglet)
Gr.Sheets
(
1
).Activate
End
If
End
If
Next
Sh
End
With
End
Sub
Sub
piloterPowerPoint
(
)
Dim
Ppa As
PowerPoint.Application
Dim
Ppp1 As
PowerPoint.Presentation
Set
Ppa =
New
PowerPoint.Application
Ppa.Visible
=
True
'Ouverture présentation
Set
Ppp1 =
Ppa.Presentations.Open
(
Filename:=
"C:\maPresentation1.ppt"
)
'expression.InsertFromFile(CheminPresentationSource, Index, SlideDebut, SlideFin)
'---------------------------------------------------------------
'Cet exemple montre comment insérer les diapositives 1 à 4 provenant
'de "PresentationSource.ppt" à la suite de la diapositive 2, dans
'la présentation "maPresentation1.ppt".
Ppp1.Slides.InsertFromFile
"C:\PresentationSource.ppt"
, 2
, 1
, 4
End
Sub