XL 2016 Flèches de tendance + Pourcentage

Nikita

XLDnaute Nouveau
Bonjour à tous,

Je travail actuellement sur un fichier qui va me servir à faire un rapport à mes clients.

Mon but est de comparer deux colonnes (Consommation d'eau 2016 et 2017), de mettre en pourcentage la différence entre celles-ci et d'ajouter une flèche de tendance dans la même cellule.

Vous trouverez dans mon fichiers ci-joint les prémices de mon travail :
  • Colonne G : évolution grâce à la police "Wingdings 3". La flèche ne me plait guère et je n'arrive pas à ajouter mon pourcentage à la suite de celle-ci
  • Colonne H : formule + mise en forme conditionnelle. Je dois me louper dans ma mise en forme care je n'arrive pas à afficher la flèche rouge vers le bas lorsque le pourcentage est en négatif.
Si une âme charitable passe par là, je suis preneur !

A+
 

Pièces jointes

  • Test tendance.xlsx
    16.5 KB · Affichages: 52
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Nikita,

Il n'est pas possible de formater différemment les caractères renvoyés par une formule.

Reste la solution par MFC et le jeu d'icônes, voyez le fichier joint.

A+
 

Pièces jointes

  • Test tendance(1).xlsx
    22.1 KB · Affichages: 74

job75

XLDnaute Barbatruc
Bonjour Nikita, le forum,
Il n'est pas possible de formater différemment les caractères renvoyés par une formule.
Oui mais avec VBA on évite les formules et on peut mettre en forme les textes concaténés :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, x$
With ListObjects(1).DataBodyRange 'tableau Excel
  Set r = Intersect(Target, Union(.Columns(2), .Columns(4)))
  If r Is Nothing Then Exit Sub
  Set r = Intersect(r.EntireRow, .Columns(2))
End With
Application.ScreenUpdating = False
For Each r In r 'si entrées multiples (copier-coller)
  r(1, 5).Font.Name = "Consolas" 'RAZ, police à chasse fixe pour un bon alignement
  r(1, 5).Font.Size = r.Font.Size - 0.5 'RAZ
  r(1, 5).Font.ColorIndex = xlAutomatic 'RAZ
  If IsNumeric(r) And r <> 0 And IsNumeric(CStr(r(1, 3))) Then
    x = Format(r(1, 3) / r - 1, "0%")
    If Left(x, 1) = "-" Then 'valeur < 0
      r(1, 5) = "ê" & String(6 - Len(x), " ") & x
      r(1, 5).Characters(1, 1).Font.ColorIndex = 3 'rouge
    Else 'valeur >= 0
      r(1, 5) = "é" & String(6 - Len(x), " ") & x
      r(1, 5).Characters(1, 1).Font.ColorIndex = 10 'vert
    End If
    r(1, 5).Characters(1, 1).Font.Name = "Wingdings"
    r(1, 5).Characters(1, 1).Font.Size = r.Font.Size + 1
  Else
    r(1, 5) = ""
  End If
Next
End Sub
Fichier .xlsm joint.

Bonne journée.
 

Pièces jointes

  • Test tendance VBA(1).xlsm
    32.4 KB · Affichages: 55

Nikita

XLDnaute Nouveau
Salut job75,

Merci pour le boulot, jolie résultat !

La solution avec la mise en forme conditionnelle me semble la plus simple mais je ne suis pas ravie du "design" des flèches (oui je suis pointilleux). Sais-tu s'il est possible de les modifier ?

Cordialement.
 

job75

XLDnaute Barbatruc
Re,

Salut D.D., oui c'est aussi une solution sans VBA, pas meilleure que la MFC je trouve.

Deux autres exemples avec des caractères unicode.

Bien sûr il existe des flèches inclinées.

Edit : dans la mesure où une tendance < 0 est souhaitée j'ai inversé les couleurs.

A+
 

Pièces jointes

  • Test tendance VBA(2).xlsm
    31.7 KB · Affichages: 51
  • Test tendance VBA(2 bis).xlsm
    31.6 KB · Affichages: 49
Dernière édition:

Discussions similaires

Réponses
2
Affichages
114