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
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.
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 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.
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.
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.
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.
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ù ??
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é...
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 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 :
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 :
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.
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.
________________________
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 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.
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 ;-[