Monsieur Excel
Pour tout savoir faire sur Excel !

13 décembre 2016

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 Anonymous 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 Blogger 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 Blogger 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 Blogger Hervé Thiriez, sur 10:22 AM  

Enregistrer un commentaire

<< Accueil