Création d’un « waffle chart » (b)
Dans
le dernier post, nous avons vu comment fonctionnait le waffle chart avec deux catégories.
Voici
aujourd’hui un exemple de waffle chart à trois catégories, ainsi que le
code VBA associé.
Le
code original est dû au MVP américain Matt Mickle. Je l’ai seulement
un peu simplifié et compacté.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim CatVal1 As Integer: Dim
CatVal2 As Integer
Dim ColLp As Integer: Dim RowLp
As Integer: Dim Cnt As Integer
Dim Cat1Color As Long: Dim Cat2Color As Long: Dim Cat3Color
As Long
If Intersect(Target,
Range("B5:C7")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
On Error Resume Next
CatVal1 = 100 *
Range("D5")
CatVal2 = 100 *
Range("D6") + CatVal1
Cat1Color =
Range("B5").Font.Color
Cat2Color =
Range("B6").Font.Color
Cat3Color =
Range("B7").Font.Color
For RowLp = 5 To 14
For ColLp = 7 To 16
Cnt = Cnt + 1
If Cnt <= CatVal1
Then
Cells(RowLp,
ColLp).Font.Color = Cat1Color
ElseIf Cnt <=
CatVal2 Then
Cells(RowLp,
ColLp).Font.Color = Cat2Color
Else
Cells(RowLp,
ColLp).Font.Color = Cat3Color
End If
Next ColLp
Next RowLp
'Change Font Color of
TextBoxes
With
Sheets("3CategoryWaffleChart")
.TextBoxes("TextBox
2").Font.Color = Cat1Color
.TextBoxes("TextBox
6").Font.Color = Cat1Color
.TextBoxes("TextBox
3").Font.Color = Cat2Color
.TextBoxes("TextBox
7").Font.Color = Cat2Color
.TextBoxes("TextBox
4").Font.Color = Cat3Color
.TextBoxes("TextBox
8").Font.Color = Cat3Color
End With
On Error GoTo 0
End Sub
4 Commentaire(s):
Bonjour,
Je ne comprends pas votre code source pour 3 catégories.
Les "Shapes" représentant les billes ont disparu ?
Cordiales salutations
By cduigou, sur 12:12 PM
Oula ! Du code vba pour faire un graph.
C'est pas que j'aime pas ca, mais quand on peut éviter je pense que c'est mieux.
Pour un utilisateur Lambda il sera bcp plus facile de s'approprier des formules que du codes.
J'ai bonne espoir que vous nous écriviez un post sur une version avec des formules pour la semaine prochaine :)
By Benji, sur 4:01 PM
Allez facile on peut même faire sans formule du tout (enfin presque).
Les données sont donc en D5, D6 et D7 comme dans l'exemple.
On créé le tableau suivant :
1 2 3 4 5 6 7 8 9 10
11 12 13 14... jusqu'à 100
On a donc un carré de 10 x 10 cellules
On peut imaginer qu'il se trouve de de G5 en P14.
On le sélectionne, on fait une mise en forme conditionnelle.
On met en forme toutes les cellules d'après leur valeur.
on prend le style de mise en forme : jeux d'icônes.
On va selectionner le type : formule
On utilise le critère : >
Pour l'icône 1, on met = GRANDE.VALEUR($D$5:$D$7;1)+GRANDE.VALEUR($D$5:$D$7;2)
Pour l'icône 2 : = GRANDE.VALEUR($D$5:$D$7;2)
On n'oublie pas de cocher la case Afficher l'icône uniquement
Voilà ca prend 1 minute et l'exemple et reproduit presque sans formule.
By Unknown, sur 7:38 PM
@cduigou
Comme je le précise dans le troisième article publié le 18/12, il ne s'agit pas de shapes mais de simples puces.
@Pierre Authier
Certes, votre solution est astucieuse, mais elle demande des formats conditionnels avec des formules. L'avantage de notre solution est qu'il suffit de coller le code VBA proposé, ce qui est rapide aussi... Une fois de plus, nous constatons qu'il y a souvent dans Excel plusieurs façons de résoudre le même problème. C'est là la grande richesse d'Excel !
By Hervé Thiriez, sur 10:22 AM
Enregistrer un commentaire
<< Accueil