VBA - Graphique cacher/montrer courbe

Bonjour à tous,

Voilà, je possède un fichier xlsm qui permet de générer un graphique en courbe (lors de l'activation du bouton 'Maj'). Cependant, j'aimerais n'afficher que certaines courbes et pas toutes en même temps grâce par exemple à une case à cocher en colonne D ou un "x" à rentrer. Par exemple, si je met un "x" (ou autre méthode de sélection) sur Sony et Jacques, seuls leurs courbes apparait sur le graph.

La liste des noms est amenée à évoluer et change en fonction des dates sélectionné.

Merci

Bonjour,

Sur une copie de ton fichier > dans la feuille "Résultat" > remplace la macro "Worksheet_Change" par celle-ci ...

Puis place des x minuscules dans la plage "D7:D11" ...

Dès lors, pour le fichier exemple en date du "30-06-2020" > x = affiche courbe > supprimer le x = masque la courbe ...

Puis, teste d'autres dates ...

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("D7:D11, C5")) Is Nothing Then

        Select Case Target.Address
            Case "$C$5"
                Lastline_Name = Range("B" & Rows.Count).End(xlUp).Row
                If Lastline_Name > 6 Then
                    Range(Cells(7, 2), Cells(Lastline_Name, 3)).ClearContents
                End If
                For i = 4 To 30 Step 2
                    If Range("C5") = Sheets("Notes").Cells(15, i) Then
                        lastline_notes = Sheets("Notes").Range("A" & Rows.Count).End(xlUp).Row
                        For j = 19 To lastline_notes
                            If Sheets("Notes").Cells(j, i) > 1.5 Then
                                Lastline_Name = Range("B" & Rows.Count).End(xlUp).Row
                                Cells(Lastline_Name + 1, 2) = Sheets("Notes").Cells(j, 1)
                                Cells(Lastline_Name + 1, 3) = Sheets("Notes").Cells(j, i)
                            End If
                        Next j
                    End If
                Next i

            Case "$D$7"
                If Target.Value = "x" Then
                    ChartObjects("Evolution").Chart.SeriesCollection(1).Format.Line.Visible = True
                Else
                    ChartObjects("Evolution").Chart.SeriesCollection(1).Format.Line.Visible = False
                End If

            Case "$D$8"
                If Target.Value = "x" Then
                    ChartObjects("Evolution").Chart.SeriesCollection(2).Format.Line.Visible = True
                Else
                    ChartObjects("Evolution").Chart.SeriesCollection(2).Format.Line.Visible = False
                End If

            Case "$D$9"
                If Target.Value = "x" Then
                    ChartObjects("Evolution").Chart.SeriesCollection(3).Format.Line.Visible = True
                Else
                    ChartObjects("Evolution").Chart.SeriesCollection(3).Format.Line.Visible = False
                End If

            Case "$D$10"
                If Target.Value = "x" Then
                    ChartObjects("Evolution").Chart.SeriesCollection(4).Format.Line.Visible = True
                Else
                    ChartObjects("Evolution").Chart.SeriesCollection(4).Format.Line.Visible = False
                End If

            Case "$D$11"
                If Target.Value = "x" Then
                    ChartObjects("Evolution").Chart.SeriesCollection(5).Format.Line.Visible = True
                Else
                    ChartObjects("Evolution").Chart.SeriesCollection(5).Format.Line.Visible = False
                End If
        End Select
    End If
End Sub

ric

Incroyable! Merci beaucoup !

ric

J'ai pu voir comment tu as fait, mais y a-t-il un moyen de réaliser une boucle sur la colonne D? Ce que je veux dire, c'est que des fois le nombre de noms pour une date sélectionnée va au-delà de la ligne D11 (des fois il pourrait y en avoir 15, 30 ou des fois juste 4...).

Merci

Bonjour,

J'ai modifié un peu le code de C5 afin de supprimer les courbes avant le changement de date > et replacé les x en regard des nouveaux noms ...

J'ai aussi déplacé "afficher/masquer" les courbes dans une macro à part ...

Ça fonctionne, quel que soit le nombre de courbes ...

Ça fonctionne au changement de date ...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dlig As Integer, i As Integer, j As Integer

    Application.ScreenUpdating = False
    Dlig = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row

    If Target.Count > 1 Then Exit Sub

    If Not Intersect(Target, Range("C5", "D7:D" & Dlig)) Is Nothing Then

        If Target.Row = 5 And Target.Column = 3 Then
                    ' boucle pour effacer les courbes avant le changement de date
                For j = 7 To Dlig
                    Cells(j, "D").ClearContents
                    Call AfficherMasquerLaCourbe(j)
                Next j

                Lastline_Name = Range("B" & Rows.Count).End(xlUp).Row
                If Lastline_Name > 6 Then Range(Cells(7, 2), Cells(Lastline_Name, 4)).ClearContents
                For i = 4 To 30 Step 2
                    If Range("C5") = Sheets("Notes").Cells(15, i) Then
                        lastline_notes = Sheets("Notes").Range("A" & Rows.Count).End(xlUp).Row
                        For j = 19 To lastline_notes
                            If Sheets("Notes").Cells(j, i) > 1.5 Then
                                Lastline_Name = Range("B" & Rows.Count).End(xlUp).Row
                                Cells(Lastline_Name + 1, "B") = Sheets("Notes").Cells(j, 1)
                                Cells(Lastline_Name + 1, "C") = Sheets("Notes").Cells(j, i)
                                    ' place un x et affiche la courbe
                                Cells(Lastline_Name + 1, "D") = "x"
                                Call AfficherMasquerLaCourbe(Lastline_Name + 1)
                            End If
                        Next j
                    End If
                Next i
        End If

            ' si l'on supprime ou place un x en D devant un nom
        If Target.Row > 6 And Target.Row <= ChartObjects("Evolution").Chart.SeriesCollection.Count + 6 _
           Then Call AfficherMasquerLaCourbe(Target.Row)
    End If
