Revenir à l'onglet précédemment ouvert

Résolu/Fermé
boban90 - Modifié par boban90 le 7/05/2015 à 15:01
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 7 mai 2015 à 19:21
Bonjour à tous,

Je m'adresse à vous puisque j'ai un problème que je ne parviens pas à résoudre.

Voici ce que je veux faire :
1) dans mon classeur excel, je me positionne sur une feuille nommée "Ormesson S18" (le nom va varier à chaque fois)
2) une fois sur cette feuille, je copie un graphe provenant d'une feuille fixe nommée "Graphe" (tout se passe dans le même classeur)
3) je colle ce graphe en metafile dans ma feuille "Ormesson S18", en cellule B104.

Voici mon ébauche de solution :
J'ai alors commencé à écrire une macro, mais elle fonctionne lorsque ma feuille active est "Ormesson S18" et casse logiquement dès que je change de nom.
Voici ma macro :

Sub Macro4()
'
' Macro4 Macro
'

'
Sheets("Graphe").Select
ActiveSheet.ChartObjects("Chart 2").Activate
ActiveChart.ChartArea.Copy
Sheets("Ormesson S18").Select
Range("B104").Select
ActiveSheet.PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False _
, DisplayAsIcon:=False
End Sub


Voici mon problème :
Je souhaite remplacer dans ma macro la feuille "Ormesson S18" par "la feuille depuis laquelle j'exécute initialement la macro" voire "la feuille ouverte juste avant d'ouvrir ma feuille Graphe"

Quelqu'un aurait-il une solution?

Merci d'avance pour le temps que vous avez passé à me lire :-)

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
7 mai 2015 à 15:23
Bonjour,

Il faut absolument éviter les .Select inutiles...
Donc...
A tester :
Sub Macro4()
'
' Macro4 Macro
'

'
    Sheets("Graphe").ChartObjects("Chart 2").ChartArea.Copy
    ActiveSheet.Range("B104").PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False _
        , DisplayAsIcon:=False
End Sub

0
Bonjour pijaku,

Merci pour l'astuce, je comprends bien la logique : si on supprime les select, on reste sur la même feuille et on se simplifie la vie tout en gagnant en simplicité.

Maintenant, le code en l'état ne fonctionne pas, en effet la partie :
Sheets("Graphe").ChartObjects("Chart 2").ChartArea.Copy
n'est pas reconnue alors que mon ancien code fonctionne.

Avez-vous une idée de l'origine de cette erreur?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
7 mai 2015 à 15:56
Peut être, je n'ai pas testé, ne peut-on pas copier directement les graph...

Alors, il convient de stocker le nom de la feuille d'ou tu lances la macro :
Sub Macro4()
'
' Macro4 Macro
'
Dim Feuille As WorkSheet
    Set Feuille = ActiveSheet
    Sheets("Graphe").Select
    ActiveSheet.ChartObjects("Chart 2").Activate
    ActiveChart.ChartArea.Copy
    Feuille.Select
    Range("B104").Select
    ActiveSheet.PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False _
        , DisplayAsIcon:=False
End Sub

0
Merci beaucoup pijaku,

En effet cette nouvelle version du code fonctionne à merveille, M.E.R.C.I :-)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750 > boban90
7 mai 2015 à 19:21
Si celle-ci fonctionne, il n'y a pas de raison que celle-la moins.
ça fera toujours un Select de moins :
Sub Macro4()
'
' Macro4 Macro
'
Dim Feuille As WorkSheet
    Set Feuille = ActiveSheet
    Sheets("Graphe").Select
    ActiveSheet.ChartObjects("Chart 2").Activate
    ActiveChart.ChartArea.Copy
    Feuille.Select
    Range("B104").PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False _
        , DisplayAsIcon:=False
End Sub
0