Problème copie graphique VBA

Bonjour,

Tout d'abord je suis désolé de ne pouvoir fournir de fichier, les données étant confidentiel.

Pour vous expliquer un peu mon fichier :

_Je réalise des feuilles excel qui sont dynamiques en fonction d'une semaine que je rentre.

Lors d'un changement de semaine, mes données dans mes tableaux sont mises à jour et mes graphique que j'ai créé le sont également.

_Ces feuilles excels me servent à la création d'une présentation powerpoint automatique qui me sort les mêmes graphiques à chaque fois avec les mises à jour du à la semaine.

J'ai malheureusement un problème que je rencontre assez souvent et dont je ne comprends pas l'origine.

Je réalise des copies de mes différents graphiques se trouvant sur mes feuilles excels par la méthode suivante :

With PptDoc

.Slides.Add Index:=1, Layout:=ppLayoutBlank

Sheets(nom_rapport).ChartObjects("Graphique_Contact").Copy
Diapo.Shapes.Paste

NbShpe = Diapo.Shapes.Count

With Diapo.Shapes(NbShpe)
          .Name = "Graphique_Contact"
          .Left = 20
          .Top = 88
          .Height = 180
          .Width = 322
End With

...

End With

Mon problème est que je rencontre souvent une erreur 1004 m'informant que la ligne

Sheets(nom_rapport).ChartObjects("Graphique_Contact").Copy

ne marche pas. Or quand je vais sur l'onglet de ce rapport et réalise juste un clic sur le graphique correspondant, je peux relancer mon programme et miracle mon erreur a disparu et ce jusqu'à l'extinction de mon ordinateur.

Le lendemain, même erreur qui recommence

Je dois donc cliquer sur CHAQUE graphique un coup pour lancer mon programme sans bug.

Quelqu'un saurait-il me dire à quoi cela est du ?

En vous remerciant.

Petit up les amis !

Si vous avez des idées sur mon problème qu'importe si elles sont justes ou fausses, n'hésiter pas à m'en faire part, que je puisse tester et vous tenir informer

Toujours personne pour aider, j'ai toujours le même problème et aucune solution

Hello Sentinelle,

A tout hasard tu as bien dans ton code ?

Worksheets("TaFeuille").Activate

Bonne journée.

nonesofar13 a écrit :

Hello Sentinelle,

A tout hasard tu as bien dans ton code ?

Worksheets("TaFeuille").Activate

Bonne journée.

Bonjour nonesofar13,

Merci de ta réponse

Je n'en ai pas mis mais faut-il vraiment activer la feuille avant chaque copie ? ( J'ai commencé le VBA il n'y a pas si longtemps )

Je testerai dés que possible.

Bonne journée

Ben en vba, il faut préciser dans quelle feuille tu travailles, voir même si plusieurs fichiers dans quel fichier tu travailles.

Donc si tu me dis que

Or quand je vais sur l'onglet de ce rapport et réalise juste un clic sur le graphique correspondant

Je pense que le code ne sait pas dans quelle feuille il doit travailler, c'est une piste .

Bonne journée.

nonesofar13 a écrit :

Ben en vba, il faut préciser dans quelle feuille tu travailles, voir même si plusieurs fichiers dans quel fichier tu travailles.

Donc si tu me dis que

Or quand je vais sur l'onglet de ce rapport et réalise juste un clic sur le graphique correspondant

Je pense que le code ne sait pas dans quelle feuille il doit travailler, c'est une piste .

Bonne journée.

Oui bien sur mais je pensais qu'avec :

Sheets(nom_rapport).ChartObjects("Graphique_Contact").Copy

le Sheets(nom_rapport) me permettait de dire justement dans quel feuille je travaille

Oui c'est vrai.

Il faut aussi savoir que plusieurs graphique ont le même nom dans des feuilles différentes mais dans le même book, je me demandais si ça ne pouvait pas venir de là également.

Oui je n'ai pas le fichier disponible pour le moment mais je te tiens au courant.

Encore merci.

Bonne journée !

Yes

Regarde ce tutoriel http://www.gcexcel.com/copier-des-graphiques-de-excel-vers-powerpoint/

si tu l'as pas déjà fait avec ce code ci-dessous.

