graphique à double entrée pour gérer des références selon 2 variables

galesjean

XLDnaute Nouveau
Bonjour,

A partir d'un tableau comportant pour plusieurs références des valeurs de poids et de gras maximales et minimales, je cherche à représenter sous forme de graphique ces références en ayant en ordonnée la variable gras et en abcisse la variable poids.

en utilisant les histogrammes compilés je sais le faire pour une variable en créant une colonne poids max - poids min mais est-ce faisable en mettant la deuxième variable en abcisse.
Dans ce cas, il me faut alors changer la couleur du rectangle de chaque référence.

voir le fichier excel joint et l'image de ce que je cherche à obtenir

Merci

Jean
 

Pièces jointes

  • histogramme double entrée.xlsx
    13.3 KB · Affichages: 133
  • graphique double entrée.jpg
    graphique double entrée.jpg
    15.8 KB · Affichages: 284
  • histogramme double entrée.xlsx
    13.3 KB · Affichages: 144
  • histogramme double entrée.xlsx
    13.3 KB · Affichages: 149

CB60

XLDnaute Barbatruc
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonjour
de cette façon peut etre?
 

Pièces jointes

  • histogramme double entrée.xlsx
    13.4 KB · Affichages: 141
  • histogramme double entrée.xlsx
    13.4 KB · Affichages: 145
  • histogramme double entrée.xlsx
    13.4 KB · Affichages: 125

Misange

XLDnaute Barbatruc
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonjour, coucou Bruno

je ne vois que cluster de Promodomosua qui ressemble à ce que tu souhaites
fernando cinquegrani, pagine personali, office (en italien)
mais je ne pourrai pas t'aider sur sa mise en oeuvre.

Sinon des "vrais" histogrammes, avec une surface proportionnelle aux données ??
Ce lien n'existe plus
Ce lien n'existe plus
Ce lien n'existe plus
 

Modeste geedee

XLDnaute Barbatruc
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonsour®
je ne vois que cluster de Promodomosua qui ressemble à ce que tu souhaites
fernando cinquegrani, pagine personali, office (en italien)
mais je ne pourrai pas t'aider sur sa mise en oeuvre.

par macro il est possible de dimensionner des objets et de les positionner par rapport à un référentiel...

le soucis évident, vient de la gestion dynamique des différents éléments.
échelle de grandeur des objets, gestion et cohérence des axes référentiels.

une tentative de représentation pour illustrer le concept :
superposition des objets à un graphe vide.

:confused: il faut être illuminé et quelque peu insensé pour se lancer dans de telles élucubrations...
mais c'est une bonne gymnastique pour mon camarade Aloïsius Zehm...
;)

à bon entendeur ... je livre l'ébauche .
=<8-o]++=:|
 

Pièces jointes

  • Capture.jpg
    Capture.jpg
    48.3 KB · Affichages: 216
  • histogramme double entrée.xlsm
    28 KB · Affichages: 98
  • Capture.jpg
    Capture.jpg
    48.3 KB · Affichages: 223
  • histogramme double entrée.xlsm
    28 KB · Affichages: 96
  • Capture.jpg
    Capture.jpg
    48.3 KB · Affichages: 171
  • histogramme double entrée.xlsm
    28 KB · Affichages: 92

galesjean

XLDnaute Nouveau
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonjour et merci à tous pour vos réponses.

misange, je pense y arriver en adaptant ta proposition, par contre comment faire pour remplacer les ovales par des rectangles dans la marco ?

merci
 

Modeste geedee

XLDnaute Barbatruc
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonsour®
comment faire pour remplacer les ovales par des rectangles dans la macro ?

:rolleyes:
voilà c'est fait ... il suffisait de modifier chaque forme.

quelques petites simplifications :
plus de graphique caché.

je le répète c'est un exercice pour le fun :cool:
son adaptation automatique à toutes plages de grandeurs différentes , demanderai beaucoup plus de réflexions.

selon les résolutions d'écran et polices par défaut il est possible (probable) que les quadrillages soient fantaisistes, et je ne parle pas d'impression...
 

Pièces jointes

  • histogramme double entrée.xlsm
    26.7 KB · Affichages: 112
  • Capture.jpg
    Capture.jpg
    53.9 KB · Affichages: 307
  • histogramme double entrée.xlsm
    26.7 KB · Affichages: 109
  • Capture.jpg
    Capture.jpg
    53.9 KB · Affichages: 306
  • histogramme double entrée.xlsm
    26.7 KB · Affichages: 102
  • Capture.jpg
    Capture.jpg
    53.9 KB · Affichages: 312

galesjean

XLDnaute Nouveau
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonjour,

