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é :

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
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.
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
OpenClipboard 0
EmptyClipboard
CloseClipboard
(source)

J'ai également tenté avec :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
application.cutcopymode=false
Tout ceci sans succès

J'espère avoir été clair, et bien sûr désolé si cette question a déjà été évoquée ici.