Graphe à bulles à catégories (a)
{1.1.1.1.1.1.1.1.1.1.1.1.1.1.1})
- modification des deux axes pour qu’ils démarrent à 0 ;
- remplacement des couleurs par des couleurs primaires ;
- ajout d’un filet noir d’épaisseur 1.
Un lecteur, dans son commentaire, a demandé s’il ne serait pas plus utile – dans une telle situation – de faire appel à un graphe à bulles. Nous allons donc, dans cet article, comparer les deux solutions.
Création du graphe à bulles
Pour créer le graphe à bulles, il suffit de sélectionner les données en A2:C16, et d’insérer – via les commandes « Autres graphiques » puis « Bulles », le premier type de graphe à bulles.
Pour obtenir le résultat représenté à droite dans la copie d’écran ci-dessous, nous avons modifié le quadrillage naturel en prenant un pas de 10, ajouté un quadrillage vertical – lui aussi par pas de 10 – et enfin défini un diamètre des bulles à l’échelle de 30…
Comparaison des deux solutions
Le graphique à bulles est évidemment bien plus simple à créer, puisqu’il ne nécessite pas la création des formules des colonnes E à F.
Il présente en outre l’avantage que le diamètre des bulles est vraiment proportionnel aux valeurs de la colonne C, et que l’on n’est pas ainsi limité à trois catégories.
Cela peut aussi se révéler un inconvénient si l’on souhaite effectivement faire apparaître trois familles comme dans le cas de notre graphique original.
En conclusion, vous avez là deux solutions différentes, chacune avec ses avantages et ses inconvénients !
Il y a quatre jours, nous avons vu comment écrire une date en texte, avec un texte en anglais. Aujourd’hui, nous nous attaquons au problème de l’écriture de la date en français. Il ne suffit hélas pas de traduire simplement les termes anglais dans leur équivalent en français.
Nous avons ainsi en France – cela a été évité dans certains pays francophones ! – la particularité des nombres entre 70 et 80, et des nombres entre 90 et 100.
Et il y a d’autres pièges encore… Si vous vous êtes attaqués à la francisation de la macro, vérifiez bien ce que donne votre solution pour les dix premières dates de l’exemple présenté il y a quatre jours : ces dix dates comportent la plupart des pièges de la francisation…
Remarque – L'utilisation de la fonction substitue() dans les dernières lignes de la macro résout plusieurs problèmes particuliers.
Function DateToWords_US(ByVal DateIn As Variant) As String
' Auteur : Rick Rothstein ?
' Correction du mois : Hervé Thiriez
Dim Mois As String
Dim Yrs As String, Hundreds As String, Decades As String
Dim Tens As Variant, Ordinal As Variant, Cardinal As Variant
Ordinal = Array("First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh", "Eighth", "Ninth", _
"Tenth", "Eleventh", "Twelfth", "Thirteenth", "Fourteenth", "Fifteenth", "Sixteenth", _
"Seventeenth", "Eighteenth", "Nineteenth", "Twentieth", "Twenty-first", "Twenty-second", _
"Twenty-third", "Twenty-fourth", "Twenty-fifth", "Twenty-sixth", "Twenty-seventh", _
"Twenty-eighth", "Twenty-ninth", "Thirtieth", "Thirty-first")
Cardinal = Array("", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", _
"Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")
Tens = Array("Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety")
If TypeOf Application.Caller Is Range Then
' The date serial number that Excel's worksheet thinks is for 2/29/1900
' is actually the date serial number that VB thinks is for 2/28/1900
If Format([DateIn], "m/d/yyyy") = "2/28/1900" Then
DateToWords_US = "Twenty-nineth of February, One Thousand Nine Hundred"
Exit Function
ElseIf DateIn < DateSerial(1900, 3, 1) Then
If TypeOf Application.Caller Is Range Then DateIn = DateIn + 1
End If
End If
DateIn = CDate(DateIn)
Yrs = CStr(Year(DateIn))
Decades = Mid$(Yrs, 3)
If CInt(Decades) < 20 Then
Decades = Cardinal(CInt(Decades))
Else
Decades = Tens(CInt(Left$(Decades, 1)) - 2) & "-" & Cardinal(CInt(Right$(Decades, 1)))
If Right(Decades, 1) = "-" Then Decades = Left(Decades, Len(Decades) - 1)
End If
Hundreds = Mid$(Yrs, 2, 1)
If CInt(Hundreds) Then
Hundreds = Cardinal(CInt(Hundreds)) & " Hundred "
Else
Hundreds = ""
End If
Mois = Format$(DateIn, "mmmm")
Select Case Mois
Case "janvier": Mois = "January"
Case "février": Mois = "February"
Case "mars": Mois = "March"
Case "avril": Mois = "April"
Case "mai": Mois = "May"
Case "juin": Mois = "June"
Case "juillet": Mois = "July"
Case "août": Mois = "August"
Case "septembre": Mois = "September"
Case "octobre": Mois = "October"
Case "novembre": Mois = "November"
Case "décembre": Mois = "December"
End Select
DateToWords_US = Ordinal(Day(DateIn) - 1) & " of " & Mois & ", " & _
Cardinal(CInt(Left$(Yrs, 1))) & " Thousand " & Hundreds & Decades
End Function
Un petit exercice pour vous distraire : essayez de modifier cette macro pour qu’elle donne le texte de la date en français…
Remarque – Attention ! Le français est une langue plus complexe et il y aura des pièges à contourner…
Un de mes clients m’a posé récemment – cet après-midi, en fait ! – la question suivante. Il disposait des données reproduites en A1:C16, qu'il fallait représenter en nuage de points (aussi appelé graphe X/Y) avec en colonne C une mesure de la « force » de chaque point.
Le but du jeu était d’obtenir le graphe représenté ci-dessous, dans lequel un point où la force est inférieure ou égale à 33 est considéré comme « Faible », un point où elle se situe entre 34 et 66 comme « Moyen », et un point où elle dépasse 66 comme « Fort ».
Voici les formules que j’ai saisies dans la ligne 2, puis tirées vers le bas :
- en E2 : =SI($C2<=33;$B2;NA())
- en F2 : =SI(ET($C2>33;$C2<=66);B2;NA())
- en G2 : =SI($C2>66;$B2;NA())
Pour créer le graphe, sélectionnez A1:A16, puis – en maintenant la touche [Ctrl] enfoncée – le bloc E1:G16 et insérer un graphe en nuage de points.
Vous obtenez alors – à la présentation près, que j’ai un peu améliorée – le résultat ci-dessous.