Macro Copier-Coller

allaryxavier

XLDnaute Nouveau
Bonjour,

Je suis en stage et j'utilise Excel tous les jours. Mais question "macro" et "VBA" je suis une bille! je n'ai découvert ce qu'était une macro que hier!

Bon j'ai compris le principe mais je tombe sur des messages d'erreurs incompréhensibles pour un novice comme moi!

Mon problème:

Ma première feuille "Bilan" me sert pour afficher mes différents graphiques réalisés dans les autres feuilles (ex feuille "Saisie 2008").

En feuille "Saisie 2008" je réalise deux graphiques nuage de points.

Je réalise une macro "copier-coller" du premier graphique et je l'affecte à un bouton présent en feuille "bilan".

Mais voilà le message d'erreur qui s'affiche: Erreur d'execution 1004, Impossible de lire la propriété ChartObjects de la classe Worksheet.

Voici le code VBA.

Sub Macro11()
'
' Macro11 Macro
' Macro enregistrée le 05/05/2009 par xavier.allary
'

'
Sheets("Saisie 2008").Select
ActiveSheet.ChartObjects("Graphique 222").Activate
ActiveChart.ChartArea.Select
ActiveChart.ChartArea.Copy
ActiveWindow.Visible = False
Windows("BILAN ANNUEL.xls").Activate
Sheets("Bilan").Select
ActiveSheet.Paste
ActiveSheet.ChartObjects("Graphique 55").Activate
End Sub

Pouvez-vous me dire comment faire pour régler ce problème et pour ne plus avoir ce fameux message d'erreur.

Merci d'avance.
 

vbacrumble

XLDnaute Accro
Re : Macro Copier-Coller

Bonjour


Voici un code qui fonctionne

(Dans la configuration de test suivante , il n'y qu'un seul graphique sur la feuille Saisie 2008)

Code:
Sub testOK()
Dim x&, nomgraph$
With ActiveSheet
    For x = 1 To .DrawingObjects.Count
        If TypeName(.DrawingObjects(x)) Like "Chart*" Then
        nomgraph = .DrawingObjects(x).Name
        End If
    Next x
    .ChartObjects(nomgraph).Activate
    With ActiveChart
        .ChartArea.Select
        .CopyPicture Appearance:=xlScreen, _
        Size:=xlScreen, Format:=xlPicture
    End With
End With

With Workbooks("BILAN ANNUEL.xls")
    .Activate
        With .Sheets("Bilan")
            .Range("A1").Select
            .PasteSpecial "Image (métafichier amélioré)", False, False
        End With
End With
End Sub

PS: Je repasse plus tard ajouté des commentaires dans le code
 

vbacrumble

XLDnaute Accro
Re : Macro Copier-Coller

Re


Voici un code updgradé qui copie deux graphiques (et seulement 2) présents sur la feuille Saisie 2008 dans la feuille Bilan du classeur BILAN ANNUEL.xls

(J'espère que les commentaires seront suffisants pour tu saisisses le fonctionnement de cecode VBA.)
Code:
Sub Copie2Graphiques()
[COLOR="Green"]'Déclarations[/COLOR]
Dim S_WK As Workbook, D_WK As Workbook
Dim S_F As Worksheet, D_F As Worksheet
Dim S_Graph  As ChartObject, D_Graph As ChartObject
[COLOR="Green"]'Définition du classeur source et la feuille source[/COLOR]
Set S_WK = ThisWorkBook: Set S_F = S_WK.Worksheets("Saisie 2008")
[COLOR="Green"]'Définition du classeur et de la feuille destination[/COLOR]
Set D_WK = Workbooks("BILAN ANNUEL.xls"): Set D_F = D_WK.Worksheets("Bilan")
Application.ScreenUpdating = False[COLOR="Green"] ' ecran figé[/COLOR]
Set S_Graph = S_F.ChartObjects(1) [COLOR="Green"]'1er graphique[/COLOR]
S_Graph.Activate

    With ActiveChart [COLOR="Green"]'selection/copie du 1er graphique[/COLOR]
        .ChartArea.Select
        .CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
    End With  [COLOR="Green"]'collage du graphique dans la feuille destination[/COLOR]
D_F.Paste D_F.Range("A1"): Set S_Graph = Nothing
Application.CutCopyMode = False
[COLOR="Green"]'on recommence pour le 2ème graphique[/COLOR]
Set S_Graph = S_F.ChartObjects(2)
S_Graph.Activate

    With ActiveChart
        .ChartArea.Select
        .CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
    End With
D_F.Paste D_F.Range("A20"): Set S_Graph = Nothing
Application.CutCopyMode = False
Application.ScreenUpdating = True [COLOR="Green"]'écran défigé[/COLOR]
End Sub
 

allaryxavier

XLDnaute Nouveau
Re : Macro Copier-Coller

Re-

Merci pour ces réponses rapides et efficaces!

Bien qu'étant nul en VBA, j'ai réussi (grâce à tes commentaires) à utiliser ton deuxième code mais en enlevant la partie copie-colle du deuxième graphique (car je souhaite:

- 1 macro affectée à 1 bouton qui colle le 1er graphique
- 1 macro affectée à 1 deuxième bouton qui colle le deuxième graphique

donc: voila ce que ça donne:

Sub Copie1()
'Déclarations
Dim S_WK As Workbook, D_WK As Workbook
Dim S_F As Worksheet, D_F As Worksheet
Dim S_Graph As ChartObject, D_Graph As ChartObject
'Définition du classeur source et la feuille source
Set S_WK = ThisWorkbook: Set S_F = S_WK.Worksheets("Saisie 2008")
'Définition du classeur et de la feuille destination
Set D_WK = Workbooks("BILAN ANNUEL.xls"): Set D_F = D_WK.Worksheets("Bilan")
Application.ScreenUpdating = False ' ecran figé
Set S_Graph = S_F.ChartObjects(1) '1er graphique
S_Graph.Activate

With ActiveChart 'selection/copie du 1er graphique
.ChartArea.Select
.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
End With 'collage du graphique dans la feuille destination
D_F.Paste D_F.Range("C5"): Set S_Graph = Nothing
Application.CutCopyMode = False
Application.ScreenUpdating = True 'écran défigé
End Sub


et ça marche!

Par contre pourrais-tu me dire svp quelle ligne de programme à rajouter (et où dans le code) pour que quand le collage se fait je retourne directement à la feuille "Bilan" et non pas "Saisie 2008".

Et là ça serait.....parfait!^^

Merci déjà, et merci d'avance.
 

Discussions similaires

Réponses
9
Affichages
425

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 506
Messages
2 089 072
Membres
104 020
dernier inscrit
Mzghal