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
 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
 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
 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
 Hervé Thiriez, sur 10:22 AM
	   
Enregistrer un commentaire
<< Accueil