MFC Sur Histogramme
Bonjour j'ai un histogramme avec une courbe comme objectif et des colonnes en réel, est il possible des mettre les colonnes qui sont 10% en dessous de la ligne objectif en couleur rouge par exemple
. je mets en pj un fichier
Merci
bonjour,
En cliquant 1 fois sur le graphique, cela applique la couleur sur les barres de l'histogramme.
Cdlt
Merci pour le retour, mais j'ai une erreur sur la ligne
If Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.1) Then
.Points(i - 3).Interior.ColorIndex = 3
Else
.Points(i - 3).Interior.ColorIndex = 33
End If
Je précise que sur le fichier original les données sont glissants en fonction du mois pour récupérer les données
Bonjour,
Je précise que sur le fichier original les données sont glissants en fonction du mois pour récupérer les données
Vos précisions sont insuffisantes.
Quand vous dites que les données sont glissantes, est-ce au jour le jour pour un nombre de jours fixes dans la plage (exemples: du 1er au 31 du mois, puis du 2 au 1er du mois suivant , puis du 3 au 2 du mois suivant, etc...) ou bien, glissantes mois par mois (ce que je suppose être), dans ce cas, comment sélectionnez-vous la plage de données du mois actuellement? le faites-vous manuellement quand vous décidez de prendre tel ou tel mois à afficher, ou bien comptez-vous utiliser une liste déroulante pour choisir le mois? De votre réponse découlera une réponse appropriée.
Cdlt
Bonjour, j'ai un menu déroulant pour le mois en cours et quand je choisis par exemple Mars la sélection des données glisse sur la date du 1er mars au 31 mars (mois par mois) avec une macro.
Cdlt
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Object
On Error GoTo Sortie
Application.EnableEvents = False
If Target.Address = "$H$1" Then
Application.ScreenUpdating = False
Select Case Range("H1").Value
Case "JANVIER"
Set Plage = Range("B4:E34")
Lig = 4
decalage = 0
Case "FEVRIER"
Set Plage = Range("B35:E63")
Lig = 35
decalage = -1
Case "MARS"
Set Plage = Range("B64:E94")
Lig = 64
decalage = -2
Case "AVRIL"
Set Plage = Range("B95:E1244")
Lig = 95
decalage = -3
Case "MAI"
Set Plage = Range("B125:E155")
Lig = 125
decalage = -4
Case "JUIN"
Set Plage = Range("B156:E185")
Lig = 156
decalage = -5
Case "JUILLET"
Set Plage = Range("B186:E216")
Lig = 186
decalage = -6
Case "AOUT"
Set Plage = Range("B217:E247")
Lig = 217
decalage = -7
Case "SEPTEMBRE"
Set Plage = Range("B248:E277")
Lig = 248
decalage = -8
Case "OCTOBRE"
Set Plage = Range("B278:E308")
Lig = 278
decalage = -9
Case "NOVEMBRE"
Set Plage = Range("B309:E338")
Lig = 309
decalage = -10
Case "DECEMBRE"
Set Plage = Range("B339:E369")
Lig = 339
decalage = -11
End Select
ActiveSheet.ChartObjects("Graphique 12").Activate
With ActiveChart
.PlotArea.Select
.SetSourceData Source:=Plage
.HasTitle = True
.ChartTitle.Characters.Text = Range("H1").Value
End With
ActiveChart.SeriesCollection(1).Name = "=""Cpts Visités"""
ActiveChart.SeriesCollection(2).Name = "=""Objectif"""
End If
Sortie:
Application.EnableEvents = True
End Sub
Bonjour,
Copiez ce code dans le module de la feuille, et supprimez la macro "Couleur" précédemment fournie, ainsi que l'affectation de la macro "couleur "au graphique.
En sélectionnant le mois, cela devrait tout faire dans la foulée et placer le graphique en face du mois sélectionné.
Option Compare Text
Dim LigDeb As Long, DerLig As Long, i As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Object
On Error GoTo Sortie
Application.ScreenUpdating = False
Application.EnableEvents = False
If Target.Address = "$H$1" Then
Application.ScreenUpdating = False
Select Case Range("H1").Value
Case "JANVIER"
Set Plage = Range("B4:E34")
LigDeb = 4
DerLig = 34
Case "FEVRIER"
Set Plage = Range("B35:E63")
LigDeb = 35
DerLig = 63
Case "MARS"
Set Plage = Range("B64:E94")
LigDeb = 64
DerLig = 94
Case "AVRIL"
Set Plage = Range("B95:E124")
LigDeb = 95
DerLig = 124
Case "MAI"
Set Plage = Range("B125:E155")
LigDeb = 125
DerLig = 155
Case "JUIN"
Set Plage = Range("B156:E185")
LigDeb = 156
DerLig = 185
Case "JUILLET"
Set Plage = Range("B186:E216")
LigDeb = 186
DerLig = 216
Case "AOUT"
Set Plage = Range("B217:E247")
LigDeb = 217
DerLig = 247
Case "SEPTEMBRE"
Set Plage = Range("B248:E277")
LigDeb = 248
DerLig = 277
Case "OCTOBRE"
Set Plage = Range("B278:E308")
LigDeb = 278
DerLig = 308
Case "NOVEMBRE"
Set Plage = Range("B309:E338")
LigDeb = 309
DerLig = 338
Case "DECEMBRE"
Set Plage = Range("B339:E369")
LigDeb = 339
DerLig = 369
End Select
ActiveSheet.ChartObjects("Graphique 12").Activate
With ActiveChart
.PlotArea.Select
.SetSourceData Source:=Plage
.HasTitle = True
.ChartTitle.Characters.Text = Range("H1").Value
End With
With ActiveChart.SeriesCollection(1)
For i = LigDeb To DerLig
If Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.1) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 3
Else
.Points(i - LigDeb + 1).Interior.ColorIndex = 33
End If
Next
End With
ActiveChart.SeriesCollection(1).Name = "=""Cpts Visités"""
ActiveChart.SeriesCollection(2).Name = "=""Objectif"""
End If
Range("L18").Select
If LigDeb > 39 Then
ActiveWindow.ScrollRow = LigDeb - 6
Hauteur_de_lig = Rows(4).RowHeight
ActiveSheet.ChartObjects("Graphique 12").Top = (LigDeb * Hauteur_de_lig) + 10
End If
Sortie:
Application.EnableEvents = True
End SubCdlt
Le mois sélectionné est -il rempli de données?
Bonjour,
Pourriez-vous redéposer le fichier avec les données complètes?
Mais avant remplacez le code existant par celui-ci:
Option Compare Text
Dim LigDeb As Long, DerLig As Long, i As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Object
On Error GoTo Sortie
Application.ScreenUpdating = False
Application.EnableEvents = False
If Target.Address = "$H$1" Then
Application.ScreenUpdating = False
Select Case UCase(Range("H1").Value)
Case "JANVIER"
Set Plage = Range("B4:E34")
LigDeb = 4
DerLig = 34
Case "FEVRIER"
Set Plage = Range("B35:E63")
LigDeb = 35
DerLig = 63
Case "MARS"
Set Plage = Range("B64:E94")
LigDeb = 64
DerLig = 94
Case "AVRIL"
Set Plage = Range("B95:E124")
LigDeb = 95
DerLig = 124
Case "MAI"
Set Plage = Range("B125:E155")
LigDeb = 125
DerLig = 155
Case "JUIN"
Set Plage = Range("B156:E185")
LigDeb = 156
DerLig = 185
Case "JUILLET"
Set Plage = Range("B186:E216")
LigDeb = 186
DerLig = 216
Case "AOUT"
Set Plage = Range("B217:E247")
LigDeb = 217
DerLig = 247
Case "SEPTEMBRE"
Set Plage = Range("B248:E277")
LigDeb = 248
DerLig = 277
Case "OCTOBRE"
Set Plage = Range("B278:E308")
LigDeb = 278
DerLig = 308
Case "NOVEMBRE"
Set Plage = Range("B309:E338")
LigDeb = 309
DerLig = 338
Case "DECEMBRE"
Set Plage = Range("B339:E369")
LigDeb = 339
DerLig = 369
End Select
ActiveSheet.ChartObjects("Graphique 12").Activate
With ActiveChart
.PlotArea.Select
.SetSourceData Source:=Plage
.HasTitle = True
.ChartTitle.Characters.Text = Range("H1").Value
End With
With ActiveChart.SeriesCollection(1)
For i = LigDeb To DerLig
If Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.1) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 3
Else
.Points(i - LigDeb + 1).Interior.ColorIndex = 33
End If
Next
End With
ActiveChart.SeriesCollection(1).Name = "=""Cpts Visités"""
ActiveChart.SeriesCollection(2).Name = "=""Objectif"""
End If
Range("L18").Select
If LigDeb > 39 Then
ActiveWindow.ScrollRow = LigDeb - 6
Hauteur_de_lig = Rows(4).RowHeight
ActiveSheet.ChartObjects("Graphique 12").Top = (LigDeb * Hauteur_de_lig) + 10
Else
ActiveSheet.ChartObjects("Graphique 12").Top = 70
End If
Sortie:
Application.EnableEvents = True
End SubCdlt
Super ça fonctionne j'ai vu que tu avais rajouté la ligne, juste pour info elle sert à quoi
ActiveSheet.ChartObjects("Graphique 12").Top = 70
Juste un détail pour le mois de février le tableau se mets en face de janvier!! c'est le seul mois qui ne fonctionne pas pour le positionnement du graphique
70= position haute du graphique,
La hauteur des lignes étant = 15, pour placer le graphique à la bonne hauteur, il suffit de multiplier la hauteur de lignes par 15,
le mois de janvier commence à la ligne 4, 4*15 = 60 , avec une marge supplémentaire de 10, ça fait 70, essayez d'autres valeurs et vous comprendrez.
****************************************************
A cette ligne:
If LigDeb > 39 Thenremplacez 39 par 34
******************************************************
Cdlt
Merci pour les explications une dernière petite info (uniquement si je peux rajouter une ligne sans tout modifier) est il possible de rajouter dans le code une ligne pour ajouté une couleur supplémentaire avec une autre valeur qui serait 5% par exemple, j'ai essayé ceci mais en vain
With ActiveChart.SeriesCollection(1)
For i = LigDeb To DerLig
If Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.1) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 3
End If
If Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.05) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 33
Else
.Points(i - LigDeb + 1).Interior.ColorIndex = 4
End If
Next
End With
C'était bien ça j'ai mis 34 et mes lignes font 13 pour le coup j'ai mis 60 ça fonctionne parfaitement
Merci
Cdlt
Bonjour,
Comme ceci:
With ActiveChart.SeriesCollection(1)
For i = LigDeb To DerLig
If Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.1) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 3
ElseIf Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.05) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 33
Else
.Points(i - LigDeb + 1).Interior.ColorIndex = 4
End If
Next
End WithCdlt
Edit:
Ou plutôt comme ceci:
With ActiveChart.SeriesCollection(1)
For i = LigDeb To DerLig
If Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.05) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 33
ElseIf Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.1) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 3
Else
.Points(i - LigDeb + 1).Interior.ColorIndex = 4
End If
Next
End WithMerci j'ai du inverser les lignes (10% et 5% ) autrement il ne prenait pas en compte la couleur intermédiaire.
If Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.1) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 3
ElseIf Cells(i, "D") < Cells(i, "E") - (Cells(i, "E") * 0.05) Then
.Points(i - LigDeb + 1).Interior.ColorIndex = 45
Else
.Points(i - LigDeb + 1).Interior.ColorIndex = 4Merci encore
Une bonne journée
Cdlt

