[Résolu] Remplacer un graphique par son image - VBA

VDAVID

XLDnaute Impliqué
Bonjour le forum,

Je viens solliciter votre aide car je suis bloqué sur une partie de Macro depuis une journée.
N'ayant pas trouvé moi-même de solutions sur internet (Même après Moult recherches) je m'excuse d'avance si le sujet à déjà été traité et que je l'ai loupé.

- Dans le cadre d'une macro d'édition, je copie-colle plusieurs fois une feuille dans une nouvelle; en changeant la Région concernée. Ainsi, lorsque je change la région dans ma cellule, tous mes tableaux sont mis à jour via formule, ainsi que mes Graphiques. Je copie-colle ensuite en formats/Valeurs tous les tableaux et graphiques dans une nouvelle feuille.


- Mes graphiques sont gérés par des noms, et lorsque je les copie, les liaisons sont gardées. Donc à chaque fois que je change de région dans ma feuille source, les graphiques que j'ai copié avant ne corresponde plus à la région concernée.


Pour remédier à cela, j'ai pensé à copier puis collé en image chaque graphique nouvellement copié. Mais je n'arrive pas à "re situer" les graphiques au bon endroit.


Auriez-vous une solution VBAiste pour remédier à cela?


J'ai mis un fichier exemple en PJ, avec une variante de code que j'ai testé. (Et qui se rapproche le plus, à mon sens, de ce que je souhaiterais.)


Merci d'avance à tous ceux qui se pencheront sur mon problème ! :D
 

Pièces jointes

  • VDAVID - Excel Downloads.xlsm
    42.5 KB · Affichages: 40
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Remplacer un graphique par son image - VBA

Bonjour VDAVID,

Un essai avec deux méthodes, l'une place la copie aux coordonnées top et left semblables aux coordonnées du graphique source, l'autre place le copie au coin supérieur gauche de la cellule semblable à la cellule coin supérieur gauche du graphique source.

Edit: corrigé v1

VB:
Option Explicit


Sub MethodeXY()
Dim Graf As ChartObject, Shp As Shape
Dim MemX#, MemY#
  Set Graf = Sheets("Situation initiale").ChartObjects(1)
  MemX = Graf.Left: MemY = Graf.Top: Graf.Copy
  With Sheets("Résultat attendu")
    .Activate
    On Error Resume Next
    .Shapes("toto").Delete
    On Error GoTo 0
    .Pictures.Paste
    Set Shp = .Shapes(.Shapes.Count)
    Shp.Name = "toto"
    Shp.Top = MemY
    Shp.Left = MemX
  End With
Application.CutCopyMode = False
End Sub


Sub MethodeCell()
Dim Graf As ChartObject, Shp As Shape, cellHautGauche As Range
  Set Graf = Sheets("Situation initiale").ChartObjects(1)
  Set cellHautGauche = Graf.TopLeftCell
  Graf.Copy
  With Sheets("Résultat attendu")
    .Activate
    On Error Resume Next
    .Shapes("toto").Delete
    On Error GoTo 0
    .Pictures.Paste
    Set Shp = .Shapes(.Shapes.Count)
    Shp.Name = "toto"
    Shp.Top = .Range(cellHautGauche.Address).Top
    Shp.Left = .Range(cellHautGauche.Address).Left
  End With
Application.CutCopyMode = False
End Sub
 

Pièces jointes

  • VDAVID - Excel Downloads v2.xlsm
    22.1 KB · Affichages: 47
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : Remplacer un graphique par son image - VBA

Salut mapomme,

Merci c'est Top ! :)
Je vais opter pour la deuxième méthode !
Je ne connaissais pas l'instruction .TopLeftCell pour récupérer la cellule déterminant la position du Graphique !

Bonne journée et encore merci à toi !
 

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren