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 WithMon problème est que je rencontre souvent une erreur 1004 m'informant que la ligne
Sheets(nom_rapport).ChartObjects("Graphique_Contact").Copyne 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").ActivateBonne journée.
nonesofar13 a écrit :Hello Sentinelle,
A tout hasard tu as bien dans ton code ?
Worksheets("TaFeuille").ActivateBonne 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").Copyle 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
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 FunctionBon 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).ActivateMais 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 !