Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Courbe personnalisée ajoutée sur un GCD

  • Initiateur de la discussion Initiateur de la discussion Simon85
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

Simon85

Guest
Bonjour à tous.

J'ai un petit problème que je n'arrive pas à résoudre sur excel et ça commence à me faire **bip**... 🙂
J'ai un tableau de valeurs quelconques (nombre de défaut disons) correspondant à différents types de produits (c'est peu clair mais vous trouverez un exemple en PJ un peu plus explicite).
De ce tableau je tire un GCD en colonne et je voudrais tirer un trait sur ce graphique qui représente la moyenne des défauts des produits, mais impossible de trouver une tactique qui fonctionne.

Je pensais rajouter une droite créée par une équation établie mais...

Merci d'avance
 

Pièces jointes

Dernière modification par un modérateur:
Re : Courbe personnalisée ajoutée sur un GCD

Bonjour Simon85, tdenfert,

La solution donnée par tdenfert est de loin la plus simple et doit suffire.

Voici cependant un exemple de ce que l'on peut faire en VBA avec les objets d'un graphique.

La macro positionne la shape Line 1 et la 1ère étiquette de donnée :

Code:
Sub PositionObjets()
Dim y1#, y2#, mini#, maxi#, pos#
With ActiveSheet.ChartObjects(1).Chart
  y1 = .Axes(xlCategory).Top 'position axe des x
  y2 = .PlotArea.Top + 8 'position du maximum
  mini = .Axes(xlValue).MinimumScale 'échelle des ordonnées
  maxi = .Axes(xlValue).MaximumScale
  pos = y1 - [Moyenne] * (y1 - y2) / (maxi - mini)
  .Shapes("Line 1").Top = pos 'adapter le nom de la shape
  .SeriesCollection(1).Points(1).DataLabel.Top = pos - 15 'étiquette
End With
End Sub
Fichier joint. La macro s'exécute chaque fois qu'on modifie une cellule de la feuille.

A+
 

Pièces jointes

Re : Courbe personnalisée ajoutée sur un GCD

Re,

La formule n'était pas bonne quand on modifie le minimum de l'échelle.

Ecrire :

Code:
pos = y1 - ([Moyenne] - mini) * (y1 - y2) / (maxi - mini)
Voir fichier (2).

A+
 

Pièces jointes

Re : Courbe personnalisée ajoutée sur un GCD

Bonjour le fil, le forum,

Pour être complet, il faut imposer que l'axe des x coupe au niveau du minimum :

Code:
.Axes(xlValue).CrossesAt = mini
Fichier (3).

A+
 

Pièces jointes

Re : Courbe personnalisée ajoutée sur un GCD

Re,

On peut peaufiner l'étiquette :

Code:
With .SeriesCollection(1).Points(1).DataLabel 'étiquette
  .Top = pos - 15
  .Text = "moyenne " & Format([Moyenne], "0.00")
  '.Text = "moyenne " & [Moyenne].Text 'format de la cellule
End With
Fichier (4).

A+
 

Pièces jointes

Dernière édition:
Re : Courbe personnalisée ajoutée sur un GCD

😱 waw, là sincèrement job, j'en reste bouche bée.
Merci bcp, c'est superbe MAIS... (lol, dsl je suis vraiment nul)

En fait j'aimerais pouvoir appliquer cette macro à des tableaux différents (en fait un TCD où le nombre de colonnes varie). C'est possible ? Parce que j'essaie de sélectionner les données que je veux et d'appliquer la macro mais rien ne se passe. Je suis vraiment un pur débutant, et je m'en excuse mais si vous aviez encore un peu de temps à m'accorder, je ne dirais pas non...
Merci d'avance
 
Dernière modification par un modérateur:
Re : Courbe personnalisée ajoutée sur un GCD

Re,

Merci pour le fichier, et que voulez-vous en faire maintenant 😕

Je veux bien donner des solutions, mais si en plus il faut poser le problème...

A+
 
Re : Courbe personnalisée ajoutée sur un GCD

Re,

Ben dites donc, ce n'est pas rien...

Je vais voir, mais en attendant j'ai concocté une version (5) qui me paraît meilleure.

Il faut créer une série (type "Courbes") avec un seul point (la moyenne).

On utilise la position de son étiquette de données :

Code:
Sub PositionObjets()
Dim W#, X#, Y#
With ActiveSheet.ChartObjects(1).Chart
  W = .PlotArea.InsideWidth 'zone de traçage
  X = .PlotArea.InsideLeft
  With .SeriesCollection("Série2").Points(1).DataLabel 'étiquette
    .Position = xlLabelPositionRight 'à droite du point
    Y = .Top
    .Left = X + 10 '10 ou plus...
    .Top = Y - 7
    .Text = "moyenne " & Format([Moyenne], "0.00")
    '.Text = "moyenne " & [Moyenne].Text 'format de la cellule
  End With
  With .Shapes("Line 1") 'nom de la shape à adapter
    .Width = W
    .Left = X
    .Top = Y + 8 'le 8 dépend peut-être des versions...
  End With
End With
End Sub
A+
 

Pièces jointes

Re : Courbe personnalisée ajoutée sur un GCD

Re,

1) Comme déjà dit je ne suis pas expert en TCD, mais il est facile de calculer la moyenne.

Entrez en F15 cette formule :

Code:
=RECHERCHEV("Total";E:J;6;0)/(EQUIV("Total";E:E;0)-EQUIV("Objet";E:E;0)-1)

2) Pour utiliser ma version (5) il me faut créer une série (un point).

Comment dois-je faire, impossible d'accéder aux séries 😕

3) Ici la macro devra être exécutée par une Worksheet_Calculate.

A+
 
Re : Courbe personnalisée ajoutée sur un GCD

Bonsoir Simon,

Pour éviter de créer une série, j'utilise la version (4).

Mais je l'ai quelque peu améliorée :

Code:
Sub PositionObjets()
Dim W#, X#, Y#, y1#, y2#, mini#, maxi#
On Error Resume Next 'la moyenne peut être une valeur d'erreur
With ActiveSheet.ChartObjects(1).Chart
  W = .PlotArea.InsideWidth
  X = .PlotArea.InsideLeft
  y1 = .PlotArea.InsideTop 'position du maximum
  y2 = y1 + .PlotArea.InsideHeight 'position du minimum
  maxi = .Axes(xlValue).MaximumScale 'échelle des ordonnées
  mini = .Axes(xlValue).MinimumScale
  Y = y2 - ([Moyenne] - mini) * (y2 - y1) / (maxi - mini)
  With .Shapes("Line 1") 'adapter le nom de la shape
    .Visible = Err = 0 'masquée si erreur
    .Width = W
    .Left = X
    .Top = Y
  End With
  With .SeriesCollection(1).Points(1)
    .ApplyDataLabels 'affiche l'étiquette de données
    With .DataLabel
      .Left = X + 10 'ou plus
      .Top = Y - 15
      .Text = "moyenne " & Format([Moyenne], "0.00")
      '.Text = "moyenne " & [Moyenne].Text 'format de la cellule
      .Font.FontStyle = "Italique" '"Normal"
      .Font.ColorIndex = 7 'mauve
    End With
  End With
End With
End Sub
Fichier (6).

A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…