Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Contribuez
Contribuez Placez ici vos codes, sources, trucs et astuces que vous souhaitez partager avec les membres du club.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2006, 18h23   #1
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
Par défaut [VBA Excel] Piloter PowerPoint

Les exemples proposés nécéssitent 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.)





créer une présentation PPT
********************


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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



Modifier une présentation
********************


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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



Comment masquer totalement powerPoint pendant l'éxécution d'une macro.
****************************************

Indiquez l'argument WithWindow:=msoFalse lors de l'ouverture de la présentation.
Cette solution ne permet pas l'utilisation de la méthode Select lors de la manipulation du fichier PPT.


Code :
Set pptDoc = pptApp.Presentations.Open("C:\maPresentation.ppt", WithWindow:=msoFalse)




Changer la source d'un classeur lié, dans une présentation powerPoint
********************************************


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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



Mettre à jour les données d'un graphique Excel incorporé dans une présentation
*******************************************


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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



Insérer des diapositives provenant d'une autre présentation (fermée) dans la présentation ouverte
*********************************************


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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



Calculer la durée d'une présentation dont les Slides sont paramétrés pour défiler automatiquement
*********************************************

L'influence éventuelle des vitesses et style de transition n'est pas prise en compte


Code :
1
2
3
4
5
6
7
8
    Dim i As Integer
    Dim x As Long
 
    For i = 1 To Prez.Slides.Count
        x = x + Prez.Slides(i).SlideShowTransition.AdvanceTime
    Next i
 
    MsgBox x
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2007, 22h07   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par SilkyRoad
.....


Changer la source d'un classeur lié, dans une présentation powerPoint
********************************************

....
il ne manquerai pas la sauvegarde finale de la présentation ..?

Code :
1
2
3
4
5
6
7
8
9
10

...
Next
 
Prez.Save 
'ferme la présentation
Prez.Close
'ferme powerpoint
pwrPoint.Quit
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 05h14   #3
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
bonjour Bbil

OOuppss... Bien vu ... ;o)


michel
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h38.


 
 
 
 
Partenaires

Hébergement Web