Power Point Macro pour PowerPoint 2007

Carphil

XLDnaute Nouveau
Bonjour
Je suis à la recherche d'une macro pour power point 2007
Je voudrais copier le texte d'une case excel dans une zone texte de power point pour faire une présentation
J'ai 50 zones de texte à remplir correspondantes à autant de cases Excel
Je souhaite que cela se fasse en automatique car je risque d'avoir des modifications dans Excel.

Quelqu'un pourrai - t-il m'indiquer la démarche ou me dire si cette macro existe déjà

merci d'avance
 
Dernière édition:

Carphil

XLDnaute Nouveau
Re : Macro pour PowerPoint 2007

Bonjour

Voila, je joints 2 fichiers
L'idée est de transférer les infos de la 2eme colonne d'excel dans les zones texte de power point (aaaa ou bbb)
Je reproduirai la démarche autant de fois que j'ai besoin selon la présentation que je veux faire.
j'aurai un power point "Modèle" ainsi qu'un excel

merci d'avance


impossible de transferer le power point???
 

Pièces jointes

  • Listing essai.xls
    27.5 KB · Affichages: 129
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Bonjour Carphil, Nono

Ci-joint un exemple où les variables sont nommées ${NomVariable} dans le modèle powerpoint.
On retrouve dans le fichier excel une feuille contenant le chemin du modèle powerpoint et un tableau listant les variables avec leur valeur. Il y a également une macro qui permet de générer la présentation.

A+
 

Pièces jointes

  • Exemple.zip
    41.5 KB · Affichages: 148
  • Exemple.zip
    41.5 KB · Affichages: 139
  • Exemple.zip
    41.5 KB · Affichages: 128

mromain

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Bonjour Carphil, Nono, le forum

Le besoin initial de Carphil m'a inspiré, donc du coup, je partage :).

Ci-joint une autre version qui permet de renvoyer vers PowerPoint deux types de variables :
  • des variables textes - qui comme dans l'exemple précédent sont représentées dans le modèle par le texte ${NomVariable}.
  • des variables zones - représentées dans le modèle par des formes contenant uniquement le nom de la varible dans le formalisme $Z{NomVariable}.
    Les zones peuvent être de deux types :
    • une plage de cellule - définie par le nom de la feuille et l'adresse de la zone. Il est possible d'utiliser les références structurées des tableaux, mais avec leur notation anglaise.
      Un tableau HTML est renvoyé dans le modèle PowerPoint à la place de la forme, centré et réduit si nécessaire.
    • un graphique - défini par le nom de la feuille et le nom du graphique.
      Une image est renvoyée dans le modèle PowerPoint à la place de la forme, centrée et réduite si nécessaire.

Le fichier zip contient un modèle de présentation PowerPoint et un fichier Excel avec des données et une analyse bidons.
Le fichier Excel est composé de :
  • une feuille de données ;
  • une feuille d'analyse contenant des tableaux et graphiques à renvoyer vers PowerPoint et un bouton permettant de générer la présentation ;
  • une feuille cachée (FeuilInt) utile à l'analyse (listes de validation et source de données d'un graphique) ;
  • une feuille ParamPPT contenant le chemin du modèle PowerPoint (à adapter) ainsi que les variables du modèle avec leur valeur. Une fois paramétrée, cette feuille peut être cachée.
    Cette feuille contient également le code permettant de générer la présentation. Il y a une fonction publique (GenererPPT) qui génère la présentation et renvoie l'objet Ce lien n'existe plus pour un éventuel traitement supplémentaire (enregistrer, générer un pdf, envoyer par mail...).

Le code a été fait sur Office 2013 et testé uniquement dans cet environnement.
Pour mettre en œuvre cette solution dans un autre classeur, il suffit de copier la feuille ParamPPT dans le classeur concerné, la paramétrer et utiliser la fonction GenererPPT.

A+



Edit (v2) : Correction d'un bug (merci Chris et Nono pour vos essais)

Il semble impossible de coller une plage de cellule au format HTML par macro sur Powerpoint 2010. Si cette action échoue, la plage de cellule sera collée en tant qu'image (on perd donc la possibilité d'éditer les données après coup...).
 

Pièces jointes

  • ExemplePPT_v2.zip
    590.7 KB · Affichages: 198
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Bonsoir Mickaël, Carphil et le futur fil

Trés beau travail ,
Merci pour le partage , le ptit mode d'emploi, le code , les commentaires et le kit d'essai.
C'est pas la premiere fois que tu t'y piques , mais là , c'est royal.
Encore quelques lignes à décortiquer , j'y retourne1
 

chris

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Bonjour

C'est vraiment du bel ouvrage :).

Il y a de quoi décortiquer pour comprendre et apprendre (je ne savais même pas qu'on pouvait passer des paramètres à MsQuery :eek:).

Marche impec sur 2013.

Sur 2010 plante sur le collage de graphique ou tableau sur la ligne
Set newShape = pptShape.Parent.Shapes.PasteSpecial....

le collage se fait mais c'est bien sur cette ligne qu'il se produit.
Plantage venant de PowerPoint de toute évidence car le debug ramène au code du bouton qui appelle la procédure.

J'essaye de voir si je trouve le pourquoi...
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Bonjour Chris, Nono, le forum

Merci pour le retour Chris :)

Les paramètres dans MS-Query sont très pratique, surtout avec l'actualisation automatique de la requête lorsque le paramètre change. Il me semble que connais un peu PowerPivot ; sais-tu s'il est possible de faire l'équivalent avec ? (utiliser une cellule d'Excel comme paramètre pour une requête vers une source de donnée)
Par contre, il est impossible de renvoyer une requête avec des paramètres vers un TCD (uniquement vers un tableau).

