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 :

Créer un graphique avec des données sources variables


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Créer un graphique avec des données sources variables
    Bonjour à tous.

    Après avoir pas mal cherché, sans succès, une solution à mon problème, je viens vous l'exposer (je code sous excel 2002).

    J'aimerais afficher un graphique par macro, dont les composantes sont laissées au choix de l'utilisateur. Mon projet comprend donc 3 phases:

    Macro 1: Récupération et agrégation des données choisie par l'utilisateur
    Macro 2: Création du graphique à partir des données agrégées
    Macro 3: Affichage du graphique dans un userform

    Les macro 1 et 3 fonctionnent parfaitement.

    Cependant je bloque sur la macro 2.

    Pour la réaliser je me suis inspirer de l'enregistreur de macro, qui donne le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Charts.Add
        ActiveChart.ChartType = xl3DPie
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("C2:D6"), PlotBy:= _
            xlColumns

    Etant donné que ma plage de donnée est variable, j'ai voulu remplacer le code en rouge (Range...) par ma plage de donnée variable.

    J'ai essayé une centaine de solution différente, et je pense avoir réussi à en trouver une satisfaisante, la voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub macro4()
     
    Dim var1, var2 As Byte 'Ma plage de donnée est en réalité variable. J'ai simplifié ici le problème
    var1 = 3
    var2 = 6
     
    'Sélection de la zone variable, et adaptation à mes besoins : Pas la première ligne, et seulement 2 colonnes
    Cells(2, var1).Select
    Selection.CurrentRegion.Offset(1, 0).Resize(Rows.Count - 1).Resize(var2 - 1, 2).Select
     
        Charts.Add
        ActiveChart.ChartType = xl3DPie
     
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Selection, PlotBy:= _
            xlColumns
     
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
     
        With ActiveChart
            .HasTitle = True
            .ChartTitle.Characters.Text = "titre"
        End With
     
    End Sub

    Je tiens à signaler qu'avec ce code, mon graphique est créé, exactement comme je le désire. (enfin presque, car avec ce code il est créé sur une nouvelle feuille, et je souhaiterais qu'il soit créé sur la feuille courante).
    Cependant, à cause de l'erreur, mon application est bloquée !

    Je ne comprend pas pourquoi j'obtiens cette erreur, alors que la macro fonctionne !!!

    Donc si vous avez une idée à me proposer, je vous remercie d'avance!
    N'hésitez pas à me demander un complément d'information, si mon explication n'est pas suffisamment claire.

    Merci d'avance !

  2. #2
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Bonsoir,

    ton remplacement tu la effectuer comment, on peu voir le code, pense à utiliser les balises de code (bouton # ) ... pour éviter d'avoir des bonhommes rieurs au milieu de ton code ..
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Désolé, j'avais pas fait attention.
    C'est mieux maintenant?

  4. #4
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    il ne faut pas utiliser selection et select pour autre chose que pour faire de l'animation !


    montre nous ton code entre balise [ code ] bouton # , en texte pas en images ! qu'on n'est pas à tout retaper pour ta correction ..
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par JackOuYA Voir le message
    il ne faut pas utiliser selection et select pour autre chose que pour faire de l'animation !
    A priori, ce que je veux faire est de l'animation.
    Puisque dans l'étape 3, ce graphique sera présenté à l'utilisateur.

    Enfin, si tu as une meilleure proposition, je suis preneur :-)

  6. #6
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    et tes sélections tu veux les afficher pour que lors de l'animation ton utilisateur les voient ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    dim yaPlage as range
    Dim yaCh as chart
    set yaPlage = sheets("Feuil2").Cells(2, var1).CurrentRegion.Offset(1, 0).Resize(Rows.Count - 1).Resize(var2 - 1, 2)
       Set yaCh = Charts.Add
       yaCh.ChartType = xl3DPie
       yaCh.SetSourceData Source:=yaPlage, PlotBy:= _
           xlColumns
       yaCh.Location Where:=xlLocationAsObject, Name:="Feuil1"
     With ActiveChart
         .HasTitle = True
        .ChartTitle.Characters.Text = "titre"
      End With
     
    End Sub

    tu dis quoi ..
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par JackOuYA Voir le message


    tu dis quoi ..
    Je dis JOLI !

    Ca code à un niveau bien supérieur au mien, mais c'est pour ça que j'étais venu chercher une solution!

    J'avais pensé à définir une plage, mais bon, je ne les avais jamais utilisées, donc ça me bloquait.

    Ca marche nikel, j'ai pu qu'à intégrer ça dans le reste de l'application.

    Merci beaucoup, je reviendrais :-D

  8. #8
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Petite question complémentaire.

    Ce code fonctionne parfaitement en l'exécutant à part.
    Cependant, lorsque je l'ajoute à mon application, j'obtiens l'erreur suivante:

    Erreur d'exécution '1004':
    Erreur définie par l'application ou par l'objet

    Le code en cause est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set yaPlage = Sheets("Graph").Cells(2, var1).CurrentRegion.Offset(1, 0).Resize(Rows.Count - 1).Resize(var2 - 1, 2)
    J'imagine que sans le reste c'est pas évident, mais le reste de l'application fait plusieurs pages, et elle s'appuie sur plusieurs feuilles, donc je peux pas réellement la transmettre.

    A noter également que le problème se situe après "CurrentRegion", car en arrétant la ligne à ce niveau, la macro fonctionne, mais forcément, ça me donne n'importe quoi !

    Donc, si à vue de nez, JackOuYA tu as une idée, je suis preneur.
    Sinon je finirai bien par trouver!

  9. #9
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    au milieu de ton code il y as un sans rien devant donc celui-ci s'applique à la feuille active, pas forcément la bonne.. d'ailleurs il c'est le nombre de ligne ou ce Rows.count..?


    préfixe donc Rows, avec le nom de la palge/feuille concernée..
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  10. #10
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    J'ai dû changer mon code, car un nouveau problème c'est présenté. Il était plus simple de choisir un plan B, plutôt que d'essayer de le contourner, car il aurait trop alourdi l'application.
    J'ai néanmoins globalement gardé la solution d'hier.

    Finalement, j'en suis à l'étape suivante, c'est à dire, afficher le macro dans l'userform.

    Il me manque encore un tout petit truc...

    Voilà la troisième étape qui affiche mon graphique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    'On récupère le nom du graphique que l'utilisateur veut consulter
    Dim graphique As Variant
    graphique = TR_Graph_Menu.Box_Graph.Value 'Ma liste déroulante avec tous les graphiques créés ; mon problème se situe là, voir après le code ma question
     
    ' Sélection du graphique
        ActiveSheet.ChartObjects(graphique).Activate
        ActiveChart.ChartArea.Select
        ActiveChart.ShowWindow = True
     
    ' Attribution d?un nom pour l'export du graphique, dans le dossier courant du fichier
        Fname = ThisWorkbook.Path & "\temp2.gif"
        ActiveChart.Export Filename:=Fname, FilterName:="GIF"
     
    ' UserForm (TR_Graph_Aff) avec juste une image vierge charge l'image venant d?être enregistré.
        TR_Graph_Aff.Image1.Picture = LoadPicture(Fname)
     
    ' Affichage du graphique
        TR_Graph_Aff.Show
    Mon problème est de renommer le graphique.
    Je pense avoir trouvé une solution simple.
    Lorsque l'on a un graphique préexistant, il suffit de faire CTR + click sur le graphique, et alors on peut définir un nom pour le graphique, dans la petite boite en haut à gauche :-)

    L'enregistreur de macro me donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveSheet.Shapes("nom").Select
        Selection.name = "nom"
    Quel est le code qui donnera un nom à mon graphique directement après la macro d'hier ?

Discussions similaires

  1. Graphique avec des données précises en vba
    Par seyflo dans le forum Excel
    Réponses: 10
    Dernier message: 25/05/2010, 09h47
  2. Créer un graph avec des données variables
    Par Damien.020 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/04/2010, 09h52
  3. Créer un graphique avec des données dynamiques
    Par nikobell dans le forum Excel
    Réponses: 5
    Dernier message: 17/01/2010, 19h39
  4. Réponses: 1
    Dernier message: 28/01/2009, 09h01
  5. Créer du xml avec des données Oracle
    Par Baumont dans le forum Oracle
    Réponses: 3
    Dernier message: 23/11/2005, 15h35

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