'-----------------------------------------------------
' L'utilisation de la macro requiert l'ajout de la référence à Microsoft Powerpoint Library
' 1. Aller dans Outils > Références
' 2. Naviguer dans la liste et sélectionner Microsoft PowerPoint X.0 Object Library
'    (où X dépend de la version Office que vous utilisez)
' 3. Cocher la boîte et cliquer OK

'------------------
' Autre méthode :
' Il est aussi possible d'ajouter la référence à Microsoft PowerPoint Library à l'aide
' de la macro suivante. Le chemin d'accès doit être modifié selon la version Office que
' vous utilisez.
' Cette méthode peut être utilise si pour une raison quelconque vous n'avez pas accès
' à Outils > Références.

Sub AjoutReReference()
   ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files (x86)\Microsoft Office\Office15\MSppt.OLB"
   'Office15 = Office 2013
   'Office12 = Office 2007
End Sub
'------------------

' Ajouter la référence à à Microsoft Powerpoint Library
Sub GraphExcel_vers_PowerPoint()
   Dim sPPTFileName As String
   Dim ppApp As PowerPoint.Application
   Dim ppPres As PowerPoint.Presentation
   Dim cht As Excel.ChartObject

   'Sélectionner le fichier PowerPoint à ouvrir
   sPPTFileName = GetFileName

   'Ouvrir PowerPoint
   Set ppApp = CreateObject("PowerPoint.Application")
   ppApp.Visible = msoTrue
   Set ppPres = ppApp.Presentations.Open(sPPTFileName)
   ppApp.ActiveWindow.ViewType = ppViewSlide

   ' >>>>>>>>
   'Appel de la fonction pour copier graphique dans PowerPoint
   'Graphique no1
   Set cht = ThisWorkbook.Sheets("Ventes").ChartObjects("Graphique 1")
   Call ChartsToPPT(ppPres, 3, cht, 100, 150, 400, 400)

   'Graphique no2
   Set cht = ThisWorkbook.Sheets("Ventes").ChartObjects("Graphique 2")
   Call ChartsToPPT(ppPres, 4, cht, 100, 150, 400, 400)

   'Ajouter d'autres graphique au besoin...
   ' >>>>>>>>

   Set cht = Nothing
   Set ppPres = Nothing
   Set ppApp = Nothing
End Sub

' Code pour copier le graphique spécifié dans la présentation
Sub ChartsToPPT(oPPT As PowerPoint.Presentation, iSlideNo As Integer, _
                cht As ChartObject, iTop As Integer, iLeft As Integer, iWidth As Integer, iHeight As Integer)

   Dim ppSlide As PowerPoint.Slide
   Dim pSh As PowerPoint.Shape

   'Choisir la diapositive
   Set ppSlide = oPPT.slides(iSlideNo)

   cht.Copy
   With ppSlide
      .Shapes.Paste
      Set pSh = .Shapes(.Shapes.Count)  '.Select  'Select the last shape
   End With

   'Position et dimensions
   With pSh
      .Top = iTop
      .Left = iLeft
      .Width = iWidth
      .Height = iHeight
   End With
End Sub

Function GetFileName() As String
   Dim sFileName As Variant
   Dim sFileFilter As String, sTitle As String

   'sFileFilter:="Excel Files (*.xls), *.xls", Title:="Please select a file"
   sFileFilter = "PowerPoint Files (*.ppt*), *.ppt*"
   sTitle = "Please select a file"
   sFileName = Application.GetOpenFilename(sFileFilter, , sTitle)
   If sFileName <> False Then
      GetFileName = sFileName
   End If
End Function

Bon w-k

Bonjour,

Merci à toi pour tes réponses et désolé de répondre aussi tard, beaucoup de boulot sur le feu et pas eu le temps de répondre plus tôt.

J'ai essayé d'activé ma feuille avec :

Sheets(nom_rapport).Activate

Mais aucun changement malheureusement :/

Ni avec Select à la place d'Activate.

Je me lance donc dans une idée d'activer chaque graphique avant de l'utiliser ( visiblement ça pourrait marcher ) et si celle-ci ne fonctionne pas dans une refonte de mon code pour arriver à quelque chose comme ce que tu m'as fournis ^^

Merci à toi, je tiens au courant dés que j'ai des nouvelles !

Rechercher des sujets similaires à "probleme copie graphique vba"