XL 2010 VBA pour powerpoint

desatan

XLDnaute Occasionnel
Bonjour à tous,

J'ai 6 ou 7 fichiers powerpoint avec des tableaux et des graphiques en liens avec des fichiers Excel.

J'aimerai une macro ou VBA qui me copierait tous mes fichiers powerpoint dans un seul en supprimant tous les liens.

Quelqu'un peut il m'aider ?

Merci par avance.
 

desatan

XLDnaute Occasionnel
Bonjour Chris,

Merci pour ta contribution. Je sais comment retirer les liens dans ppt.

Ma demande consiste à lancer un VBA dans Excel pour copier plusieurs ppt en un seul tout en retirant les liens présent dans chaque ppt.

Merci par avance.
 

chris

XLDnaute Barbatruc
Re

Devrait être sur le forum autres applications Office car ceci est un code Powerpoint

Pour une raison obscure, le saveas plante alors qu'en mode debug il passe. Sans doute la nécessité d'un délai mais que je m'explique pas : si les VBIstes chevronnées peuvent regarder...

A placer dans une présentation vierge ou un add on : traite tout les ppt d'un dossier en collant les contenus à la suite du premier ouvert. Il faudra peut-être adapter ce point.
Adpater aussi le chemin et nom de fichier résultant (une fois solutionné le PB énoncé ci-dessus)

Code:
Option Explicit
Sub CompilerPPT()
Dim PPTfile As String, chemin As String, NomCompilation As String, Z As Integer, x As Integer

chemin = "E:\ZZ_Tempo\Forums\test2\"
NomCompilation = chemin & "Tout.pptx"

If Dir(NomCompilation) <> "" Then Kill NomCompilation

PPTfile = Dir(chemin & "*.pptx")
x = 0

Do While PPTfile <> ""
    x = x + 1
    Presentations.Open chemin & PPTfile
    Call DelateLinks(ActivePresentation)
    If x > 1 Then
        Z = ActivePresentation.Slides.Count
        ActivePresentation.Slides.Range(Array(1, Z)).Copy
        ActivePresentation.Close
        ActivePresentation.Slides.Paste
    End If
    PPTfile = Dir
Loop
'Ligne ne fonctionne pas
'ActivePresentation.SaveAs NomCompilation, ppSaveAsDefault
End Sub

Sub DelateLinks(pptPres As Presentation)
Dim pptSlide As Slide, pptShape As Shape, myFso As Object

    Set myFso = CreateObject("Scripting.FileSystemObject")
    'loop on each slides, and on each shapes

    For Each pptSlide In pptPres.Slides
        For Each pptShape In pptSlide.Shapes
            If pptShape.Type = msoLinkedOLEObject Then 'object lié
                If InStr(pptShape.LinkFormat.SourceFullName, ".xlsx") > 0 Then 'liaison Excel
                    pptShape.LinkFormat.BreakLink
                End If
            End If
        Next pptShape
    Next pptSlide

End Sub
 

desatan

XLDnaute Occasionnel
une nouvelle fois merci Chris.
Dans mon répertoire, j'ai plein de ppt.
Est il possible de modifier ton code pour que je liste seulement les ppt à prendre en compte ?

La macro plante sur : Presentations.Open chemin & PPTfile
Ensuite rien ne se passe

Merci par avance
 
Dernière édition:

chris

XLDnaute Barbatruc
Re

Il serait plus simple de mettre ceux à traiter dans un sous-dossier...

As-tu adapté le chemin à ton environnement, sans oublier le dernier \ ?

Le fichier n'est pas déjà ouvert ?

Ce sont bien des pptx ? Les contenus Excel y ont bien été importés en collage avec liaison ?

La macro tourne sur mon PC...
 

desatan

XLDnaute Occasionnel
Bonjour Chris,

Je ne peux pas mettre les fichiers dans un sous dossier, il faudrait que je puisse dire dans la macro quel fichier prendre.

Non le fichier n'est pas ouvert, oui tous des pptx et oui tous les éléments Excel ont été copiés avec liaison.

Mais dans mes pptx, il n'y a pas que des liaisons Excel, il y a aussi du texte, des images.

Ce matin, cela ne fonctionne toujours pas. Ton code, je l'ai copié dans un module, c'est bon ?

Merci par avance.
 

Discussions similaires

Réponses
15
Affichages
718

Statistiques des forums

Discussions
312 677
Messages
2 090 813
Membres
104 672
dernier inscrit
robaine salah