IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Déselectionner un graphique en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Par défaut Déselectionner un graphique en VBA
    Bonjour,

    Je développe actuellement un module permettant de générer une succession de graphiques à partir de tableaux simples.
    A un moment, mon code ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Range("DebutTableau1").Select
    Set zone = Range(Selection, Selection.End(xlToRight).End(xlDown))
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:= zone
    ActiveChart.ChartType = xlLine
     
    Range("DebutTableau2").Select
    Set zone = Range(Selection, Selection.End(xlToRight).End(xlDown))
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:= zone
    ActiveChart.ChartType = xlLine
    J'ai un plantage à la ligne 9 : "Erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet."
    J'ai testé plein de trucs, et il semble qu'à cette ligne, la sélection active (qu'on obtient avec le mot clé Selection) n'est pas la plage "DebutTableau2" mais le graphique que je viens de créer.
    J'ai essayé d'ajouter l'instruction ActiveChart.Deselect après la création de mon graphique, mais rien n'y fait, je n'arrive pas à le déselectionner avec du code. Cette instruction semble ne rien faire.
    J'ai aussi essayé de trouver une solution utilisant l'enregistreur de macro mais je n'ai rien trouvé non plus.

    Que faire ?

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut
    Bonjour,

    tu peux utiliser:

    Ou encore selectionner une cellule quelconque. Par exemple, a la fin de ton code selectionne A1 de la feuille1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Cells(1,1).Select
    Ou encore eviter le ".Select" => "ActiveChart" mais passer simplement par des ecritures du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.ChartObjects(1).Chart 'j'ai mis 1 par defaut
    cela te permettra de travailler sur ton graph sans avoir a le selectionner. C'est comme si dans ton code tu travaille sur ta Feuil1, tu souhaites ensuite prendre la valeur de la cellule A1 dans le Feuil2, tu ne va pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Feuil2.Select
    ActiveSheet.Cells(1,1)
    ca prend du temps, Excel doit d'abord selectionner ta Feuil2 puis aller sur A1, donc mieux vaut faire directement:
    Enfin, meme si beaucoup de personne dans le forum Excel connaissent bien VBA, tu seras aide + rapidement sur le forum approprie que voici:
    http://www.developpez.net/forums/f66...ros-vba-excel/

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    il y a aussi la propriété RangeSelection


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  4. #4
    Invité
    Invité(e)
    Par défaut Bonjour,
    si tu ne sélectionne pas tu n'as pas besoin de désélectionner!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Gph
    Range("DebutTableau1").Select
    Set zone = Range(Selection, Selection.End(xlToRight).End(xlDown))
     
    Set Gph = ActiveSheet.Shapes.AddChart
    Gph.Chart.SetSourceData Source:=zone
    Gph.Chart.ChartType = xlLine
    Set Gph = Nothing
    Range("DebutTableau2").Select
    Set zone = Range(Selection, Selection.End(xlToRight).End(xlDown))
    Set Gph = ActiveSheet.Shapes.AddChart
    Gph.Chart.SetSourceData Source:=zone
    Gph.Chart.ChartType = xlLine
    Set Gph = Nothing
    http://www.developpez.net/forums/d14...s/#post7646238

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Par défaut
    Merci, la solution de rdurupt (ne jamais sélectionner de graphique) semble convenir, mais je rencontre un autre problème.
    Maintenant, après la création de chaque graphique, je dois lui appliquer un format en faisant un collage spécial de format, à partir d'un graphique de référence que je garde dans un coin.
    L'enregistreur de macro me propose ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        ActiveSheet.ChartObjects("Graphe_Reference").Activate
        ActiveChart.ChartArea.Copy
        ActiveSheet.ChartObjects("NouveauGraphique").Activate
        ActiveChart.ChartArea.Select
        ActiveSheet.PasteSpecial Format:=2
    Ça marche mais ça sélectionne mes graphiques. Je ne veux plus que ça le fasse.
    Comment faire ce copier-coller sans faire de sélection ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    même réponse!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.ChartObjects("Graphe_Reference").ChartArea.Copy
    il faut toujours faire le ménage après l'enregistreur de macro si tu comprend la philosophie tu as gagné!
    je te laisse faire le deuxième.
    Dernière modification par AlainTech ; 28/05/2014 à 21h59. Motif: Suppression de la citation inutile

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déselectionner une valeur dans un graphique en VBA
    Par Simon777pb dans le forum Excel
    Réponses: 5
    Dernier message: 09/07/2015, 19h41
  2. Graphique Excel VBA
    Par Elisa2007 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/04/2007, 11h08
  3. vba excel - Donner un titre a un graphique en vba
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/11/2005, 09h13
  4. Paramétrage de graphique en vba
    Par demerzel0 dans le forum Access
    Réponses: 2
    Dernier message: 07/11/2005, 10h59
  5. Graphique en VBA
    Par Celia1303 dans le forum Access
    Réponses: 1
    Dernier message: 04/11/2005, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo