Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2011, 09h02   #1
Invité de passage
 
Homme
ingénieur d'études
Inscription : juin 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : ingénieur d'études
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 5
Points : 2
Points : 2
Par défaut Suite : exporter des fuilles graphiques

Bonjour à tous,
Le but de la macro est d'exporter les graphiques d'un classeur C1 dans un nouveau classeur C2 en coupant les liens.
Je procède par collage spécial en métafichier amélioré.

Tout va bien jusqu'à la ligne 26 ouj'ai un problème sur la méthode pastespécial obtenu avec l'enregistreur de macro : La méthode PastSpecial de la classe worksheet a échoué.

Je ne comprend pas d'où vient cette erreur
Est-il possible de procéder de cette manière, ou est-il existe-t-il une autre méthode plus "conventionnelle" pour couper les liens d'un graphique?

Code :
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
 
Public Sub exporterGraphiques()
Dim c1                        As Workbook
Dim c2                        As Workbook
Dim sh                        As Chart
 
Dim compteur
 
Set c1 = ThisWorkbook
 Workbooks.Add 1
    Set c2 = ActiveWorkbook
 
    c1.Activate
    compteur = 0
    For Each sh In Charts
    compteur = compteur + 1
    c2.Activate
    Sheets.Add before:=Sheets(1)
    ActiveSheet.Name = "Graph" & compteur
    c1.Activate
    sh.Activate
    If Left(sh.Name, 5) = "Graph" Then
    ActiveChart.ChartArea.Copy
    c2.Sheets(1).Activate
    Range("a1").Select
    ActiveSheet.PasteSpecial Format:="Image (métafichier amélioré)", Link:=False, DisplayAsIcon:=False
 
     End If
     Next
 
 
End Sub
Merci pour votre aide
Arapaima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 11h01   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 858
Points : 1 858
Bonjour voici un code qui devrait marcher. C'est surtout je pense au niveau de la copie qu'il y avait un problème.
J'en profite pour te signaler de te méfier un peu de l'enregistreur de macro, c'est bien pour trouver des fonctions que tu ne connais pas, mais ensuite, il vaut mieux réécrire le code plus proprement en évitant des select dans tous les sens.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Sub exporterGraphiques()
    Dim c1 As Workbook
    Dim c2 As Workbook
    Dim sh As Chart
    Dim f As Worksheet
    Dim compteur
 
    Set c1 = ThisWorkbook
    Set c2 = Workbooks.Add(1)
 
    compteur = 0
 
    For Each sh In c1.Charts
       compteur = compteur + 1
 
       Set f = c2.Sheets.Add(before:=c2.Sheets(1))
       f.Name = "Graph" & compteur
 
       If Left(sh.Name, 5) = "Graph" Then
           sh.CopyPicture Appearance:=xlScreen, Format:=xlPicture
           f.PasteSpecial Format:="Image (métafichier amélioré)", Link:=False, DisplayAsIcon:=False
       End If
    Next sh
End Sub
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/11/2011, 11h21   #3
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
En travaillant avec des variables objet et sans les Select/Activate, tu aurais mois de problèmes.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub ExporterGraphiques()
Dim Wbk As Workbook
Dim Sh As Worksheet
Dim Ch As Chart
Dim i As Integer
 
Application.ScreenUpdating = False
Set Wbk = Workbooks.Add(1)
For Each Ch In ThisWorkbook.Charts
    If Left(Ch.Name, 5) = "Graph" Then
        i = i + 1
        Set Sh = Wbk.Worksheets.Add(before:=Wbk.Sheets(1))
        Sh.Name = "Graph" & i
        Ch.ChartArea.Copy
        Sh.PasteSpecial Format:="Image (métafichier amélioré)", Link:=False, DisplayAsIcon:=False
    End If
Next Ch
Wbk.SaveAs Filename:=ThisWorkbook.Path & "\RecapGraph", FileFormat:=xlNormal
Wbk.Close False
Set Wbk = Nothing
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/11/2011, 14h18   #4
Invité de passage
 
Homme
ingénieur d'études
Inscription : juin 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : ingénieur d'études
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 5
Points : 2
Points : 2
Merci pour vos réponses !
Arapaima est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h34.


 
 
 
 
Partenaires

Hébergement Web