Bonjour à tous !
J'utilise un classeur Excel composé d'une dizaine de feuilles. Sur chaque feuille "s'empilent" verticalement un nombre plus ou moins important de graphiques.
J'ai créé une procédure VB qui se charge de parcourir chaque feuille du classeur, et de copier/coller chaque graphique sur un document Powerpoint (1 graphique = 1 diapo). Mon code semble fonctionner relativement bien, mais je rencontre un problème pour certains graphiques présents sur des feuilles qui en contiennent beaucoup.
Ainsi, l'une des feuilles du classeur (qui n'est pas la dernière parcourue dans la procédure) contient 101 graphiques, et dans l'exécution de la procédure, les 33 derniers (en partant du haut de la feuille) semblent être copiés dans Powerpoint, mais y apparaissent sous la forme d'une image vide (je procède à un collage spécial). Les graphiques des feuilles suivantes se copient correctement.
Je rajouterai que parmi les graphiques de la feuille en question, le dernier copié avant ceux qui donnent des images vides n'est pas copié correctement non plus. Seule la partie haute du graphique apparaît dans l'image résultante de la copie sur Powerpoint.
Voici un extrait du code VBA utilisé :
Ma principale piste pour le moment est un éventuel problème de presse-papier (je copie au total environ 260 graphiques). Lorsque je limite l'exécution de la procédure au parcours de la feuille qui pose problème, tout se passe bien lors de la copie pour les graphiques qui posaient problème précédemment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 ' Déclarations Dim PptApp As PowerPoint.Application Dim PptDoc As PowerPoint.Presentation Dim PptSlide As PowerPoint.Slide Dim PptShape As PowerPoint.Shape ' Ouverture Powerpoint Set PptApp = New PowerPoint.Application PptApp.Visible = True ' Ouverture du document powerpoint à modifier Set PptDoc = PptApp.Presentations.Open(nom_fichier) ' Initialisation de l'index diapo qui marque le début de la copie dans Powerpoint index_diapo = x ' Pour chaque feuille du classeur For i = 0 nb_feuilles ' Sélection de la feuille Sheets(i).Select ' Pour chaque graphique de la feuille For Each graphique In ActiveSheet.ChartObjects ' Copie le graphique graphique.Activate ActiveChart.ChartArea.Select ActiveChart.ChartArea.Copy ' Création d'une nouvelle diapo dans Powerpoint PptApp.Activate PptApp.ActiveWindow.ViewType = ppViewSlide Set PptSlide = PptDoc.Slides.Add(index_diapo, ppLayoutLargeObject) ' Sélection de la zone de la diapo destinée à recevoir le graphique PptSlide.Select PptSlide.Shapes(1).Select ' Collage du graphique dans la nouvelle diapo PptApp.ActiveWindow.View.PasteSpecial (ppPasteMetafilePicture) ' Incrémentation de l'index diapo index_diapo = index_diapo + 1 Next Next
Néanmoins, j'ai du mal à comprendre pourquoi l'exécution complète peut poser problème sur les 33 dernières copies d'une feuille alors qu'elle ne rencontre aucun souci pour les feuilles qui suivent.
Dans le sens d'un problème de presse-papier, j'ai tenté de le vider avant chaque copie de graphique avec :
(source)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4OpenClipboard 0 EmptyClipboard CloseClipboard
J'ai également tenté avec :
Tout ceci sans succès
Code : Sélectionner tout - Visualiser dans une fenêtre à part application.cutcopymode=false
J'espère avoir été clair, et bien sûr désolé si cette question a déjà été évoquée ici.
Partager