Concernant le plantage sur 2010, je ne pourrai malheureusement pas tester...
Normalement, la méthode PasteSpecial renvoie un objet ShapeRange dont on récupère le premier item (le (1) après le PasteSpecial(....)).
Pour essayer de voir où ça plante, il serait intéressant de remplacer la ligne par ce code et voir le résultat :
VB:
'Dim tmpObj As ShapeRange
Dim tmpObj As Object

    On Error Resume Next
     Set tmpObj = pptShape.Parent.Shapes.PasteSpecial(....)
     Debug.Print "tmpObj Is Nothing = " & tmpObj Is Nothing
     Debug.Print "TypeName(tmpObj) = " & TypeName(tmpObj)
     Debug.Print "tmpObj.Count = " & tmpObj.Count
    
     Set newShape = tmpObj.Item(1)
     Debug.Print "newShape Is Nothing = " & newShape Is Nothing
     Debug.Print "TypeName(newShape) = " & TypeName(newShape)
    On Error GoTo 0
Si jamais tu as 5 minutes pour tester... :rolleyes:

A+
 

chris

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Re

J'ai dû abandonner en cours, boulot oblige mais la 1ère différence est que le paste est inutile : copy colle déjà une image dans le PPT (vous avez fit bizarre...). Reste à trouver comment identifier cette nouvelle shape.
Je m'y remet dès que je peux (ce soir peut-être).

Pour powerpivot, je n'ai pas de réponse toute faite mais en plaçant les cellules (sous forme de tableau (copie éventuelle)) dans le modèle de données, sachant qu'on peut éditer les requêtes (je le fais pour les unions) il y a peut-être une solution.
Je verrai ça aussi dès que j'ai un moment mais sans doute pas avant la fin de semaine.
 

mromain

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Merci chris.

Ne t'en fais pas, il n'y a aucune urgence :)
Mais, c'est vrai que je me suis posé assez souvent la question pour PowerPivot (surtout depuis que MS-Query est déprécié). J'ai recherché, mais je ne connais pas très bien le sujet...

...copy colle déjà une image dans le PPT...
C'est vrai que c'est bizarre...
Du coup, il est peut-être possible de contourner le problème avec ce code vu que la nouvelle Shape doit être la dernière de la collection :
VB:
On Error Resume Next
 Set newShape = pptShape.Parent.Shapes.PasteSpecial(...)(1)
 If newShape Is Nothing Then Set newShape = pptShape.Parent.Shapes(pptShape.Parent.Shapes.Count)
On Error GoTo 0

A+
 

mromain

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Bonjour à Tous , Chris, MRomain

La correction fonctionne à merveille pour Excel 2010,

MErci
Bonsoir Nono, et merci pour l'essai

C'est quand même de la bidouille... et j'aimerai bien comprendre avant de corriger le fichier.
Je me demande si ça ne vient pas des paramètres de la méthodes PasteSpecial. Est-ce que tu peux essayer ce code depuis PowerPoint 2010 et me renvoyer le résultat stp ?
VB:
Sub test()
    On Error Resume Next
     Debug.Print "PpPasteDataType.ppPasteBitmap = " & PpPasteDataType.ppPasteBitmap
     Debug.Print "PpPasteDataType.ppPasteDefault = " & PpPasteDataType.ppPasteDefault
     Debug.Print "PpPasteDataType.ppPasteEnhancedMetafile = " & PpPasteDataType.ppPasteEnhancedMetafile
     Debug.Print "PpPasteDataType.ppPasteGIF = " & PpPasteDataType.ppPasteGIF
     Debug.Print "PpPasteDataType.ppPasteHTML = " & PpPasteDataType.ppPasteHTML
     Debug.Print "PpPasteDataType.ppPasteJPG = " & PpPasteDataType.ppPasteJPG
     Debug.Print "PpPasteDataType.ppPasteMetafilePicture = " & PpPasteDataType.ppPasteMetafilePicture
     Debug.Print "PpPasteDataType.ppPasteOLEObject = " & PpPasteDataType.ppPasteOLEObject
     Debug.Print "PpPasteDataType.ppPastePNG = " & PpPasteDataType.ppPastePNG
     Debug.Print "PpPasteDataType.ppPasteRTF = " & PpPasteDataType.ppPasteRTF
     Debug.Print "PpPasteDataType.ppPasteShape = " & PpPasteDataType.ppPasteShape
     Debug.Print "PpPasteDataType.ppPasteText = " & PpPasteDataType.ppPasteText
     
     Debug.Print "MsoTriState.msoCTrue = " & MsoTriState.msoCTrue
     Debug.Print "MsoTriState.msoFalse = " & MsoTriState.msoFalse
     Debug.Print "MsoTriState.msoTriStateMixed = " & MsoTriState.msoTriStateMixed
     Debug.Print "MsoTriState.msoTriStateToggle = " & MsoTriState.msoTriStateToggle
     Debug.Print "MsoTriState.msoTrue = " & MsoTriState.msoTrue
    On Error GoTo 0
End Sub
Ça permettrai de contrôler ce point.

Merci encore et à +
 

chris

XLDnaute Barbatruc
Re : Macro pour PowerPoint 2007

Re

Vérification faite, le problème ne se pose pas sur les graphiques mais sur les range.

Après recherche sur le net, il semble que la copie de range pose problème. Pour l'instant je n'ai pas trouvé.

Les corrections évitent le plantage mais les tableaux ne sont pas collés...

Edit : nous nous sommes croisés.

Je vais tester le bout de code et te dis
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 897
Membres
101 833
dernier inscrit
sandra25