Revenir à l'onglet précédemment ouvert

Résolu
boban90 -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. boban90
       
      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
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. boban90
       
      Merci beaucoup pijaku,

      En effet cette nouvelle version du code fonctionne à merveille, M.E.R.C.I :-)
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > boban90
         
        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