XL 2016 Vba afficher dans un histogramme des informations provenant de la textbox lorsqu'on clic sur une barre de l'histogramme

Ange123

XLDnaute Nouveau
Bonjour, je suis nouvelle sur le forum mais je m'en sert beaucoup pour programmer lorsque je rencontre des difficultés.
Je dois réaliser un graphique histogramme grâce à des cellules du tableau (A à F ) et dans la cellule G il y a des informations textes pour chaque lignes.
Lorsqu'on clique sur une barre de l'histogramme, que les informations de la textbox apparaissent dans une bulle.
Est-ce possible sous VBA ?

Merci par avance pour votre aide
 

Ange123

XLDnaute Nouveau
Bonjour à tous,

Voilà ce que j'ai pu réaliser grâce au programme de mapomme, cependant, ceci fonctionne pour un graphique normal. Or, je souhaiterai le transposer pour un graphique du tableau croisé dynamique.
Pour avoir ce type de graphique :
 

Ange123

XLDnaute Nouveau
Bonjour à tous et toutes,

S'il vous plait, je n'ai toujours pas eu de retour, quelqu'un peut m'aider ?
Si ma demande n'est pas assez explicite, svp dites le moi de tel sorte que je puisse trouver une solution à ma demande.

Merci pour votre compréhension.

Ange Wazayamoko
 

Ange123

XLDnaute Nouveau
Bonjour danielco, je suis désolé de pas t'avoir fait de retour. Tout d'abord merci pour ton aide.
Hier, j'avais essayé d'ouvrir le fichier mais il y a eu un bug sur la macro, du coup je n'ai pas insister. Mais aujourd'hui je l'ai ouvert à nouveau et il fonctionne.
Merci car j'ai la zone de texte lrosque je clique sur une barre de l'histogramme, mais le problème est qu'il ne m'affiche pas le texte de la colonne O.
De plus, je pense qu'il y a une nuance a prendre en compte lorsqu'on recherche le texte à afficher en fonction de la semaine. Par exemple pour la semaine 17, si plusieurs informations ont été renseigné dans la colonne O, il faut afficher toutes les lignes de texte de cette semaine là.
 

Ange123

XLDnaute Nouveau
Waouh! merci beaucoup beaucoup danielco.

Je m'efforce à comprendre le programme pour pouvoir modifier le rectangle de texte. L'apparition de la zone de texte est geré par le "rectangle 1" ou grâce aux variables x,y ?
De plus, à quoi sert le décalage que tu fais grâce aux variables arg1 et arg2 ?

Merci pour l’éclaircissement
 

danielco

XLDnaute Accro
Bonjour,

Comme annoncé, voici le code commenté :

1. Dans le module de classe

VB:
Public WithEvents Graph As Chart

'***
'la macro utilise une forme (rectangle) insérée dans le graphique
'***
Private Sub Graph_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
    'Variables de la commande getChartElements
    'x et y : position  horizontale et verticale du pointeur au moment du clic
    'ElementID : le type d'élément du graphique si clic sur une série, ElementID = 3
    'Si ElementID =3,
    'Arg1 = N° de la série
    'Arg2 = N° du point de la série
    Dim ElementID As Long
    Dim Arg1 As Long, Arg2 As Long
    Dim C As Range
    Dim Txt As String
    On Error Resume Next
    'Récupération des éléments :
    ActiveChart.GetChartElement x, y, ElementID, Arg1, Arg2
    'Si on n'a pas cliqué sur une série
    If Arg2 = 0 Then
        'on masque le rectangle
        ActiveChart.Shapes("Rectangle 1").Visible = msoFalse
    Else
        'Sinon, on a cliqué sur une série
        With ActiveChart.Shapes("Rectangle 1")
            'on rend la forme dimensionnable selon la longueur du texte
            .TextFrame2.AutoSize = msoAutoSizeShapeToFitText
            'La variable Txt va contenir le texte à mettre dans le rectangle
            Txt = ""
            'Boucle sur la plage utile de la colonne A
            For Each C In Range("A3", Cells(Rows.Count, 1).End(xlUp))
              '[T5].Offset(Arg2) renvoie le numéro de semaine
              'Si la cellule de la colonne A est égale au numéro ded semaine
              If C = [T5].Offset(Arg2) Then
                'et si elle n'est pas vide
                If C.Offset(, 14) <> "" Then
                  'On ajoute un saut de ligne et la valeur de C à Txt
                  Txt = Txt & Chr(10) & C.Offset(, 14)
                End If
              End If
            Next C
            'On retire le saut de ligne au début de Txt
            Txt = Right(Txt, Len(Txt) - 1)
            'On affiche le rectangle
            .Visible = msoTrue
            'On entre la valeur du texte
            .TextFrame2.TextRange.Text = Txt
            'positionnement gauche du rectangle
            ' égal à la position gauche du point de série cliqué +7 points
            .Left = ActiveChart.SeriesCollection(1).Points(Arg2).Left + 7
            'positionnement haut du rectangle
            ' égal à la position haute du point de série cliqué
            .Top = ActiveChart.SeriesCollection(1).Points(Arg2).Top
        End With
    End If
End Sub

2. Dans le module ThisWorkbook :

Code:
Dim ClTabChart As ClasseChart


Private Sub Workbook_Open()
    Dim i As Integer
    Set ClTabChart = New ClasseChart
    'Spécifie le 1er graphique de la Feuil1
    Set ClTabChart.Graph = Worksheets("QRQC_KPI").ChartObjects(1).Chart
    Worksheets("QRQC_KPI").ChartObjects(1).Activate
    'on masque le rectangle
    Sheets("QRQC_KPI").ChartObjects(1).Chart.Shapes("Rectangle 1").Visible = msoFalse
    'désactive les intitulés et les valeurs
    Application.ShowChartTipNames = False
    Application.ShowChartTipValues = False
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'réactive les intitulés et les valeurs
    Sheets("QRQC_KPI").ChartObjects(1).Chart.Shapes("Rectangle 1").Visible = msoFalse
    Application.ShowChartTipNames = True
    Application.ShowChartTipValues = True
End Sub

Je reste à ta disposition pour toute précision.

Daniel
 

Ange123

XLDnaute Nouveau
Bonjour Danielco, j'ai bien compris le fonctionnement du programme, je te remercie énormement car cela m'a permis de bien avancer.
Je m'y suis plongé toute la matinée, j'ai modifié la zone de texte et la largeur de la zone de texte. J'ai changé l'affichage des semaines par un affichage de mois, mais je n'arrive pas à régler ces soucis :

-Pour le graphique 1 "People 1" : je souhaiterai afficher les informations des cellules O/P/Q, peu être sous forme de tableau (je ne sais pas si c'est possible)

-Pour le graphique 2 "People 2" : quand tout un mois est à 0, donc aucune barre est affiché dans le graphique, il est interessant pour moi de visualiser pourquoi cette barre est à 0, donc d'afficher les informations dans la colonne 15 ("Unplanned abscence")
 

Pièces jointes

  • SQCDPI_V10.xlsm
    847.6 KB · Affichages: 6

Discussions similaires