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 :

[E-07] Création dynamique d'un bouton dans un graphique


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut [E-07] Création dynamique d'un bouton dans un graphique
    Bonjour,
    J'ai écrit une application VBA Excel qui génère un fichier contenant des représentations graphiques (colonnes) des données d'un fichier source.
    Je souhaiterais, sur chaque graphique créé, prévoir un bouton qui renvoie au fichier source et sélectionne les données ayant servi à créer le graphique.
    Le fichier source contient 15 colonnes de données variables et donc le fichier graphique contient 15 feuilles graphiques. En "statique", cela ne me pose pas de problème, le nom du graphique correspondant au libellé de la colonne correspondante.
    Je ne comprends pas comment à chaque exécution de l'application, générer dans le fichier des graphiques, le code créant le bouton et l'évènement "clic" renvoyant aux données et ce sur chaque feuille graphique.

    Si des pistes de réflexion peuvent m'être fournies, cela m'aiderait grandement.
    D'avance merci

    Harry

  2. #2
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Dans "[E-07] Comment affecter par macro une macro à un objet" tu as un exemple de la façon dont créer dynamiquement un bouton et y affecter une macro. ( Mon pb étant que la macro n'appartient pas au classeur, ce qui n'est pas ton cas à priori ).

    Si j'ai bien compris il te suffit "juste" de créer un bouton, et de lui passer une macro pointant vers la source de données ( que tu as pu nommer au préalable ).

    Je n'ai jamais essayé de créer dynamiquement un objet dans un chart...

  3. #3
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut
    Merci pour la suggestion,

    J'essaye ce weekend

    Harry

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonsoir


    j'espère que cet exemple pourra t'aider :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Option Explicit
     
    'Boucle sur les graphiques de la feuille active
    'pour leur ajouter un bouton.
    Sub CreationBoutons()
        Dim Gr As ChartObject
        Dim Sh As Shape
     
        'Boucle sur les graphique de la feuille active
        For Each Gr In ActiveSheet.ChartObjects
            'Ajoute une forme dans le graphique
            Set Sh = Gr.Chart.Shapes.AddShape _
                (msoShapeHeart, 0, 0, 30#, 30#)
     
            With Sh
                'Applique le nom du graphique à la forme
                .Name = Gr.Name
                'Applique une macro à la forme
                .OnAction = "MaProcedure"
            End With
        Next Gr
    End Sub
     
     
    'La macro qui sera déclenchée lorsque vous cliquez
    'sur la forme placée dans le graphique.
    Sub MaProcedure()
        'Affiche l'adresse de la première série du graphique
        MsgBox Range(RecupPlageDonnesGraph( _
            ActiveSheet.ChartObjects(Application.Caller), 1)).Address
    End Sub
     
     
    'Renvoi la plage source d'une série graphique
    Function RecupPlageDonnesGraph(Ch As ChartObject, NumSerie As Integer) As String
        Dim Tableau() As String
     
        Tableau = Split(Ch.Chart.SeriesCollection(NumSerie).Formula, ",")
        RecupPlageDonnesGraph = Tableau(2)
    End Function

    bonne soirée
    michel

  5. #5
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut
    Merci pour toutes vos réponses; elles m'ont grandement aidé.
    Voici le code:
    Pour l'ajout du bouton
    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
    Sub add_button(mytitle)
    'Ajout d'un bouton
        ActiveSheet.Buttons.Add(5808726, 892340.25, 754380, 310839).Select
     
        Dim sh_name As String
     
        ActiveChart.Shapes("button 1").Height = 50
        ActiveChart.Shapes("button 1").Width = 150
        Selection.Characters.Text = "Accès aux données " & Chr(10) & mytitle
        Selection.AutoScaleFont = False
        With Selection.Characters(Start:=1, Length:=17).Font
            .Name = "Garamond"
            .FontStyle = "Normal"
            .Size = 13
        End With
        Selection.OnAction = "btn1_clic"
        ActiveChart.ChartArea.Select
    End Sub
    Par contre, je n'ai pas encore trouvé le moyen de placer le bouton à droite
    Pour l'ajout du module
    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
    25
    26
    27
    28
    29
    Sub new_module(shortname)
    'insère un module appelé "Mod_btn" dans le fichier résultat
    Dim VBComp As VBComponent
    Dim x As Integer
    Workbooks(shortname).Activate
        'Création du module
        Set VBComp = ActiveWorkbook.VBProject.VBComponents.Add(1)
        'Renomme le module
        VBComp.Name = "Mod_btn"
        'Code de la macro dans le module
        With VBComp.codemodule
            x = .CountOfLines
            .InsertLines x + 1, "Sub btn1_clic()"
            .InsertLines x + 2, "dim a as string"
            .InsertLines x + 3, "dim x as integer"
            .InsertLines x + 4, "a = ActiveChart.Name"
            .InsertLines x + 5, "Worksheets(""temp"").Activate"
            .InsertLines x + 6, "x = 1"
            .InsertLines x + 7, "Do While Cells(1, x).Value <> Cells(1, x + 1).Value"
            .InsertLines x + 8, "x = x + 1"
            .InsertLines x + 9, "Loop"
            .InsertLines x + 10, "For i = 1 To x - 3"
            .InsertLines x + 11, "If Cells(1, i).Value = a Then"
            .InsertLines x + 12, "Range(Cells(1, i), Cells(1, i + 3)).Select"
            .InsertLines x + 13, "End If"
            .InsertLines x + 14, "Next"
            .InsertLines x + 14, "End Sub"
        End With
    End Sub
    Tout fonctionne parfaitement hormis la remarque sur l'alignement du bouton.
    Encore merci à tous deux

    Harry

  6. #6
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut C'était trop simple
    Le problème est entièrement résolu. J'ai utilisé l'instruction "ShapeRange.Increment" pour placer le bouton généré à droite.
    Harry

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

Discussions similaires

  1. création dynamique d'un textbox dans un tableau html
    Par zer_hich dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/04/2010, 11h43
  2. Création dynamique d'un bouton sous intraweb ?
    Par julesclaude dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2009, 11h50
  3. Création dynamique de ctrls Bouton
    Par Tommy57 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 10/10/2008, 10h33
  4. Réponses: 2
    Dernier message: 05/04/2007, 14h53
  5. Réponses: 2
    Dernier message: 27/11/2005, 00h43

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