Copier coller tableau d'excel à Powerpoint

Raitensama95 - 23 févr. 2013 à 21:54
 Raitensama95 - 25 févr. 2013 à 20:50
Bonsoir J'ai un problème avec mon code VBA.
Je cherche à faire évoluer dynamiquement un tableau Excel et le coller dans une présentation existante Powerpoint (pour faire simple en réalité le code est un peu plus complexe.
Je précise que je suis sur Windows 7 et sur le pack Ofooce 2007 et que j'ai bien activé la bibliothèque Microsoft Powerpoint 12.0 Object Library.
Voici mon code :

Sub Test()

' On déclare une variable de type Application PowerPoint
Dim Max As Integer
Dim ppt As PowerPoint.Application
Set ppt = CreateObject("PowerPoint.Application")

'On détermine la dernière cellule du tableau excel
Range("a1").Select
fin = Selection.End(xlDown).Row - 1

' Indispensable, sinon il ne peut pas ouvrir de fichier (Erreur)
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:="C:\Users\Raiten-sama\Desktop\Présentation Test.ppt")


'On Créé notre tableau Excel que l'on fait varier dynamiquement avec le nombre de ligne

For i = 1 To fin Step 2
ActiveSheet.Range("A1").Activate
Range("E1").Value = " • " + Cells(i, 1).Value
Range("E2").Value = " • " + Cells(i, 2).Value
Range("E3").Value = " • " + Cells(i, 3).Value
Range("E4").Value = " • " + Cells(i, 4).Value
Range("F1").Value = " • " + Cells(i + 1, 1).Value
Range("F2").Value = " • " + Cells(i + 1, 2).Value
Range("F3").Value = " • " + Cells(i + 1, 3).Value
Range("F4").Value = " • " + Cells(i + 1, 4).Value


' On sélectionne et copie les valeurs de Excel dans Powerpoint:
ActiveSheet.Range("E1:F4").Select
Selection.Copy
ppt.ActiveWindow.View.PasteSpecial

'On resélectionne le slide suivant pour la prochaine étape
Pres.Slides(i + 1).Select

Next i


End Sub


A l'execution j'obtiens une erreur d'Automation type erreur d’exécution -2147188160(80048240)

Si vous avez une idée je suis preneur
A voir également:

19 réponses

Utilisateur anonyme
23 févr. 2013 à 22:30
Bonjour,

A l'execution j'obtiens une erreur d'Automation type erreur d’exécution -2147188160(80048240)


C'est bien beau tout cela, mais à quelle ligne ?
0
Je pense que l'erreur se situe sur cette ligne :
ppt.ActiveWindow.View.PasteSpecial
encore que le code est correcte normalement.
0
Utilisateur anonyme
23 févr. 2013 à 22:41
Bonjour,

Sur cette page, il y a un exemple de pilotage de PowerPoint par VB.net. Certaines adaptions peuvent être nécessaires pour VBA, mais le principe est le même. Le code, sur la page montre qu'ils font créer une présentation par PowerPoint; ce que toi, tu n'as pas fait.
0
Je n'ai pas besoin de créer une nouvelle présentation vu que j'en ai une avec un template existant que j'appelle via :

' 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:="C:\Users\Raiten-sama\Desktop\Présentation Test.ppt")
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
23 févr. 2013 à 22:46
Bonjour,

Je pense que l'erreur se situe sur cette ligne :
ppt.ActiveWindow.View.PasteSpecial


Exécute ton code au pas à pas (F8). Tant que tu ne sauras pas exactement quelle instruction déclenche l'erreur, ce ne sera pas mieux que l'aveugle qui guide l'aveugle.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 févr. 2013 à 22:50
Je ne travaille pas avec PowerPoint.
1) Connaît-il, LUI, la méthode PasteSpecial ? Car s'il ne la connait pas, ma foi ...
2) PasteSpecial de VBA/Excel traite et respecte des formats Excel. Si sans correspondance exacte dans PowerPont, ma foi ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
PasteSpecial de VBA existe aussi sur Powerpoint de plus ppt.ActiveWindow.View.Paste génère exactement la même erreur.
0
Utilisateur anonyme
23 févr. 2013 à 23:11
Bonjour,

Juste avant que la batterie m'abandonne.
En réponse plus spécialement à ucfoutu que je salue au poassage; encore que cela puisse en intéresser d'autres

1) Connaît-il, LUI, la méthode PasteSpecial ? Car s'il ne la connait pas, ma foi ...


Très bonne question. Et dans l'aide de VBA pour PowerPoint (2010) on voit que PasteSpecial s'applique à des objets spécifiques (View, Shape, TextRange, TextRange2).

À mon humble avis, en voulant "simplifier" son code, il a compliqué les réponses. Et puis, je trouve dommage que quand on demande quelle instruction plante, il réponde "je pense"

2) PasteSpecial de VBA/Excel traite et respecte des formats Excel. Si sans correspondance exacte dans PowerPont, ma foi ...


J'ai regardé en vitesse dans l'aide VBA de PowerPoint pour TextRange.PasteSpecial. Il y a quelques paramètres optionnels. Ils portent essentiellement sur le format des données contenues dans le presse-papier et la conservation, ou non, du lien OLE avec l'original.