End Sub

Sub AfficherMasquerLaCourbe(LL As Integer)
    Application.ScreenUpdating = False
    If Cells(LL, "D") = "x" Then
        ChartObjects("Evolution").Chart.SeriesCollection(LL - 6).Format.Line.Visible = True
    Else
        ChartObjects("Evolution").Chart.SeriesCollection(LL - 6).Format.Line.Visible = False
    End If
End Sub

ric

Ça a l'air de très bien fonctionner ! Merci encore,

Rebonjour,

Je reviens vers vous aujourd'hui car je me suis rendu compte que lorsque on applique un filtre sur les entetes de la liste (filtre A-Z par exemple), le "x" de la courbe ne correspond pas à la ligne en question. De ce fait, les courbes sélectionnées ne correspondent plus au nom susvisé. Y a t-il un moyen de garder le filtre sur les "x" également?

Merci,

Bonjour,

C'est une excellente question ...

Je ne connais pas grand chose aux graphiques ...

Selon le fichier exemple > où applique-t-on le filtre ??

ric

Bonjour,

Par exemple, si je veux filtrer manuellement le nom (ligne 6 de l'onglet 'Resultat'), et qu'ensuite je retire ou met des "x" pour afficher la courbe, la courbe affichée ne correspond pas au nom en question (mais plutôt à celui d'avant filtre).

Bonjour,

Je ne sais pas si j'ai le même résultat ...

En effectuant quelques tests > je constate qu'une fois le filtre appliqué > en enlevant un x ou en ajoutant un vis-à-vis un nom > cela semble la bonne courbe qui s'affiche ou se masque ...

C'est en appliquant le filtre que les courbes des noms masqués par le filtre ne se masquent pas ...

Si c'est bien le cas > pour l'instant je tourne en rond > comme si j'avais un soulier de clouer au plancher ...

Je cogite sur la chose ...

ric

Bonjour,

Je crois avoir trouvé ...

Après le changement de date > il faut utiliser le bouton MAJ ...

Le filtre semble bien fonctionner > par contre, il y a un petit délai que j'ai ajouté avec une minuterie (0.5 seconde) > sinon, les données ne s'actualisaient pas ...

Voir si ça convient ...

ric

Bonjour Ric,

Merci pour la solution trouvée! J'aurais pensé que cela serait plus simple!

Bonjour,

Il semble persister un souci > à l'ouverture du fichier > le bouton MAJ > donne souvent des erreurs > après avoir changé de date une couple de fois > il se met à bien fonctionner ...

Sûrement des références qui ne sont pas bien définies ...

J'ai aussi tenté sans succès d'imbriquer le code du bouton MAJ à la suite du changement de date en C5 ...

Je continue à regarder la chose et je reviens ...

En passant > sur ce projet > combien pourrait-il y avoir de courbes au maximum ?

ric

Il pourrait y avoir une cinquantaine max, d'où le fait de pouvoir sélectionner des courbes une par une.

Bonjour,

Je tente de débogger la chose > le souci qu'il me reste à stabiliser est l'application de filtre sur la colonne nom ...

Lors des choix dans le filtre > souvent ça me donne des messages d'erreurs > mais ça applique quand même les choix ...

Parfois ces messages parlent de formules > d'autres fois > c'est au moment de supprimer les "SeriesCollection" pour placer les nouvelles ...

Je suis un novice et je ne comprends pas tout ...

Je te reviens dès que j'ai quelque chose de stable ...

ric

Je pense que je ne vais pas chercher plus loin de mon côté... Cependant, mon alternative serait de, avant de d'attribuer les "x" à chaque nom et d'établir le graph, trier la colonne 'Note' (colonne 'C') en décroissant. C'est à dire que dès qu'une date est sélectionnée, les données s'affiche par ordre décroissant en 'C'.

Une solution comme celle-ci est envisageable?

J'aimerais également, pouvoir calculer en colonne E, l'écartype de chaque valeur sur la base de l'onglet 'Données graphique'. Cet écartype s'afficherait en même temps que le reste. J'ai une idée de comment le calculer (Application.StDev) mais aucune idée pour le transposer d'une feuille à une autre.

Merci bcp,

Bonjour,

Une solution comme celle-ci est envisageable?

Avec Excel, il y a peu de choses qui ne sont pas envisageables ...

ric

Saurait-tu comment faire pour ce qui est de l'écartype? J'ai réussi quant à mon alternative!

Merci encore!

Bonjour,

Saurait-tu comment faire pour ce qui est de l'écartype?

Non malheureusement > je ne connais pas le concept d'écartype ...

ric

Rechercher des sujets similaires à "vba graphique cacher montrer courbe"