4 variables dans un diagramme à bulles ?

mimipanzer

XLDnaute Nouveau
Bonjour à tous !

Mon boss m'a demandé de lui produire un graphique qui lui permette d'avoir une vue générale des projets en cours.
J'ai 4 informations par projet :
- son nom
- sa importance (élevée / moyenne / faible)
- son degré de complexité (complexe / simple)
- une évaluation de son coût sur une échelle de 1 à 5.

Il veut absolument que ça ait la forme d'un diagramme à bulles, sauf qu'on a uniquement 3 variables pour ce type de diagramme. Idéalement, il souhaiterais en plus que l'importance soit matérialisée par la couleur de la bulle.

J'ai tourné le truc dans tous les sens, j'ai cherché pendant pas mal de temps et je ne trouve pas de solution "simple". Est-ce que vous voyez une astuce ou est-ce qu'il faut nécessairement faire une macro (ce que je ne sais pas du tout faire :'(

Merci de votre aide.

Emilie
 

Misange

XLDnaute Barbatruc
Re : 4 variables dans un diagramme à bulles ?

Bonjour
Un essai en PJ
Ne nom est utlisé comme légende et ajouté grace à l'addin gratuit de Rob Bovey que tu trouves ici
The XY Chart Labeler Add-in
la surface des bulles est proportionnelle au coût
Pour la couleur, il faut obligatoirement passer par une macro pour mettre en rouge les projets importants.
Tu dois bien entendu coder avec une échelle numérique l'importance et la complexité.
 

Pièces jointes

  • bubulles.xlsx
    14.3 KB · Affichages: 248

mimipanzer

XLDnaute Nouveau
Re : 4 variables dans un diagramme à bulles ?

Merci beaucoup pour ces éléments de réponse !

J'ai fait pas mal de test avec, et j'ai trouvé une astuce pour rendre le tout lisible. J'ai laissé tomber l'idée d'avoir une échelle numérique en abscisse, ça me permet d'avoir toutes les bulles les unes à côté des autres, pour éviter la superposition [c'est plus clair en regardant en PJ !]. Quand on a beaucoup de données avec des valeurs identiques en abscisses ou en ordonnées, les bulles se superposent et ça devient vite illisible... L'outil doit permettre d'avoir une vue générale des projets, il faut que ça reste clair, même si ça a pas vraiment de sens mathématiquement.

Maintenant mon problème, c'est de mettre en relief ma dernière information - en l'occurence le degré d'importance d'un projet. Il faudrait pour ça attribuer une couleur aux bulles en fonction d'une variable qui n'entre pas dans les datas du graph lui-même. J'ai pas mal cherché et j'ai trouvé beaucoup de scripts, si je devine une partie des instructions, je n'arrive malheuresement pas à en faire quelque chose pour l'adapter à mon cas... :'(

Est-ce que vous pourriez m'aider à adapter le code pour ma situation ?

Voici un des exemples intéressants que j'ai trouvé mais que je ne sais pas réutiliser pour mon document :

Code:
Sub couleur_texte_fond()
 Application.ScreenUpdating = False
 ActiveChart.Axes(xlCategory).Select
 'ActiveChart.Axes(xlCategory).MinimumScale = 0
 ActiveChart.Axes(xlValue).TickLabels.Font.Size = 7
 ActiveChart.Axes(xlCategory).TickLabels.Font.Size = 7
 '--titres
 With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = Sheets("data").Cells(2, 2) & "/" & Sheets("data").Cells(2, 3)
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Sheets("data").Cells(2, 2)
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Sheets("data").Cells(2, 3)
 End With
 '
 ActiveChart.Axes(xlValue).HasMajorGridlines = True
 ActiveChart.Axes(xlCategory).HasMajorGridlines = True
 ActiveChart.SeriesCollection(1).Select
 Selection.Has3DEffect = True
 ActiveChart.SeriesCollection(1).DataLabels.Select
 Selection.Font.Size = 7
 Nb_points = ActiveChart.SeriesCollection(1).Points.Count
 For i = 1 To Nb_points
   '---- texte
   ActiveChart.SeriesCollection(1).Points(i).DataLabel.Select
   Selection.Text = Sheets("data").Cells(i + 2, 1) & ": " & Sheets("data").Cells(i + 2, 4) & " K"
   Selection.Interior.ColorIndex = Sheets("data").Cells(i + 2, 4).Interior.ColorIndex
   Selection.Font.ColorIndex = Sheets("data").Cells(i + 2, 4).Font.ColorIndex
   '-- couleur graphe
   ActiveChart.SeriesCollection(1).Points(i).Select
   Selection.Interior.ColorIndex = Sheets("data").Cells(i + 2, 4).Interior.ColorIndex
 Next i
 On Error Resume Next
 ActiveChart.Legend.Delete
End Sub

Merci beaucoup :)

Emilie
 

Pièces jointes

  • bubulles.xlsm
    18 KB · Affichages: 147

mimipanzer

XLDnaute Nouveau
Re : 4 variables dans un diagramme à bulles ?

Merci pour ce lien (que j'avais déjà compulsé d'ailleurs ^^).

Par contre, je suis une nouille et je ne comprends pas très bien (et j'aime bien comprendre et apprendre de nouevaux trucs) :

- à quoi ça sert de mettre des noms de champ dynamique ? et ou est-ce que je place la formule DECALER ?

- à quel endroit faut-il rentrer cette instruction : =SERIE(;GrapheBulleEtiquettes2.xls!Croissance;GrapheBulleEtiquettes2.xls!CAavant;1;
GrapheBulleEtiquettes2.xls!CA)

- enfin, en testant directement le script tel quel, j'ai un décalage entre l'étiquette et la bulle (en gros, l'étiquette d'une bulle correspond en fait à la bulle d'avant).

Désolée...

Merci :)

Emilie
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : 4 variables dans un diagramme à bulles ?

-Les noms de champ dynamiques permettent au graphique de s'agrandir automatiquement si on ajoute des éléments. Ce n'est pas obligatoire ( Sur l'exemple en pj, les noms de champ ne sont pas dynamiques)
-La macro permet de modifier les étiquettes et la couleur des bulles.
-La couleur des bulles est déterminée par la couleur des cellules.

http://boisgontierjacques.free.fr/fichiers/graphe/GrapheBulleEtiquettesSimple.xls

Code:
Sub Etiquettes()
  ActiveSheet.ChartObjects(1).Activate
  ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowLabel
  ActiveChart.SeriesCollection(1).DataLabels.Font.Size = 7
  ActiveChart.SeriesCollection(1).DataLabels.Border.LineStyle = xlNone
  With ActiveChart.SeriesCollection(1)
    For i = 1 To .Points.Count
      .Points(i).DataLabel.Characters.Text = Range("projet")(i) & ":  " & Range("cout")(i) & " kE"
      .Points(i).DataLabel.Interior.ColorIndex = Range("importance")(i).Interior.ColorIndex
      .Points(i).Interior.ColorIndex = Range("importance")(i).Interior.ColorIndex
    Next i
  End With
End Sub

JB
 

Pièces jointes

  • bubulles.xls
    48.5 KB · Affichages: 120
  • bubulles2.xls
    46 KB · Affichages: 127
Dernière édition:

mimipanzer

XLDnaute Nouveau
Re : 4 variables dans un diagramme à bulles ?

Bonjour !

Merci beaucoup ! Je comprends mieux et j'ai pu adapter un peu ce que vous m'avez gentiment suggéré pour obtenir exactement ce que je veux.

Il me reste maintenant un dernier problème dont j'ignore pour le coup vraiment la cause. Dès que j'utilise une mise en forme conditionnelle pour déterminer la couleur des cellules "Importance", la macro ne fonctionne plus... Y a-t-il quelque chose à ajouter dans la macro pour qu'elle fonctionne avec une mise en forme conditionnelle ?
J'ai mis le document final que je vais utiliser en PJ.

Emilie
 

Pièces jointes

  • Dernière version.xls
    56 KB · Affichages: 124
  • Dernière version.xls
    56 KB · Affichages: 116
  • Dernière version.xls
    56 KB · Affichages: 82

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : 4 variables dans un diagramme à bulles ?

Bonjour,

-Avec Excel2010+, utiliser Color au lieu de ColorIndex.

Code:
Sub Etiquettes()
  ActiveSheet.ChartObjects(1).Activate
  ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowLabel
  ActiveChart.SeriesCollection(1).DataLabels.Font.Size = 7
  ActiveChart.SeriesCollection(1).DataLabels.Border.LineStyle = xlNone
  With ActiveChart.SeriesCollection(1)
    For i = 1 To .Points.Count
      .Points(i).DataLabel.Characters.Text = ActiveSheet.Cells(i + 1, 1)
      .Points(i).Interior.Color = Range("importance")(i).Interior.Color
    Next i
  End With
End Sub

Le programme ne reconnaît pas les couleurs de MFC:
-Les conditions et les couleurs pourraient être introduites dans la macro.
-Une colonne supplémentaire pourrait contenir les nos de couleur calculés par formule(comme les conditions de la MFC)

JB
 

Pièces jointes

  • Dernière version.xls
    60 KB · Affichages: 83
  • Dernière version.xls
    60 KB · Affichages: 79
  • Dernière version.xls
    60 KB · Affichages: 82
Dernière édition:

mimipanzer

XLDnaute Nouveau
Re : 4 variables dans un diagramme à bulles ?

Bonjour,

merci pour l'explication.
Au cas oû une autre personne aurait besoin d'une solution pour appliquer une mise en forme conditionnelle, et qui aurait besoin de plus de 3 conditions, il y a la super méthode de "My dear friend" : mDF MFCmultiples v5.0 - VBA Divers - mDF Tutoriels - Téléchargements : myDearFriend! Excel Pages

Je l'ai appliquée et le résultat de son application à mon précédent document est en PJ.

Merci encore de votre aide, j'ai appris de nouvelles choses. Je vais essayer de mettre des champs dynamiques maintenant :)

Bonne journée !

Emilie
 

Pièces jointes

  • Presque dernière version v2.xls
    101.5 KB · Affichages: 90

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : 4 variables dans un diagramme à bulles ?

Il y a plus simple

-Il n'y a pas besoin de MFC

-Créer un champ nommé Couleurs avec 1,2,3,....
Les bulles & les zones du champ importance seront coloriés par Etiquettes

Code:
Sub Etiquettes()
  ActiveSheet.ChartObjects(1).Activate
  ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowLabel
  ActiveChart.SeriesCollection(1).DataLabels.Font.Size = 7
  ActiveChart.SeriesCollection(1).DataLabels.Border.LineStyle = xlNone
  With ActiveChart.SeriesCollection(1)
    For i = 1 To .Points.Count
      .Points(i).DataLabel.Characters.Text = Range("projet")(i)
       Range("importance")(i).Interior.Color = [Couleurs].Find(Range("importance")(i), LookAt:=xlWhole).Interior.Color
      .Points(i).Interior.Color = Range("importance")(i).Interior.Color
    Next i
  End With
End Sub

En option, la MFC (le champ importance est colorié dès la frappe de 1,2,3)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([importance], Target) Is Nothing Then
    Application.EnableEvents = False
    On Error Resume Next
    Target.Interior.Color = [couleurs].Find(Target, LookAt:=xlWhole).Interior.Color
    Application.EnableEvents = True
  End If
End Sub

La mise en forme conditionnelle pour plus de 3 champs

JB
 

Pièces jointes

  • GrapheBulles3.xls
    55 KB · Affichages: 146
Dernière édition:

mimipanzer

XLDnaute Nouveau
Re : 4 variables dans un diagramme à bulles ?

Bonjour !

J'ai encore quelques petites questions. J'ai appliqué des plages de données variables à mon graphique. Maintenant, j'ai besoin de dupliquer la méthode au sein d'un même document.
Autrement dit, il faut que j'arrive à avoir deux (ou plus) graphiques différents avec deux sources de données distinctes (ou plus). Pour créer les graphiques, j'ai bien pris soin de remplacer dans SERIE() les noms des plages. Par contre, pour la macro comment dois-je la réécrire pour qu'à chaque graphique elle applique bien les bonnes données aux étiquettes et qu'elle récupère les bonnes couleurs et les affecte aux bonnes bulles ?

Question subsidiaire, j'ai besoin au final d'avoir une page rassemblant uniquement les graphiques de chaque des sources de données. J'ai pensé faire un enregistrement de macro qui consisterait à copier en image chacun des graphiques et à les coller sur une même page, sauf que je me dis que ça ne fonctionnera peut-être plus dès qu'on changera une donnée et que le graphique changera de même. De quelle manière pensez-vous qu'il faille procéder ?

Merci encore beaucoup pour votre aide :)

Bonne journée,

Emilie Fuentes
 

Discussions similaires

Statistiques des forums

Discussions
312 582
Messages
2 089 951
Membres
104 314
dernier inscrit
Tuubibumi