Mais, comme je lui ai dit; sans la ligne qui cause l'erreur, il n'y a rien à faire.
0
En exécutant le script pas à pas la ligne qui cause l'erreur est ppt.ActiveWindow.View.PasteSpecial.
Maintenant je peux éventuellement mettre le fichier en pièce jointe si ça peut aider à débugger.
0
Utilisateur anonyme
23 févr. 2013 à 23:23
Bonjour,

PasteSpecial de VBA existe aussi sur Powerpoint de plus ppt.ActiveWindow.View.Paste génère exactement la même erreur.


Si tu ne fais pas l'effort d'exécuter ton code au pas à pas pour confirmer que l'erreur est vraiment déclenchée par le paste ou le pastespecial, tu n'auras plus aucune aide de ma part. Je vais te dire une chose "dans le blanc des yeux". J'ai repris ton code original et je l'ai fait exécuter au pas à pas. Ce n'est pas le pastespecial qui cause l'erreur chez-moi. C'est pour cela que je te dis de passer ton code au pas à pas.

Là, je ferme jusque après le souper, ou peut-être même jusque à demain.
0
Je viens de le faire et chez moi c'est bien la ligne ppt.ActiveWindow.View.PasteSpecial et le code s'éxécute jusqu'à la selection et la copie de la zone dans Excel mais bloque au moment où il faut coller sur Powerpoint. Chez toi il plante où ??
0
Utilisateur anonyme
24 févr. 2013 à 19:45
Bonjour,

J'ai réessayé hier soir. Il plantait sur le nom de fichier. J'ai ouvert PowerPoint directement et j'ai enregistré la première diapositive comme une présentation. J'ai remis le chemin d'accès en conséquence, et cela a fonctionné. J'ai aussi utilisé l'extension des présentations de PowerPoint 2010 (pptx). Je suis extrêmement perplexe et je te dois des excuses pour avoir douté...
0
Pas de soucis pour les excuses, par contre le problème que tu rencontres est le même que le mien et là on est 2 à être perplexe ;-)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 févr. 2013 à 21:11
Bon...
Comme déjà dit ; je ne travaille pas avec Powerpoint.
Il me semble cependant qu'il n'est pas vraiment adroit de faire ta copie dans Excel après avoir ouvert PowerPoint. Essaye de la faire avant l'ouverture de PowerPoint (tu seras de cette manière certain de mettre dans le presse-papier une copie de la sélection Excel).
Par ailleurs : essaye de préciser le type de ce qui est dans le presse-paper (lors du pastespecial dans PowerPoint)
genre, donc :
ppt.ActiveWindow.View.PasteSpecial DataType:=DataType:=ppPasteOLEObject, Link:=True

si DataType:=DataType:=ppPasteOLEObject ne va pas, remplace DataType:= ppPasteOLEObject par 10
Essaye ainsi d'abord.
Si ne va toujours pas , le problème vient peut-être alors du fait que la View existe déjà.
Que se passerait-il en travaillant avec une toute neuve, que tu créeraos dynamiquement, genre :
 ppt.Presentations.Add.Slides.Add Index: =1, Layout:=12 

suivi de la ligne de pastespecial ?
Voilà. Je regrette de ne pas connaître powerpoint pour aller au-delà. J'essaye de t'aider un peu à l'aveugle, sur la seule base d'un mélange de raison et d'instinct.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
24 févr. 2013 à 21:16
Bonjour,

Et si tu ouvres ta présentation à partir de PowerPoint au lieu de la faire ouvrir par ta macro et que tu essaies le reste de la macro ?

Si ta présentation est au format ppt, tu peux toujours essayer de l'ouvrir dans PPT et la réenregistrer au format pptx. Si cela fonctionne avec le format pptx mais qu'il faut que tu gardes le format ppt; il va bien falloir trouver autre chose.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 févr. 2013 à 21:17
Pardon (mais je pense que tu auras vu et corrigé toi-même) :
Lire (doigts trop gros ce soir !)
ppt.ActiveWindow.View.PasteSpecial DataType:=ppPasteOLEObject, Link:=True




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Merci pour ces indications je fais le test et je reviens vous dire si c'est bon
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 févr. 2013 à 08:20
je viens de tomber sur cet article :
Tapez le texte de l'url ici.
Il ne concerne pas la copie d'une plage de cellules, mais le principe général reste le même.
Remarques :
- pour éviter des aléas éventuels de sélection, le choix a été fait de crééer deux objets (un Excel et l'autre powerpoint). Avec le choix : inutile de n'ouvrir powerpoint qu'après la copie de Excel, puisqu'aucune confusion n'est alors possible
- le paste spécial est accompagné de la définition du format de ce qui est dans le presse-papier
- il ne s'agit là que d'un exemple (pas les mêmes objets d'origine et de destination), mais voilà le principe général.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Je voulais pas passer par là mais finalement j'ai fini par remplacer : ppt.ActiveWindow.View.PasteSpecial par
Pres.Application.Run "'Présentation Test.ppt'!Deplacer_Tableau" en mettant préalablement dans mon VBA Powerpoint le code suivant :
Sub Deplacer_Tableau()
ActiveWindow.View.Paste
End Sub

ça marche mais j'étais sur qu'on pouvait faire tout ceci dans VBA Excel ;-[
0
Rejoignez-nous