Pour aller plus, je souhaite insérer directement les formes par une macro à partir de la première colonne du tableau (une forme par référence).
J'ai tenté en adaptant l'exemple suivant Les images et shapes mais je m'y perds un peu avec son arborescence alors que je cherche juste à créer toutes les formes puis les gérer par le code de Modeste Geedee qui fonctionne très bien.

merci de vos réponses

@+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonjour galesjean, Misange, CB60, Modeste geedee,

(...) Pour aller plus, je souhaite insérer directement les formes par une macro à partir de la première colonne du tableau (une forme par référence) (...)

Un essai par macro dans le fichier joint.

1) Réorganisation des données
Un nouveau tableau a été créé à partir du tableau de départ en A9:A15. Ces colonnes représentent:
  • colonne 1 -> les noms des points
  • colonne 2 -> le point milieu entre les poids mini et maxi
  • colonne 3 -> le point milieu entre les gras mini et maxi
  • colonne 4 -> la valeur de l'intervalle pour le poids
  • colonne 5 -> la valeur de l'intervalle pour le gras
  • Les cellules A9 et A10 sont des variables pour dimensionner les formes

2) Création du graphique
On a créé un graphique de base en nuage de points. C'est ce graphique qui figure dans le fichier.
Pour le créer (dans le fichier joint c'est déjà fait):
  • sélectionner les cellules B11:C15 du nouveau tableau (colonnes X et Y sans les titres)
  • menu Insertion / icone nuage / premier graphique (juste les points, sans trait)
  • supprimer dans le graphique la légende
  • redimensionner les axes pour que les points soient à peu près au centre du graphique
  • modifier la série pour que les marqueurs soient sans contour et de couleur de remplissage gris clair

3) Lancer la macro en cliquant sur le bouton "Ajouter forme":
  • La macro ouvre une fenêtre demandant de sélectionner la courbe à traiter. Il faut aller sur le graphique et sélectionner la courbe en cliquant sur un de ses points. Vérifier que tous les points de la courbe sont sélectionnés et pas seulement un seul de ses points.
  • Cliquer sur OK dans la fenêtre restée ouverte.
  • La macro demande ensuite de sélectionner les cellules contenant les données. Sélectionner la zone A11:E15 (rectangle vert) puis cliquer sur OK.

Nota1:
Si les formes sont créées et si vous relancez la macro, il se peut que les points de la courbes ne soient pas visibles car cachés par les formes. Dans ce cas, déplacez ou effacez une ou des formes pour retrouver un point de la courbe et pouvoir ainsi sélectionner la courbe.

Nota2:
les cellules A9 et A10 contiennent un facteur d'échelle pour le tracé des formes.
Si chacun des coeff. vaut 1, alors la largeur et la hauteur des formes sont conformes à l'échelle des axes des X et Y. Mais le résultat n'est pas toujours "joli".
Ces deux coeff. - modifiables par l'utilisateur - permettent d'agrandir ou de rétrécir les dimensions de la forme (dans ce cas, si coeffX <>1 ou coeffY <>1, la largeur et/ou la hauteur ne sont plus lisibles directement)

Nota3:
Les couleurs de fond et de police des formes sont celles de leur légendes dans le nouveau tableau (première colonne du tableau). Le formatage des cellules de cette 1ière colonne est retranscrit sur le format des formes associées au sein du graphique.

Nota4:
Le redimensionnement ou déplacement du graphique, des colonnes ou lignes de la feuille sont possibles; les formes suivent.

Nota5:

Un changement dans les axes du graphique (min , max) nécessite de relancer la macro.

Edit: corrigé v2.

Le code dans module1:
VB:
Option Explicit

Public Courbe As Series
Public Graphique As Chart

Sub Depart()
  UserForm1.Show vbModeless
End Sub

Sub Suite()
Dim rgData As Range, tabData
Dim echelleX As Single, echelleY As Single

'Identification du graphique de la courbe
Set Graphique = Courbe.Parent.Parent

'récupération des données
On Error Resume Next
Set rgData = Application.InputBox("Sélectionnez les données relatives à la courbes" & _
vbLf & "(X, Y, Largeur, Hauteur) :?", Type:=8)
If rgData Is Nothing Then
  MsgBox "Plage de données incorrecte => Echec"
  Exit Sub
End If
On Error GoTo 0
'tableau des données
tabData = rgData.Value

'Quelques données
Dim tailAxeX, minX, maxX
Dim tailAxeY, minY, maxY
Dim LargeurX, HauteurY

echelleX = rgData(1, 1).Offset(-2)
echelleY = rgData(1, 1).Offset(-1)
tailAxeX = Graphique.PlotArea.Width
tailAxeY = Graphique.PlotArea.Height
minX = Graphique.Axes(xlCategory).MinimumScale
maxX = Graphique.Axes(xlCategory).MaximumScale
LargeurX = maxX - minX
minY = Graphique.Axes(xlValue).MinimumScale
maxY = Graphique.Axes(xlValue).MaximumScale
HauteurY = maxY - minY

' Tri du tableau des données
' on ajoute deux colonnes
Dim i&, j&, aux
ReDim Preserve tabData(1 To UBound(tabData), 1 To 7)
' on calcule la surface et on la rajoute au tableau
' ainsi que numéro du point
For i = 1 To UBound(tabData)
  tabData(i, 6) = tabData(i, 4) * tabData(i, 5)
  tabData(i, 7) = i
Next i
' on trie le tableau de la plus grande surface à la plus petite
' pour ensuite créer les formes dans cette ordre
Dim ech As Boolean
ech = False
Do
  ech = False
  For i = 1 To UBound(tabData) - 1
    If tabData(i + 1, 6) > tabData(i, 6) Then
      ech = True
      For j = 1 To 7
        aux = tabData(i, j)
        tabData(i, j) = tabData(i + 1, j)
        tabData(i + 1, j) = aux
      Next j
    End If
  Next i
Loop Until Not ech

'Boucle sur les points de la série
Dim xpt As Point, xshp As Shape, Rect As Shape, xrg As Range
For i = 1 To UBound(tabData)
  'on efface le rectangle existant
  For Each xshp In Graphique.Shapes
    If xshp.Name = "surf-" & tabData(i, 1) Then xshp.Delete
  Next xshp
  'on re-crée le rectangle correspondant
  Set Rect = Graphique.Shapes.AddShape(msoShapeRectangle, 10, 10, 20, 10)
  Rect.Name = "surf-" & tabData(i, 1)
  'largeur du rectangle
  Rect.Width = tabData(i, 4) / LargeurX * Graphique.Axes(xlCategory).Width * echelleX
  'hauteur du rectangle
  Rect.Height = tabData(i, 5) / HauteurY * Graphique.Axes(xlValue).Height * echelleY
  'position Top du rectangle
  Rect.Top = Courbe.Points(tabData(i, 7)).Top + Courbe.Points(tabData(i, 7)).Height / 2 - Rect.Height / 2
  'position left du rectangle
  Rect.Left = Courbe.Points(tabData(i, 7)).Left + Courbe.Points(tabData(i, 7)).Width / 2 - Rect.Width / 2
  'Couleur de la forme
  With Rect.Fill
    Set xrg = rgData(tabData(i, 7), 1)
    .ForeColor.RGB = xrg.Interior.Color
    .Transparency = 0.33
  End With
  'Texte de la forme et sa couleur
  Rect.TextFrame2.TextRange.Text = tabData(i, 1)
  Rect.TextFrame2.TextRange.Characters(1, Len(tabData(i, 1))).Font.Fill.ForeColor.RGB = xrg.Font.Color
  'positionnement du texte
  Rect.TextFrame2.VerticalAnchor = msoAnchorMiddle
  Rect.TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
  Rect.TextFrame2.TextRange.Font.Bold = msoTrue
Next i
Application.Goto ThisWorkbook.ActiveSheet.Range("A1"), True
End Sub
 

Pièces jointes

  • histogramme double entrée v2.xlsm
    54.8 KB · Affichages: 76
Dernière édition:

galesjean

XLDnaute Nouveau
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonjour,

je vous remercie pour vos réponses.

Aidé bien aidé, je suis resté sur la proposition de Geedee, je vous joint le résultat.

merci Mapomme, je garde ça en stock.
 

Pièces jointes

  • VBA double entrée.xlsm
    35.2 KB · Affichages: 81
  • VBA double entrée.xlsm
    35.2 KB · Affichages: 73
  • VBA double entrée.xlsm
    35.2 KB · Affichages: 69

Modeste geedee

XLDnaute Barbatruc
Re : graphique à double entrée pour gérer des références selon 2 variables

Bonsour®
je vous joint le résultat.

merci Mapomme, je garde ça en stock.

quelques petites modifs pour éviter que la macro ne modifie le bouton "Actualiser"
 

Pièces jointes

  • VBA double entrée.xlsm
    39.1 KB · Affichages: 73
  • VBA double entrée.xlsm
    39.1 KB · Affichages: 86
  • VBA double entrée.xlsm
    39.1 KB · Affichages: 96

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 250
Membres
103 165
dernier inscrit
thithithi78